Cette série SitePoint a exploré les principes de repos. Cet article montre la création d'un service Web RESTful utilisant Slim, un micro-travail PHP inspiré de Sinatra (Ruby). La nature légère de Slim, avec des composants centraux comme le routage, la manipulation de la demande / réponse et le support de vue minimale, le rend idéal pour les simples API de repos.
Concepts clés:
post()
, put()
et delete()
pour créer, mettre à jour et supprimer des enregistrements de livres respectivement. Présentation de Slim:
Commencez par télécharger Slim. Cet exemple utilise le style 5.3. Créer index.php
:
<?php require "Slim/Slim.php"; $app = new Slim(); $app->get("/", function () { echo "<h1>Hello Slim World</h1>"; }); $app->run(); ?>
Accéder à index.php
dans votre navigateur affiche "Hello Slim World". Slim Autoloads Fichiers nécessaires. Le constructeur mince accepte la configuration (par exemple, MODE
, TEMPLATES.PATH
, VIEW
). MODE
Définit l'environnement (développement / production), et TEMPLATES.PATH
Spécifie le répertoire de modèle. Les gestionnaires d'affichage personnalisés peuvent remplacer la valeur par défaut Slim_View
. Exemple:
<?php $app = new Slim(array( "MODE" => "development", "TEMPLATES.PATH" => "./templates" )); ?>
La création d'itinéraire est cruciale. Les routes mappent les uris vers des fonctions de rappel basées sur les méthodes HTTP. Slim priorise le premier itinéraire de correspondance; Les demandes inégalées entraînent une erreur 404. Après avoir défini des itinéraires, appelez run()
pour démarrer l'application.
Construire un service de bibliothèque:
Créons un service de gestion de bibliothèque. Notorm simplifie l'interaction de la base de données (nécessite une instance de PDO).
<?php require "NotORM.php"; $pdo = new PDO($dsn, $username, $password); // Replace with your database credentials $db = new NotORM($pdo); ?>
Listing Books:
Ce point de terminaison répertorie tous les livres au format JSON:
<?php // ... (previous code) ... $app->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()
gère les demandes d'obtention. use
permet d'accéder aux variables externes dans la fonction anonyme. L'en-tête de réponse est défini sur application/json
, et les données du livre sont codées sous forme de json.
Obtenir les détails du livre:
Récupérer un livre par id:
<?php // ... (previous code) ... $app->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) ...
Le paramètre de route :id
est transmis à la fonction de rappel. Les paramètres facultatifs utilisent /book(/:id)
. Pour les paramètres facultatifs sans arguments de rappel explicites, utilisez func_get_args()
.
Ajout et modification des livres:
post()
Ajoute et put()
met à jour les livres:
<?php require "Slim/Slim.php"; $app = new Slim(); $app->get("/", function () { echo "<h1>Hello Slim World</h1>"; }); $app->run(); ?>
$app->request()->post()
et $app->request()->put()
Récupérer le post et mettre les données respectivement. Pour les demandes de put basées sur le navigateur, utilisez un champ caché _METHOD
avec la valeur "Put" dans votre formulaire.
Suppression de livres:
Supprimer un livre par id:
<?php $app = new Slim(array( "MODE" => "development", "TEMPLATES.PATH" => "./templates" )); ?>
La méthode delete()
supprime l'enregistrement de la base de données. La méthode map()
gère plusieurs méthodes HTTP sur un seul itinéraire (non illustré ici).
Conclusion:
Cet article montre la création d'un service Web RESTful de base avec Slim. Le développement supplémentaire devrait inclure une gestion des erreurs robuste et une validation d'entrée. Le code source (non inclus ici) peut être trouvé sur GitHub (lien non fourni dans le texte d'origine). La section FAQ du texte d'origine est omise car elle fournit des informations de base facilement disponibles via la documentation de Slim.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!