siu-toba/rest
Composer 安装命令:
composer require siu-toba/rest
包简介
Libreria para servicios REST
README 文档
README
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.phpse publica enhttp://../rest/personasphp/rest/personas/recurso_personas.phpse publica enhttp://../rest/personasphp/rest/recurso_deportes.phpse publica enhttp://../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
siu-toba/rest 适用场景与选型建议
siu-toba/rest 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 90.03k 次下载、GitHub Stars 达 5, 最近一次更新时间为 2015 年 06 月 26 日, 在 PHP 生态内属于活跃度较高的组件。
我们在过去多个企业项目中使用过 siu-toba/rest 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。
基于 siu-toba/rest 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。
线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。
承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。
统计信息
- 总下载量: 90.03k
- 月度下载量: 0
- 日度下载量: 0
- 收藏数: 7
- 点击次数: 8
- 依赖项目数: 2
- 推荐数: 0
其他信息
- 授权协议: Unknown
- 更新时间: 2015-06-26