定制 siu-toba/rest 二次开发

按需修改功能、优化性能、对接业务系统,提供一站式技术支持

邮箱:yvsm@zunyunkeji.com | QQ:316430983 | 微信:yvsm316

siu-toba/rest

最新稳定版本:v3.2.0

Composer 安装命令:

composer require siu-toba/rest

包简介

Libreria para servicios REST

README 文档

README

Build Status

REST

Esta librería permite servir APIs rest de forma simple pero estructurada. La misma no posee requisitos específicos de Toba y puede utilizarse de manera standalone en otros sistemas.

Creación de una API REST

La definición de una API REST se basa en convenciones y no requiere especificar metadatos.

Definición de Recursos

Toda información que pueda ser nombrada es un Recurso, por ejemplo: documentos, imagenes, colecciones de otros recursos, tablas definidas en una base de datos, etc. Los recursos a publicar/compartir para un determinado proyecto deben indicarse mediante una clase PHP dentro de la carpeta /proyectos/nombre_proyecto/php/rest/. Por Ejemplo:

  • php/rest/recurso_personas.php se publica en http://../rest/personas
  • php/rest/personas/recurso_personas.php se publica en http://../rest/personas
  • php/rest/recurso_deportes.php se publica en http://../rest/deportes

Los archivos de los recursos deben tener el prefijo recurso_, por ejemplo, para el recurso personas, se debe definir el archivo recurso_personas.php. Cualquier otro archivo definido sin dicho prefijo, no será interpretada como recurso. El nombre en sí de la clase puede diferir del del archivo, no será tomado en cuenta por nada de la librería, simplemente instancia la clase que encuentre en el archivo.

Cada acceso al recurso tiene asociado un método en la clase del mismo, recibiendo como parámetros la parte dinámica de la URL. Por ejemplo, para el siguiente recurso se utiliza el parametro id como identificador:

 //Equivale a GET /rest/{id}: retorna un recurso puntual function get($id) ... //Equivale a DELETE /rest/{id}: elimina un recurso puntual function delete($id) ... //Equivale a PUT /rest/{id}: modifica parte de los atributos del recuso  function put($id) ... 

Aquí un ejemplo completo de recurso personas:

<?php class recurso_personas { function get($id_persona) { $modelo = new modelo_persona($id_persona); $fila = $modelo->get_datos(); rest::response()->get($fila); } function delete($id_persona) { $modelo = new modelo_persona($id_persona); $ok = $modelo->delete(); $errores = array(); if (!$ok) { rest::response()->not_found(); } else { rest::response()->delete($errores); } } function put($id_persona) { $datos = rest::request()->get_body_json(); $modelo = new modelo_persona($id_persona); $ok = $modelo->update($datos); if (!$ok) { rest::response()->not_found(); } else { rest::response()->put(); } } }

Para los casos en los que se requiera recuperar un conjunto de recursos o dar de alta un recurso en particular, se utiliza el sufijo list (para hacer referencia que es sobre la lista de valores y no sobre uno puntual):

 // Equivale a GET /rest: retorna el recurso como un conjunto function get_list() ... // Equivale a POST /rest: da de alta un nuevo recurso function post_list($id) ...
<?php class recurso_personas { function post_list() { $datos = rest::request()->get_body_json(); $nuevo = modelo_persona::insert($datos); $fila = array('id' => $nuevo); rest::response()->post($fila); } function get_list() { $personas = modelo_persona::get_personas($where); rest::response()->get($personas); }

Si se quiere enviar respuestas que no sean JSON o con headers especificos, se puede hacer cambiando la vista y configurando la respuesta de la siguiente manera:

<?php class recurso_documento { function get_list() { $pdf = documentos::get_pdf(); $vista_pdf = new \SIUToba\rest\http\vista_raw(rest::response()); $vista_pdf->set_content_type("application/pdf"); rest::app()->set_vista($vista_pdf); rest::response()->set_data($pdf); rest::response()->set_status(200); rest::response()->add_headers(array( "Content-Disposition" => "attachment; filename=Mi_documento.pdf" )); }

Sub APIs

La librería permite agrupar recursos en subcarpetas, con hasta dos niveles de profundidad, permitiendo asi, definir sub APIs y lograr una mejor división semántica que facilite la aplicación de distintas configuraciones según el caso. Además estas subcarpetas sirven de prefijo de acceso en la URL, por ejemplo /personas/deportes/.

Por ejemplo, una API que brinda servicios al usuario actual, puede tener las subdivisiones admin y me. Para esto se deberá crear una carpeta /rest/me y /rest/admin sin ningún recurso dentro. Si se quieren conocer las mascotas del usuario actual, se debe crear un recurso mascotas en /rest/me/mascotas/recurso_mascotas.php y luego, se podrá acceder por medio de la url /rest/me/mascotas. La alternativa, mas compleja, sin utilizar sub APIs, es accediendo a /rest/usuarios/{usuario_actual}/mascotas.

Links relacionados

统计信息

  • 总下载量: 85.15k
  • 月度下载量: 0
  • 日度下载量: 0
  • 收藏数: 7
  • 点击次数: 1
  • 依赖项目数: 2
  • 推荐数: 0

GitHub 信息

  • Stars: 5
  • Watchers: 1
  • Forks: 8
  • 开发语言: PHP

其他信息

  • 授权协议: Unknown
  • 更新时间: 2026-01-04

承接程序开发

PHP开发

VUE

Vue开发

前端开发

小程序开发

公众号开发

系统定制

数据库设计

云部署

网站建设

安全加固