Das aktuelle Internet -Ökosystem wurde durch APIs vollständig verändert, und es gibt guten Grund. Durch die Verwendung von APIs von Drittanbietern in Ihrem Produkt oder Ihrer Dienstleistung können Sie auf eine breite Palette nützlicher Funktionen zugreifen-wie bei Authentifizierungs- oder Speicherdiensten-, die für Sie und Ihre Benutzer von Vorteil sind. Indem Sie Ihre eigene API aufdecken, wird Ihre Bewerbung "Teil der Komposition" und nutzt sie so, dass Sie nie gedacht haben ... natürlich, wenn Sie dies richtig tun. In dieser zweiteiligen Serie zeige ich Ihnen, wie Sie eine erholsame API-Ebene für Ihre PHP-Anwendung mit einer Reihe echter Best Practices erstellen. Der vollständige Quellcode für dieses Projekt wird am Ende von Teil 2 bereitgestellt.
Schlüsselpunkte
- REST-API ist für moderne Webdienste von entscheidender Bedeutung und bietet Entwicklern eine benutzerfreundliche Schnittstelle zum Zugriff auf und manipuliert Anwendungsdaten.
- Dokumente sind entscheidend.
- Slim Framework, kombiniert mit Tools wie Idiorm und Monolog, können leistungsstarke Funktionen zur Routing- und Middleware -Integration nutzen, um eine effiziente API -Entwicklung zu ermöglichen.
- Implementierung von HTTPS sorgt für eine sichere Kommunikation und verhindert den unbefugten Zugriff auf Daten, die zwischen Clients und Servern übertragen werden.
- Strukturierte Fehlerbehandlung im JSON -Format verbessert die Verfügbarkeit von APIs und liefert klare Fehlermeldungen und Code, die das Debuggen und Integration erleichtern.
- Authentifizierung durch Middleware wie Token über grundlegende Authentifizierung und JSON -Verarbeitung ist entscheidend, um API -Interaktionen effektiv zu schützen und zu verwalten.
Rest: Entwickler-freundlicher UI
Erstens ist die API die Benutzeroberfläche des Entwicklers, daher muss sie freundlich, einfach, einfach zu bedienen und natürlich angenehm sein. Auch wenn es sich nur um eine einfache, aber gut geschriebene Lesendatei handelt, ist die Dokumentation ein guter Anfang. Die geringsten Informationen, die wir benötigen, sind eine Zusammenfassung des Service -Umfangs und eine Liste von Methoden und Zugriffspunkten. Eine gute Zusammenfassung kann sein: & GT; Es verfügt über zwei Objekttypen, Kontakte und Notizen. Jeder Kontakt enthält grundlegende Attribute wie Vorname, Nachname und E -Mail -Adresse. Zusätzlich kann jeder Kontakt mehrere Notizen im Markdown -Format zugeordnet haben.
Dann ist es besser, alle Ressourcen und Vorgänge aufzulisten, die wir implementieren werden. Dies kann als Äquivalent zur Visualisierung des Anwendungsdrahtmodells angesehen werden. Nach den Schlüsselprinzipien der Ruhe wird jede Ressource durch eine URL dargestellt, bei der der Betrieb die HTTP -Methode ist, mit der darauf zugreifen. Zum Beispiel ruft GET/API/CONTACES/12 einen Kontakt mit ID 12 ab, während Put/API/Kontakte/12 denselben Kontakt aktualisieren. Die vollständige Methodenliste lautet wie folgt:
<code>URL HTTP Method Operation /api/contacts GET 返回联系人数组 /api/contacts/:id GET 返回 ID 为 :id 的联系人 /api/contacts POST 添加一个新联系人并返回它(添加了 id 属性) /api/contacts/:id PUT 更新 ID 为 :id 的联系人 /api/contacts/:id PATCH 部分更新 ID 为 :id 的联系人 /api/contacts/:id DELETE 删除 ID 为 :id 的联系人 /api/contacts/:id/star PUT 将 ID 为 :id 的联系人添加到收藏夹 /api/contacts/:id/star DELETE 从收藏夹中删除 ID 为 :id 的联系人 /api/contacts/:id/notes GET 返回 ID 为 :id 的联系人的笔记 /api/contacts/:id/notes/:nid GET 返回 ID 为 :id 的联系人的 ID 为 :nid 的笔记 /api/contacts/:id/notes POST 为 ID 为 :id 的联系人添加新笔记 /api/contacts/:id/notes/:nid PUT 更新 ID 为 :id 的联系人的 ID 为 :nid 的笔记 /api/contacts/:id/notes/:nid PATCH 部分更新 ID 为 :id 的联系人的 ID 为 :nid 的笔记 /api/contacts/:id/notes/:nid DELETE 删除 ID 为 :id 的联系人的 ID 为 :nid 的笔记</code>
Für vollständigere und professionelle Dokumentation können Sie Tools wie Swagger, APIDOC oder Google APIS Discovery -Service verwenden: Ihre Benutzer werden Sie mögen!
Tools und Einstellungen
Das Hauptwerkzeug, mit dem ich die API erstellen werde, ist das schlanke Framework. Warum? & Gt;
Das ist wahr. Durch die leistungsstarken Routing-Funktionen können Sie andere Methoden als Get and Post einfach verwenden. Es bietet integrierte Unterstützung für die HTTP-Methode-Override (über HTTP-Header und versteckte Postfelder) und können mit Middleware und zusätzlichen Funktionen angerufen werden, um Anwendungsprogramme und API zu aktivieren Entwicklung ist wirklich einfach. Zusammen mit SLIM verwende ich IDIORM, um auf die Datenbankschicht und die Protokollierung mit Monolog zugreifen zu können. Daher sieht unsere Datei composer.json so aus:
{ "name": "yourname/my-contacts", "description": "Simple RESTful API for contacts management", "license": "MIT", "authors": [ { "name": "Your Name", "email": "you@yourdomain.com" } ], "require": { "slim/slim": "*", "slim/extras": "*", "slim/middleware": "*", "monolog/monolog": "*", "j4mie/paris": "*", "flynsarmy/slim-monolog": "*" }, "archive": { "exclude": ["vendor", ".DS_Store", "*.log"] }, "autoload": { "psr-0": { "API": "lib/" } } }Die Pakete
Slim/Extras und Slim/Middleware bieten nützliche Funktionen wie Auflösung von Inhaltstyp und grundlegende Authentifizierung. Unsere benutzerdefinierte Klasse befindet sich im API -Namespace und im Lib -Verzeichnis. Zu diesem Zeitpunkt lautet unsere Arbeitsverzeichnisstruktur wie folgt:
<code>bootstrap.php composer.json README.md bin/ import install lib/ API/ public/ .htaccess index.php share/ config/ default.php db/ logs/ sql/ data/ contacts.sql users.sql tables/ contacts.sql notes.sql users.sql ssl/ mysitename.crt mysitename.key</code>
Der Front-End-Controller unserer Anwendung ist öffentlich/index.php, und alle Nicht-Datei- oder Verzeichnisverkehr werden hier über Standard-URL-Umschreibregeln umgeleitet. Dann habe ich den gesamten Initialisierungscode in bootstrap.php eingebaut und wir werden später sehen. Das Share -Verzeichnis enthält Daten wie Protokolle, Konfigurationsdateien, SQLite -Datenbanken und Dumpdateien sowie SSL -Zertifikate. Das Bin -Verzeichnis enthält Dienstprogrammskripte, die die bereitgestellte .sql -Datei zum Erstellen einer Datenbank und zum Importieren einiger Daten verwenden.
ssl ist überall
Unsere API ist nur im HTTPS -Modus zugänglich und erfordert keine Umleitung. Dies vereinfacht die Authentifizierungslogik und verhindert, dass Clients nicht verknüpft auf unverschlüsselte Endpunkte zugreifen. Die einfachste und logischste Möglichkeit, diese Methode einzurichten, besteht darin, direkt auf dem Webserver oder über einen Proxy -Server zu handeln. Ich benutze dazu Old zuverlässiger Apache, und meine virtuelle Host -Datei sieht so aus:
<Directory> # Required for mod_rewrite in .htaccess AllowOverride FileInfo Options All -Indexes DirectoryIndex index.php index.shtml index.html <IfModule php5_module=""> # For Development only! php_flag display_errors On </IfModule> # Enable gzip compression <IfModule filter_module=""> AddOutputFilterByType DEFLATE application/json </IfModule> Order deny,allow Deny from all Allow from 127.0.0.1 </Directory> <VirtualHost *:80> ServerAdmin you@yourdomain.com DocumentRoot "/path/to/MyApp/public" ServerName myapp.dev <IfModule rewrite_module=""> RewriteEngine on ## Throw a 403 (forbidden) status for non secure requests RewriteCond %{HTTPS} off RewriteRule ^.*$ - [L,R=403] </IfModule> </VirtualHost> <IfModule ssl_module=""> NameVirtualHost *:443 Listen 443 SSLRandomSeed startup builtin SSLRandomSeed connect builtin <VirtualHost *:443> ServerAdmin you@yourdomain.com DocumentRoot "/path/to/MyApp/public" ServerName myapp.dev SSLEngine on SSLCertificateFile /path/to/MyApp/share/ssl/mysitename.crt SSLCertificateKeyFile /path/to/MyApp/share/ssl/mysitename.key SetEnv SLIM_MODE development </VirtualHost> </IfModule>
Definieren Sie zuerst die Verzeichniseinstellungen so, dass sie den HTTP- und HTTPS -Versionen unserer Website gemeinsam sind. In einer Nicht-Secure-Host-Konfiguration verwende ich mod_rewrite, um einen 403-Fehler für jede nicht sichere Verbindung zu geben, und habe dann im Sicherheitsabschnitt SSL mit meinem selbstsignierten Zertifikat sowie die SLIM_ENV-Variable eingerichtet, die aussagt Setzen Sie den aktuellen Anwendungsmodus. Weitere Informationen zum Erstellen eines selbstsignierten Zertifikats auf Apache und zur Installation finden Sie in diesem Artikel auf SSLSHOPPER. Nachdem wir ein klares Ziel, eine grundlegende Verzeichnisstruktur und Servereinstellungen haben, führen wir Composer.phar Installation aus und schreiben Sie einen Code.
Boot-Programm und Front-End-Controller
Wie bereits erwähnt, ist die Datei bootstrap.php für das Laden unserer Anwendungseinstellungen und Autoloadereinstellungen verantwortlich.
<code>URL HTTP Method Operation /api/contacts GET 返回联系人数组 /api/contacts/:id GET 返回 ID 为 :id 的联系人 /api/contacts POST 添加一个新联系人并返回它(添加了 id 属性) /api/contacts/:id PUT 更新 ID 为 :id 的联系人 /api/contacts/:id PATCH 部分更新 ID 为 :id 的联系人 /api/contacts/:id DELETE 删除 ID 为 :id 的联系人 /api/contacts/:id/star PUT 将 ID 为 :id 的联系人添加到收藏夹 /api/contacts/:id/star DELETE 从收藏夹中删除 ID 为 :id 的联系人 /api/contacts/:id/notes GET 返回 ID 为 :id 的联系人的笔记 /api/contacts/:id/notes/:nid GET 返回 ID 为 :id 的联系人的 ID 为 :nid 的笔记 /api/contacts/:id/notes POST 为 ID 为 :id 的联系人添加新笔记 /api/contacts/:id/notes/:nid PUT 更新 ID 为 :id 的联系人的 ID 为 :nid 的笔记 /api/contacts/:id/notes/:nid PATCH 部分更新 ID 为 :id 的联系人的 ID 为 :nid 的笔记 /api/contacts/:id/notes/:nid DELETE 删除 ID 为 :id 的联系人的 ID 为 :nid 的笔记</code>
Erstens bekomme ich die aktuelle Umgebung. Wenn eine Datei namens
{ "name": "yourname/my-contacts", "description": "Simple RESTful API for contacts management", "license": "MIT", "authors": [ { "name": "Your Name", "email": "you@yourdomain.com" } ], "require": { "slim/slim": "*", "slim/extras": "*", "slim/middleware": "*", "monolog/monolog": "*", "j4mie/paris": "*", "flynsarmy/slim-monolog": "*" }, "archive": { "exclude": ["vendor", ".DS_Store", "*.log"] }, "autoload": { "psr-0": { "API": "lib/" } } }
Konfigurieren Sie einen Monolog-Protokoll, der in die Datei von App/Path/Share/Logs/Envname_yyyy-mm-dd.log schreibt. Nach einigen Verbesserungen (Sie können sie im Quellcode sehen) erhalte ich den generierten Protokollautor und versuche eine Verbindung zur Datenbank herzustellen:
<code>bootstrap.php composer.json README.md bin/ import install lib/ API/ public/ .htaccess index.php share/ config/ default.php db/ logs/ sql/ data/ contacts.sql users.sql tables/ contacts.sql notes.sql users.sql ssl/ mysitename.crt mysitename.key</code>
Schließlich habe ich meiner Anwendungsinstanz die erforderliche Middleware hinzugefügt. Slims Middleware ist wie eine Zwiebelebene. Die erste Middleware, die Sie hinzufügen, ist die innerste Ebene, sodass die Reihenfolge unserer Middleware wichtig ist. Ich verwende die folgende Middleware in unserer API: - Cache (innere Ebene); Body "Best Practice Utility Middleware; - Authentifizierung (äußerste Schicht). Wir werden all dies schreiben, mit Ausnahme der bereits bestehenden ContentTypes. Am Ende der Bootstrap -Datei definiere ich zwei globale Variablen $ App (AP) und $ log (Logwriter). Die Datei wird von unserem Front-End-Controller index.php geladen, und in dieser Datei passiert etwas Magie.
Routing -Struktur
Slim hat eine schöne Funktion namens Routengruppen. Mit dieser Funktion können wir unsere Anwendungswege wie folgt definieren:
<Directory> # Required for mod_rewrite in .htaccess AllowOverride FileInfo Options All -Indexes DirectoryIndex index.php index.shtml index.html <IfModule php5_module=""> # For Development only! php_flag display_errors On </IfModule> # Enable gzip compression <IfModule filter_module=""> AddOutputFilterByType DEFLATE application/json </IfModule> Order deny,allow Deny from all Allow from 127.0.0.1 </Directory> <VirtualHost *:80> ServerAdmin you@yourdomain.com DocumentRoot "/path/to/MyApp/public" ServerName myapp.dev <IfModule rewrite_module=""> RewriteEngine on ## Throw a 403 (forbidden) status for non secure requests RewriteCond %{HTTPS} off RewriteRule ^.*$ - [L,R=403] </IfModule> </VirtualHost> <IfModule ssl_module=""> NameVirtualHost *:443 Listen 443 SSLRandomSeed startup builtin SSLRandomSeed connect builtin <VirtualHost *:443> ServerAdmin you@yourdomain.com DocumentRoot "/path/to/MyApp/public" ServerName myapp.dev SSLEngine on SSLCertificateFile /path/to/MyApp/share/ssl/mysitename.crt SSLCertificateKeyFile /path/to/MyApp/share/ssl/mysitename.key SetEnv SLIM_MODE development </VirtualHost> </IfModule>
Ich habe zwei verschachtelte Gruppen /API und /v1 erstellt, damit wir die Best Practice "Versionsregelung in der URL" leicht einhalten können. Ich habe auch einige optionale Routen für/API/API erstellt, die benutzerlesbare Inhalte enthalten können, sowie eine gemeinsame Root-URL (/) URL, die in der realen Welt die öffentliche Benutzeroberfläche der Anwendung enthalten kann.
json Middleware
Mein erster Ansatz war es, Routing Middleware (ein weiteres Slim Middleware) innerhalb der Gruppe /V1 für Authentifizierung und JSON -Anforderung /-Anantwort zu verwenden. Ich fand es jedoch praktischer und prägnanter, klassische Middleware zu verwenden. Wie bereits erwähnt, ist Middleware eine Instanz einer Klasse, die von Slimmiddleware geerbt wurde. In der Call () -Methode der Slim Middleware erfolgt der Vorgang.
// Init application mode if (empty($_ENV['SLIM_MODE'])) { $_ENV['SLIM_MODE'] = (getenv('SLIM_MODE')) ? getenv('SLIM_MODE') : 'development'; } // Init and load configuration $config = array(); $configFile = dirname(__FILE__) . '/share/config/' . $_ENV['SLIM_MODE'] . '.php'; if (is_readable($configFile)) { require_once $configFile; } else { require_once dirname(__FILE__) . '/share/config/default.php'; } // Create Application $app = new API\Application($config['app']);
Unser JSON Middleware implementiert zwei Best Practices: "JSON -Reaktion" und "JSON Coding Body". Die Methode lautet wie folgt:
<code>URL HTTP Method Operation /api/contacts GET 返回联系人数组 /api/contacts/:id GET 返回 ID 为 :id 的联系人 /api/contacts POST 添加一个新联系人并返回它(添加了 id 属性) /api/contacts/:id PUT 更新 ID 为 :id 的联系人 /api/contacts/:id PATCH 部分更新 ID 为 :id 的联系人 /api/contacts/:id DELETE 删除 ID 为 :id 的联系人 /api/contacts/:id/star PUT 将 ID 为 :id 的联系人添加到收藏夹 /api/contacts/:id/star DELETE 从收藏夹中删除 ID 为 :id 的联系人 /api/contacts/:id/notes GET 返回 ID 为 :id 的联系人的笔记 /api/contacts/:id/notes/:nid GET 返回 ID 为 :id 的联系人的 ID 为 :nid 的笔记 /api/contacts/:id/notes POST 为 ID 为 :id 的联系人添加新笔记 /api/contacts/:id/notes/:nid PUT 更新 ID 为 :id 的联系人的 ID 为 :nid 的笔记 /api/contacts/:id/notes/:nid PATCH 部分更新 ID 为 :id 的联系人的 ID 为 :nid 的笔记 /api/contacts/:id/notes/:nid DELETE 删除 ID 为 :id 的联系人的 ID 为 :nid 的笔记</code>
Wir können den Stammpfad an den Middleware Constructor übergeben. In diesem Fall bestehe ich /api /v1, so dass unsere Middleware nur auf den API -Teil unserer Website angewendet wird. Wenn der aktuelle Pfad mit dem Header des Antwortinhaltstyps übereinstimmt, ist der Header des Antwortinhaltstyps gezwungen, Anwendung/JSON zu sein, und ich überprüfe die Anforderungsmethode. Wenn die Anforderungsmethode eine der Anforderungsmethoden ist, die Schreibvorgänge aktivieren (put, post, patch), muss der Anforderungs -Inhaltstyp -Header Anwendung/JSON sein, andernfalls wird die Anwendung den 415 nicht unterstützten Medientyp -HTTP -Statuscode beendet und anzeigt. Wenn alles einwandfrei funktioniert, wird die Anweisung $ this- & gt; als nächstes-call () die nächste Middleware in der Kette ausgeführt.
Authentifizierung
Da unsere Anwendung standardmäßig auf HTTPS ausgeführt wird, habe ich beschlossen, eine Methode zu verwenden, bei der Token Vorrang vor der grundlegenden Authentifizierung haben: API -Schlüssel werden an das Feld Benutzername des Basis -HTTP -Auth -Headers (kein Passwort erforderlich) gesendet). Zu diesem Zweck schrieb ich eine schlanke Middleware -Klasse namens tokenoverbasicauth, indem ich die vorhandene schlanke httpbasicicuth geändert habe. Diese Middleware läuft zuerst in der Kette, so dass sie als letzte hinzugefügt wird und im Konstruktor einen optionalen Root -Pfad -Parameter verwendet.
{ "name": "yourname/my-contacts", "description": "Simple RESTful API for contacts management", "license": "MIT", "authors": [ { "name": "Your Name", "email": "you@yourdomain.com" } ], "require": { "slim/slim": "*", "slim/extras": "*", "slim/middleware": "*", "monolog/monolog": "*", "j4mie/paris": "*", "flynsarmy/slim-monolog": "*" }, "archive": { "exclude": ["vendor", ".DS_Store", "*.log"] }, "autoload": { "psr-0": { "API": "lib/" } } }
Diese Methode durchsucht den Header mit PHP_AUTH_USER -Anforderung für Auth -Token. Wenn sie nicht existiert oder ungültig ist, übergeben Sie den 401 verbotenen Status und Authentifizierungsheader an den Client. Die Verify () -Methode ist geschützt und kann daher durch Unterklassen überschrieben werden.
<code>bootstrap.php composer.json README.md bin/ import install lib/ API/ public/ .htaccess index.php share/ config/ default.php db/ logs/ sql/ data/ contacts.sql users.sql tables/ contacts.sql notes.sql users.sql ssl/ mysitename.crt mysitename.key</code>Hier überprüfe ich nur die Existenz des API -Schlüssels in der Benutzertabelle. Wenn ich einen gültigen Benutzer finde, wird er dem Anwendungskontext zur Verwendung mit der nächsten Schicht (Ratelimit) hinzugefügt. Sie können diese Klasse ändern oder erweitern, um Ihre eigene Authentifizierungslogik zu injizieren oder das OAuth -Modul zu verwenden. Weitere Informationen zu OAuth finden Sie auf dem Artikel von Jamie Munro.
verwendete Fehlernutzlast
Unsere API sollte nützliche Fehlermeldungen in einem verwendbaren Format anzeigen, vorzugsweise in JSON -Darstellung, wenn möglich. Wir benötigen eine minimale Nutzlast mit Fehlercodes und Nachrichten. Darüber hinaus erfordern Überprüfungsfehler mehr Segmentierung. Mit SLIM können wir 404-Fehler und Serverfehler mithilfe der Methoden $ App- & gt; NotFound () bzw. $ App- & gt; error () neu definieren.<code>URL HTTP Method Operation /api/contacts GET 返回联系人数组 /api/contacts/:id GET 返回 ID 为 :id 的联系人 /api/contacts POST 添加一个新联系人并返回它(添加了 id 属性) /api/contacts/:id PUT 更新 ID 为 :id 的联系人 /api/contacts/:id PATCH 部分更新 ID 为 :id 的联系人 /api/contacts/:id DELETE 删除 ID 为 :id 的联系人 /api/contacts/:id/star PUT 将 ID 为 :id 的联系人添加到收藏夹 /api/contacts/:id/star DELETE 从收藏夹中删除 ID 为 :id 的联系人 /api/contacts/:id/notes GET 返回 ID 为 :id 的联系人的笔记 /api/contacts/:id/notes/:nid GET 返回 ID 为 :id 的联系人的 ID 为 :nid 的笔记 /api/contacts/:id/notes POST 为 ID 为 :id 的联系人添加新笔记 /api/contacts/:id/notes/:nid PUT 更新 ID 为 :id 的联系人的 ID 为 :nid 的笔记 /api/contacts/:id/notes/:nid PATCH 部分更新 ID 为 :id 的联系人的 ID 为 :nid 的笔记 /api/contacts/:id/notes/:nid DELETE 删除 ID 为 :id 的联系人的 ID 为 :nid 的笔记</code>
Der Fehler wird nicht einfacher gefunden: Zuerst erhalte ich den angeforderten Medientyp, und dann sagt mir das $ isapi -Flag, ob sich die aktuelle URL unter der Gruppe /API /V* befindet. Wenn der Client die API -URL anfordert oder einen Header des JSON -Inhaltstyps sendet, werde ich die JSON -Ausgabe zurückgeben. Andernfalls kann ich die Vorlage rendern oder einfach statische HTML wie in diesem Beispiel gezeigt drucken. Andere Fehler sind etwas schwierig, und die Methode $ App- & gt; error () wird ausgelöst, wenn eine Ausnahme auftritt, und Slim konvertiert einen Standard-PHP-Fehler in ein Errorexception-Objekt. Wir brauchen eine Möglichkeit, Kunden nützliche Fehler zu liefern, ohne zu viele interne Mechanismen aufzudecken, um Sicherheitslücken zu vermeiden. Für diese Anwendung habe ich zwei benutzerdefinierte Ausnahmen erstellt, Apiexception und ApiexceptionValidationException, die der Öffentlichkeit ausgesetzt sind. Alle anderen Ausnahmetypen werden im Protokoll protokolliert und nur im Entwicklungsmodus angezeigt.
{ "name": "yourname/my-contacts", "description": "Simple RESTful API for contacts management", "license": "MIT", "authors": [ { "name": "Your Name", "email": "you@yourdomain.com" } ], "require": { "slim/slim": "*", "slim/extras": "*", "slim/middleware": "*", "monolog/monolog": "*", "j4mie/paris": "*", "flynsarmy/slim-monolog": "*" }, "archive": { "exclude": ["vendor", ".DS_Store", "*.log"] }, "autoload": { "psr-0": { "API": "lib/" } } }Die Methode
$ app- & gt; error () empfängt die geworfene Ausnahme als Parameter. Standardmäßig erhalte ich alle Daten, die ich benötige, und füllen Sie das $ -Fehlerarray ein. Wenn ich dann im Produktionsmodus bin, werde ich die privaten Daten abnehmen und die Nachricht mit den allgemeinen Daten umschreiben. Die benutzerdefinierte ValidationException -Klasse enthält eine benutzerdefinierte getData () -Methode, mit der ein Array von Validierungsfehlern zur endgültigen Nutzlast hinzugefügt wird. Zeigen Sie dann den Fehler in JSON oder HTML anhand der Anforderung an. Auf der API -Seite können wir einen einfachen Fehler wie folgt haben:
<code>bootstrap.php composer.json README.md bin/ import install lib/ API/ public/ .htaccess index.php share/ config/ default.php db/ logs/ sql/ data/ contacts.sql users.sql tables/ contacts.sql notes.sql users.sql ssl/ mysitename.crt mysitename.key</code>
oder ein vollständiger Überprüfungsfehler wie unten gezeigt:
<Directory> # Required for mod_rewrite in .htaccess AllowOverride FileInfo Options All -Indexes DirectoryIndex index.php index.shtml index.html <IfModule php5_module=""> # For Development only! php_flag display_errors On </IfModule> # Enable gzip compression <IfModule filter_module=""> AddOutputFilterByType DEFLATE application/json </IfModule> Order deny,allow Deny from all Allow from 127.0.0.1 </Directory> <VirtualHost *:80> ServerAdmin you@yourdomain.com DocumentRoot "/path/to/MyApp/public" ServerName myapp.dev <IfModule rewrite_module=""> RewriteEngine on ## Throw a 403 (forbidden) status for non secure requests RewriteCond %{HTTPS} off RewriteRule ^.*$ - [L,R=403] </IfModule> </VirtualHost> <IfModule ssl_module=""> NameVirtualHost *:443 Listen 443 SSLRandomSeed startup builtin SSLRandomSeed connect builtin <VirtualHost *:443> ServerAdmin you@yourdomain.com DocumentRoot "/path/to/MyApp/public" ServerName myapp.dev SSLEngine on SSLCertificateFile /path/to/MyApp/share/ssl/mysitename.crt SSLCertificateKeyFile /path/to/MyApp/share/ssl/mysitename.key SetEnv SLIM_MODE development </VirtualHost> </IfModule>
Schlussfolgerung
Wir haben jetzt den Kern der API. Im nächsten Abschnitt werden wir einige Inhalte hinzufügen, um einen voll funktionsfähigen Dienst zu erhalten. In dieser Zeit können Sie die in diesem Abschnitt verknüpften Artikel lesen - sie sind eine Schatzkammer nützlicher API -Designprinzipien.
FAQs (FAQ) zum Erstellen von REST -APIs von Grund auf
Was sind die Schlüsselkomponenten der Rest -API?
REST -API besteht aus mehreren Schlüsselkomponenten. Erstens ist die HTTP -Methode, die die Art der Operation definiert, die ausgeführt wird. Dazu gehören Get, Post, Put, Löschen usw. Die zweite Komponente ist eine URL oder URI, die die Ressourcenkennung ist. Die dritte Komponente ist der HTTP -Header, der die Metadaten von HTTP -Anforderungen und Antworten trägt. Die vierte Komponente ist die Körper- oder Nutzlast, die die tatsächlichen Daten trägt, die übertragen werden sollen. Schließlich gibt der Statuscode den Erfolg oder Misserfolg der HTTP -Anfrage an.
Wie schützt ich meine Ruhe -API?
Schutz Ihrer REST -API ist für den Schutz sensibler Daten unerlässlich. Sie können verschiedene Methoden wie API -Schlüssel, OAuth oder JWT zur Authentifizierung und Autorisierung verwenden. Darüber hinaus wird die Datenübertragung immer verwendet, um die Datenintegrität und Vertraulichkeit zu gewährleisten. Aktualisieren Sie Ihre API und ihre Abhängigkeiten regelmäßig, um vor Sicherheitslücken zu schützen.
Wie kann ich meine REST -API versionieren?
Versionierung Ihrer REST-API ermöglicht es Ihnen, nicht-zerstörerische Änderungen einzuführen, ohne bestehende Kunden zu beeinflussen. Sie können die API durch Einbeziehung der Versionsnummer in die URL oder einen benutzerdefinierten Anforderungsheader verwenden. Denken Sie daran, alle Änderungen zu protokollieren und Ihre API -Verbraucher über die neue Version und deren Funktionen zu informieren.
Wie kann ich Fehler in der REST -API umgehen?
Die korrekte Fehlerbehandlung in der Rest -API verbessert die Benutzerfreundlichkeit und Zuverlässigkeit. Verwenden Sie einen HTTP -Statuscode, um den Fehlertyp anzugeben. Fügen Sie eine Fehlermeldung in die Antwortkörper ein, um weitere Informationen zum Fehler zu erhalten. Dies hilft dem Kunden zu verstehen, was falsch ist und wie das Problem gelöst werden kann.
Wie testet ich meine REST -API?
Testen Sie Ihre REST -API, um sicherzustellen, dass sie wie erwartet funktioniert und eine Vielzahl von Szenarien bewältigen kann. Sie können Tools wie Postman oder Locken für manuelle Tests verwenden. Für automatisierte Tests sollten Sie Unit-Tests, Integrationstests und End-to-End-Tests verwenden. Verwenden Sie einen Mock -Server, um API -Antworten zu simulieren und zu testen, wie Ihre API verschiedene Arten von Antworten behandelt.
Wie zeichne ich meine REST -API auf?
Gute Dokumentation macht Ihre REST -API leicht zu verstehen und zu verwenden. Enthält detaillierte Informationen zu Endpunkten, Anforderungsmethoden, Anforderungsparametern, Anforderungsbeispielen, Antwortstatuscodes und Antwortbeispiele. Sie können Tools wie Prahlerei oder Postbote verwenden, um Ihre API -Dokumente zu generieren und zu hosten.
Wie kann man eine erholsame API entwerfen?
Design Rastful APIs beinhaltet Planungsressourcen, Endpunkte und Methoden. Verwenden Sie Substantive für Ressourcen und HTTP -Methoden für Operationen. Halten Sie die API einfach und intuitiv. Verwenden Sie Statuscodes, um das Ergebnis der Anforderung anzugeben. Machen Sie Ihre API zu Staurlos, was bedeutet, dass jede Anfrage alle Informationen enthalten sollte, die Sie zur Bearbeitung der Anfrage benötigen.
Wie kann man Ergebnisse in meiner Ruhe -API paginieren?
Paging hilft, die in einer einzelnen Antwort zurückgegebene Datenmenge einzuschränken. Sie können Paging mit Abfrageparametern wie "Seite" und "Limit" implementieren. Geben Sie Metadaten in den Antwortheader oder die Leiche ein, um die aktuelle Seite, die Gesamtzahl der Seiten, die Gesamtzahl der Elemente usw. anzugeben.
Wie kann ich die Rate meiner REST -API einschränken?
Ratenbegrenzung schützt Ihre REST -API vor Missbrauch und sorgt für einen fairen Gebrauch. Sie können die Anzahl der Anforderungen basierend auf Ihrer IP -Adresse, Ihrem API -Schlüssel oder Ihrem Benutzerkonto einschränken. Verwenden Sie HTTP -Header, um dem Kunden den Status der Rate einzuschränken.
Wie kann ich meine REST -API bereitstellen?
Sie können Ihre REST -API auf einer Server- oder Cloud -Plattform bereitstellen. Berücksichtigen Sie bei der Auswahl der Bereitstellungsoptionen Faktoren wie Kosten, Skalierbarkeit und Sicherheit. Verwenden Sie die kontinuierliche Integration und Continuous Delivery (CI/CD) -Tools, um den Bereitstellungsprozess zu automatisieren. Überwachen Sie Ihre API -Leistung und -nutzung, um sicherzustellen, dass sie den Anforderungen Ihrer Benutzer entsprechen.
Das obige ist der detaillierte Inhalt vonErstellen Sie eine REST -API von Grund auf neu: eine Einführung. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Lange URLs, die oft mit Schlüsselwörtern und Tracking -Parametern überfüllt sind, können Besucher abschrecken. Ein URL -Verkürzungsskript bietet eine Lösung, die präzise Links erstellt, die ideal für soziale Medien und andere Plattformen sind. Diese Skripte sind für einzelne Websites a wertvoll

Laravel vereinfacht die Behandlung von temporären Sitzungsdaten mithilfe seiner intuitiven Flash -Methoden. Dies ist perfekt zum Anzeigen von kurzen Nachrichten, Warnungen oder Benachrichtigungen in Ihrer Anwendung. Die Daten bestehen nur für die nachfolgende Anfrage standardmäßig: $ Anfrage-

Dies ist der zweite und letzte Teil der Serie zum Aufbau einer Reaktionsanwendung mit einem Laravel-Back-End. Im ersten Teil der Serie haben wir eine erholsame API erstellt, die Laravel für eine grundlegende Produktlistenanwendung unter Verwendung von Laravel erstellt hat. In diesem Tutorial werden wir Dev sein

Laravel bietet eine kurze HTTP -Antwortsimulationssyntax und vereinfache HTTP -Interaktionstests. Dieser Ansatz reduziert die Code -Redundanz erheblich, während Ihre Testsimulation intuitiver wird. Die grundlegende Implementierung bietet eine Vielzahl von Verknüpfungen zum Antworttyp: Verwenden Sie Illuminate \ Support \ facades \ http; Http :: fake ([ 'Google.com' => 'Hallo Welt',, 'github.com' => ['foo' => 'bar'], 'Forge.laravel.com' =>

Die PHP Client -URL -Erweiterung (CURL) ist ein leistungsstarkes Tool für Entwickler, das eine nahtlose Interaktion mit Remote -Servern und REST -APIs ermöglicht. Durch die Nutzung von Libcurl, einer angesehenen Bibliothek mit Multi-Protokoll-Dateien, erleichtert PHP Curl effiziente Execu

Möchten Sie den dringlichsten Problemen Ihrer Kunden in Echtzeit und Sofortlösungen anbieten? Mit Live-Chat können Sie Echtzeitgespräche mit Kunden führen und ihre Probleme sofort lösen. Sie ermöglichen es Ihnen, Ihrem Brauch einen schnelleren Service zu bieten

Die 2025 PHP Landscape Survey untersucht die aktuellen PHP -Entwicklungstrends. Es untersucht Framework -Nutzung, Bereitstellungsmethoden und Herausforderungen, die darauf abzielen, Entwicklern und Unternehmen Einblicke zu geben. Die Umfrage erwartet das Wachstum der modernen PHP -Versio

In diesem Artikel werden wir das Benachrichtigungssystem im Laravel -Web -Framework untersuchen. Mit dem Benachrichtigungssystem in Laravel können Sie Benachrichtigungen an Benutzer über verschiedene Kanäle senden. Heute werden wir diskutieren, wie Sie Benachrichtigungen OV senden können


Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

Sicherer Prüfungsbrowser
Safe Exam Browser ist eine sichere Browserumgebung für die sichere Teilnahme an Online-Prüfungen. Diese Software verwandelt jeden Computer in einen sicheren Arbeitsplatz. Es kontrolliert den Zugriff auf alle Dienstprogramme und verhindert, dass Schüler nicht autorisierte Ressourcen nutzen.

SublimeText3 Linux neue Version
SublimeText3 Linux neueste Version

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)
