Der erste Teil dieses Tutorials hat die grundlegenden Ebenen unserer API festgelegt: Server -Setup, Authentifizierung, JSON -Handhabung, Fehlermanagement und Anfangsrouten. Entscheidend ist, dass wir Ressourcen und Aktionen im Readme definiert haben. Lassen Sie uns nun auf dieser Stiftung aufbauen, indem wir diese Ressourcen implementieren.
Schlüsselkonzepte:
Kontaktverwaltung: Erstellung und Aktualisierungen
Beginnend mit der Kontakterstellung bestimmen die Best Practices, die nach der Erstellung oder dem Update eine Ressourcendarstellung zurückgeben. Während die Datenbankinteraktion in diesem Beispiel für Klarheit vereinfacht wird, würde eine Produktions -API eine robustere ORM/Modell- und Validierungsbibliothek nutzen.
$app->post( '/contacts', function () use ($app, $log) { $body = $app->request()->getBody(); $errors = $app->validateContact($body); if (empty($errors)) { $contact = \ORM::for_table('contacts')->create(); if (isset($body['notes'])) { $notes = $body['notes']; unset($body['notes']); } $contact->set($body); if ($contact->save()) { if (!empty($notes)) { $contactNotes = []; foreach ($notes as $item) { $item['contact_id'] = $contact->id; $note = \ORM::for_table('notes')->create(); $note->set($item); if ($note->save()) { $contactNotes[] = $note->asArray(); } } } $output = $contact->asArray(); if (!empty($contactNotes)) { $output['notes'] = $contactNotes; } echo json_encode($output, JSON_PRETTY_PRINT); } else { throw new Exception("Unable to save contact"); } } else { throw new ValidationException("Invalid data", 0, $errors); } } );
/contacts
Dieser Beitrag verarbeitet den Endpunkt die Anforderungsgremium, überprüft Daten, erstellt einen Kontaktdatensatz, verarbeitet zugeordnete Notizen (falls vorhanden) und gibt eine JSON -Darstellung des erstellten Kontakts zurück. Aktualisieren Sie die Vorgänge (PUT
und PATCH
). Befolgen Sie ein ähnliches Muster, überprüfen Sie die Kontakte und notieren Sie es vor der Verarbeitung. Die Methoden PUT
und PATCH
werden für die Effizienz auf denselben Code abgebildet:
$app->map( '/contacts/:id', function ($id) use ($app, $log) { // Update code here... })->via('PUT', 'PATCH');
Kontaktlistung und Filterung
Grundlegende Kontaktauflistung ist unkompliziert:
$app->get( '/contacts', function () use ($app, $log) { $contacts = \ORM::forTable('contacts')->findArray(); echo json_encode($contacts, JSON_PRETTY_PRINT); } );
Eine robuste API unterstützt jedoch die erweiterte Abfrage: /api/v1/contacts?fields=firstname,email&sort=-email&firstname=Viola&q=vitae
Dieses Beispiel zeigt die Filterung durch firstname
, die Suche innerhalb von firstname
oder email
mit q
, sortieren nach email
und die Auswahl bestimmter Felder. Die Implementierung umfasst die Bereinigung von Eingaben und das dynamische Erstellen der Datenbankabfrage:
$app->post( '/contacts', function () use ($app, $log) { $body = $app->request()->getBody(); $errors = $app->validateContact($body); if (empty($errors)) { $contact = \ORM::for_table('contacts')->create(); if (isset($body['notes'])) { $notes = $body['notes']; unset($body['notes']); } $contact->set($body); if ($contact->save()) { if (!empty($notes)) { $contactNotes = []; foreach ($notes as $item) { $item['contact_id'] = $contact->id; $note = \ORM::for_table('notes')->create(); $note->set($item); if ($note->save()) { $contactNotes[] = $note->asArray(); } } } $output = $contact->asArray(); if (!empty($contactNotes)) { $output['notes'] = $contactNotes; } echo json_encode($output, JSON_PRETTY_PRINT); } else { throw new Exception("Unable to save contact"); } } else { throw new ValidationException("Invalid data", 0, $errors); } } );
Dieser Abschnitt würde den detaillierten Code für die Handhabung fields
, sort
, page
, per_page
Parameter, das Erstellen der Abfrage und die Verwaltung der Paginierung einschließlich der Erzeugung der Link
-Headers enthalten.
Kontaktdaten und eingebettete Ressourcen
einzelne Kontaktdaten abrufen ist einfach:
$app->map( '/contacts/:id', function ($id) use ($app, $log) { // Update code here... })->via('PUT', 'PATCH');
Um die Effizienz zu verbessern, können eingebettete Ressourcen (z. B. Anmerkungen) unter Verwendung von Abfrageparametern wie /api/v1/contacts/1?embed=notes
abgerufen werden. Der Code wird so geändert, dass eine zusätzliche Abfrage für Notizen einbezogen wird, wenn der Parameter embed
vorhanden ist.
Caching und Rate -Limiting
Caching und Ratenlimitierung werden mithilfe von Middleware implementiert, wodurch die Leistung und der API -Schutz verbessert werden. Der Middleware -Code (sowohl für das Caching- als auch für die Rate -Limiting) wäre dem ursprünglichen Beispiel ähnlich, um Cache -Treffer/-Sastes, ETAG -Erzeugung, Ablauf und Ratenlimitprüfungen, einschließlich der entsprechenden HTTP -Headers.
Weitere Entwicklung
Diese verbesserte API bietet ein solides Fundament. Zukünftige Verbesserungen umfassen die Migration zu einem robusteren ORM/Modell, die Integration einer dedizierten Validierungsbibliothek, das Erforschen alternativer Speicherlösungen, die Implementierung der API -Erkennung (z. B. Swagger) und das Erstellen einer umfassenden Testsuite. Der vollständige Quellcode (wie im Original erwähnt) liefert die vollständigen Implementierungsdetails.
Das obige ist der detaillierte Inhalt vonErstellen Sie eine REST -API von Grund auf neu: Implementierung. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!