Esta serie Sitepoint ha explorado los principios de descanso. Este artículo demuestra construir un servicio web RESTful utilizando Slim, un micro-marco de PHP inspirado en Sinatra (Ruby). La naturaleza liviana de Slim, con componentes centrales como enrutamiento, manejo de solicitud/respuesta y soporte de vista mínima, lo hace ideal para API de REST simples.
conceptos clave:
post ()
, put ()
, y delete ()
para crear, actualizar y eliminar registros de libros respectivamente. introduciendo Slim:
Comience descargando Slim. Este ejemplo usa el estilo 5.3. Create index.php
:
get("/", function () {
echo "Hello Slim World
";
});
$app->run();
?>
Accessing index.php
en su navegador muestra "Hello Slim World". SLIM AUTOLOAD ARCHIVOS ENCANTADOS. El constructor Slim acepta la configuración (E.G., MODE
, Templates.path
, ver
). mode
Establece el entorno (desarrollo/producción), y plantplates.path
especifica el directorio de plantilla. Los manejadores de vista personalizado pueden reemplazar el predeterminado slim_view
. Ejemplo:
"development",
"TEMPLATES.PATH" => "./templates"
));
?>
La creación de ruta es crucial. Las rutas asignan URI a las funciones de devolución de llamada basadas en métodos HTTP. Slim prioriza la primera ruta coincidente; Las solicitudes inigualables dan como resultado un error 404. Después de definir rutas, llamar run ()
para iniciar la aplicación.
construyendo un servicio de biblioteca:
creamos un servicio de administración de biblioteca. NotorM simplifica la interacción de la base de datos (requiere una instancia PDO).
Listing Books:
Este punto final enumera todos los libros en formato JSON:
get("/books", function () use ($app, $db) {
$books = array();
foreach ($db->books() as $book) {
$books[] = array(
"id" => $book["id"],
"title" => $book["title"],
"author" => $book["author"],
"summary" => $book["summary"]
);
}
$app->response()->header("Content-Type", "application/json");
echo json_encode($books);
});
// ... (rest of the code) ...
get ()
maneja las solicitudes. use
permite acceder a variables externas dentro de la función anónima. El encabezado de respuesta se establece en aplicación/json
, y los datos del libro están codificados como json.
obteniendo detalles del libro:
recuperar un libro por id:
get("/book/:id", function ($id) use ($app, $db) {
$app->response()->header("Content-Type", "application/json");
$book = $db->books()->where("id", $id);
if ($data = $book->fetch()) {
echo json_encode(array(
"id" => $data["id"],
"title" => $data["title"],
"author" => $data["author"],
"summary" => $data["summary"]
));
} else {
echo json_encode(array(
"status" => false,
"message" => "Book ID $id does not exist"
));
}
});
// ... (rest of the code) ...
El parámetro de ruta : id
se pasa a la función de devolución de llamada. Parámetros opcionales use /book (/: id)
. Para parámetros opcionales sin argumentos explícitos de devolución de llamada, use func_get_args ()
.
agregando y editando libros:
post ()
agrega, y put ()
actualiza libros:
post("/book", function () use ($app, $db) {
$app->response()->header("Content-Type", "application/json");
$book = $app->request()->post();
$result = $db->books->insert($book);
echo json_encode(array("id" => $result["id"]));
});
$app->put("/book/:id", function ($id) use ($app, $db) {
$app->response()->header("Content-Type", "application/json");
$book = $db->books()->where("id", $id);
if ($book->fetch()) {
$post = $app->request()->put();
$result = $book->update($post);
echo json_encode(array(
"status" => (bool)$result,
"message" => "Book updated successfully"
));
} else {
echo json_encode(array(
"status" => false,
"message" => "Book id $id does not exist"
));
}
});
// ... (rest of the code) ...
$ app-> request ()-> post ()
y $ app-> request ()-> put ()
recuperar post y poner datos respectivamente. Para las solicitudes de PUT basadas en el navegador, use un campo oculto _ Método
con el valor "Put" en su formulario.
Eliminar libros:
Eliminar un libro por id:
delete("/book/:id", function ($id) use ($app, $db) {
$app->response()->header("Content-Type", "application/json");
$book = $db->books()->where("id", $id);
if ($book->fetch()) {
$result = $book->delete();
echo json_encode(array(
"status" => true,
"message" => "Book deleted successfully"
));
} else {
echo json_encode(array(
"status" => false,
"message" => "Book id $id does not exist"
));
}
});
// ... (rest of the code) ...
el método delete ()
elimina el registro de la base de datos. El método map ()
maneja múltiples métodos HTTP en una sola ruta (no se muestra aquí).
Conclusión:
Este artículo demuestra la construcción de un servicio web relajante básico con Slim. El desarrollo adicional debe incluir el manejo de errores robusto y la validación de entrada. El código fuente (no incluido aquí) se puede encontrar en GitHub (enlace no proporcionado en el texto original). La sección de preguntas frecuentes del texto original se omite, ya que proporciona información básica fácilmente disponible a través de la documentación de Slim.
Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.
Copyright© 2022 湘ICP备2022001581号-3