Master | Entwickler |
---|---|
Ein Fat Free Framework-Plugin: Brücke zwischen Ihrem Code und der externen REST-API. F3-wcurl fungiert als logische Abstraktionsschicht für cURL, die die Authentifizierung und das Caching von Erfolgsantworten übernimmt.
Das in F3 integrierte Web
Plugin ist großartig und ermöglicht die einfache Verarbeitung einzelner HTTP-Anfragen. F3-wcurl erstellt die Implementierung der gesamten Remote-API in Ihrem Code.
Im Laufe der Zeit hatte ich das Bedürfnis, schnell Tools und Skripte zu erstellen, die eine wesentliche, aber sich wiederholende Aufgabe hatten: cURL-Anfragen, Einstellungen, Objekte, Antworten usw. zu verarbeiten. Am Ende habe ich immer wieder dieselben Funktionen kopiert und geändert und die gleichen Probleme zu beheben , warum etwas nicht funktioniert, die vor Monaten geschrieben wurden .
Auch wenn Sie eine gute Kontrolle über die cURL-Optionen haben und auf diese zugreifen können, zwingt Sie F3-wcurl nicht dazu. Es ermöglicht uns, uns auf die Anfrage selbst zu konzentrieren, was sie ändert und was sie im Gegenzug erhält. Als Plugin für das F3-Ökosystem verfügt es natürlich über einige coole Abhängigkeiten – Prefab
, Cache
und Web
(nicht für cURL-Anfragen selbst).
Die F3-Klasse besteht aus einem assoziativen Array relevanter Einstellungen. Das Array kann entweder direkt aus dem Code oder aus einer INI-Datei (vor dem Erstellen von F3-wcurl in F3 importiert) übergeben und im F3-Hive gespeichert werden.
F3-wcurl verwendet Prefab und Cache von F3, was den Aufruf desselben wcurl-Objekts an einer beliebigen Stelle im Code und einen schnellen Antwortumsatz ermöglicht.
Standardmäßig sucht F3-wcurl nach dem Schlüssel wcurl
im F3-Hive, aber INI kann bequem Einstellungen für mehrere verschiedene REST-API-Implementierungen speichern.
$ wcurl = wcurl:: instance ([ $ iniName = ' wcurl ' | $ optionsArray ]);
Diese recht einfache Array-Struktur definiert das Innenleben von wcurl:
Name | Typ | Standard | Beschreibung |
---|---|---|---|
Wurzel | Zeichenfolge | null | Remote-API-Root, der zum Erstellen des Anforderungs-URI verwendet wird. |
cb_login | Zeichenfolge | null | Legen Sie eine Rückruffunktion aus Ihrem Code fest, die eine Authentifizierung durchführen kann. Dies sollte ein gültiger Rückruf für call_user_func() sein. |
ttl | ganze Zahl | 60 | Sekunden, wie lange GET-Antworten zwischengespeichert werden |
Kopfzeilen | Array | [ ] | cURL gültiges String-Array ["Header: value", "Another-Header: Value"] |
Benutzeragent | Zeichenfolge | F3-wcurl-Version | Useragent-Zeichenfolge |
Basicauth | Zeichenfolge | null | Senden Sie Basic Auth-Header im Format username:password |
queryToken | Zeichenfolge | null | Hängen Sie an jede Anfrage ein URL-Token an |
encodeJSON | Boolescher Wert | WAHR | Weather serialisiert den POST-Text als JSON. Bei der Einstellung false wird der Text als normales HTML-Formular gesendet |
Curlopt | Array | [ ] | RAW-cURL-Einstellungen Array mit RAW-cURL-Einstellungen für die direkte Kontrolle, mit key => val wobei key entweder eine Konstante oder ein Stringname davon sein kann |
ruht | Array | [ ] | key => val Tabelle für URL-Erstellungshelfer (siehe Abschnitt „Beispiele“) |
Um eine Option aus der obigen Tabelle festzulegen, übergeben Sie das Array key => val
mit einer oder mehreren Optionen.
$ wcurl -> setOptions (
[
' useragent ' = > ' F3-wcurl API integration ' ,
' encodeJSON ' = > false ,
' ttl ' = > 300 ,
// etc
]
);
Nur die Optionen, die Sie übergeben, werden aktualisiert, alles andere bleibt im vorherigen/Standardzustand.
Um eine oder mehrere Optionen zu löschen, übergeben Sie den Namen oder die Array-Liste der Schlüssel, die Sie auf die Standardeinstellungen zurücksetzen möchten:
$ wcurl -> clearOptions ([ ' useragent ' , ' ttl ' /*, ... etc */ ]);
So erhalten Sie eine vollständige Auswahl an Optionen, die den aktuellen Status der wcurl-Klasse darstellen:
$ wcurl -> clearOptions ();
Das zurückgegebene mehrdimensionale Array sollte kompatibel sein, um genau dieselbe Klasse zu erstellen wie die, aus der es extrahiert wurde.
Gibt Statistiken darüber zurück, wie viele Anfragen seit der Erstellung der Klasse ausgeführt wurden, wie viele http-Antworten empfangen wurden und wie viele aus dem Cache bereitgestellt wurden.
$ wcurl -> getStats ();
Derzeit unterstützte Funktionen sind GET, POST, PUT, PATCH und DELETE. Ich werde jedoch weitere hinzufügen, sobald ich die Notwendigkeit erkenne, sie umzusetzen.
$ response = $ wcurl -> get ( string $ url [, array $ fill = null [, array $ options = null ]] );
Solche Argumente merke ich mir.
UFO:
$ response = $ wcurl ->post( string $ url , array $ body = null [, array $ fill = null [, array $ options = null ]] );
UFBO – URL, Füllung, Text, Optionen
$ response = $ wcurl ->put( string $ url , array $ body = null [, array $ fill = null [, array $ options = null ]] );
UFBO – URL, Füllung, Text, Optionen
$ response = $ wcurl ->patch( string $ url , array $ body = null [, array $ fill = null [, array $ options = null ]] );
UFBO – URL, Füllung, Text, Optionen
$ response = $ wcurl ->delete( string $ url , array $ body = null [, array $ fill = null [, array $ options = null ]] );
UFBO – URL, Füllung, Text, Optionen
Der Ruhetisch dient zwei gleichermaßen wichtigen Zwecken:
Beim Erstellen langer Remote-URL-Pfade ist es einfacher, sich diese anhand kurzer Schlüsselwörter zu merken, insbesondere wenn sie von mehreren Orten aus aufgerufen werden. Wie allmembers
statt /lists/members/all/pages
. Manchmal enthalten diese auch eindeutige Parameter, die bei jeder Anfrage eingegeben werden müssen. Dieses Konzept ist einer der Hauptgründe, warum dieses Plugin existiert.
Lesen Sie weiter.
Die beste Möglichkeit besteht darin, Remote-Pfade in der .ini
-Konfiguration zu speichern. URL-Variablen für die Füllung werden von beiden Seiten mit zwei %
umschlossen.
TODO: Dieses Umbruchzeichen konfigurierbar machen.
[wcurl.rests]
allmembers =/lists/members/all/pages
withVariable =/lists/members/%%memberID%%/pages
oder übergeben Sie einfach das Array key => value
im laufenden Betrieb – es wird mit der vorherigen Konfiguration zusammengeführt
$ wcurl -> setOptions (
' rests ' => [
' allmembers ' => ' /lists/members/all/pages ' ,
' withVariable ' => ' /lists/members/%%memberID%%/pages ' ,
' updateEmail ' => ' /lists/members/%%memberID%%/update '
]
);
Um eine benannte Route zu verwenden, übergeben Sie deren Namen anstelle des vollständigen Pfads
$ response = $ wcurl -> get ( ' allmembers ' );
Dies wird in /lists/members/all/pages
aufgelöst
$ response = $ wcurl -> get ( ' withVariable ' , array ( ' memberID ' => ' abc123ID ' ) );
Dies wird in /lists/members/abc123ID/pages
aufgelöst
Oder in der POST-Anfrage wissen wir, dass die folgenden UFBO -Parameter übergeben werden müssen
$ wcurl -> post ( ' updateEmail ' , // path shorthand to resolve name
[ ' memberID ' => ' abc123ID ' ], // fill this in the path
[ ' email ' => ' [email protected] ' ] // body to send
);
Wenn Sie die gesamte Konfiguration in Ihrer Haupt- ini
-Datei ablegen, kann die Klasse nur bei der ersten erforderlichen Verwendung initialisiert werden. Das heißt, wenn Ihr Code beschließt, get() zu senden. Wenn die Klasse zu diesem Zeitpunkt nicht in Prefab registriert ist, wird sie genau nach Bedarf aus der INI-Konfiguration erstellt.
Eine vollständige Liste der Optionen finden Sie in der Options-Array-Tabelle weiter oben.
[wcurl]
root =http://mysite.api/v1
ttl =3600
cb_login =yourClass::cb_do_login
useragent = Zeus was here
headers = " Header: value " , " Another-Header: Value "
[wcurl.rests]
allmembers =/lists/members/all/pages
withVariable =/lists/members/%%memberID%%/pages
; Using with multiple API's
[apitwo]
root =http://yoursite.io/v2
ttl =60
useragent = Big Falcon Rocket
[apitwo.rests]
getUsers =/lists/members/all/pages
getOneUser =/lists/members/%%memberID%%/pages
$ wcurl -> setLogin ( callback ' yourClass::cb_do_login ' );
Wenn eine Anfrage zu HTTP 401- oder 403-Code führt, ruft wcurl
die Login-Rückruffunktion auf und wiederholt dann die ursprüngliche Anfrage. Wenn erneut ein Fehler auftritt, wird zum ursprünglichen Funktionsergebnis zurückgekehrt. wcurl
speichert Cookies in einer temporären Datei, die nur für das API-Stammverzeichnis gilt. Diese Cookie-Datei ist in jeder Anfrage enthalten.
Bei erfolgreicher Anmeldung muss der Rückruf „true“ zurückgeben, andernfalls würde die automatische Wiederholung der Anfrage nach erfolgreicher Authentifizierung fehlschlagen.
N!B! Wenn die Anmeldung nicht funktioniert, aber trotzdem return true
, kann es zu request->login->request->login...
Infinitivschleife kommen
Beispiel einer Login-Funktion
static function cb_do_login (){
$ wcurl = wcurl:: instance ();
$ login = $ wcurl -> post ( " /login " , array (
' login ' => ' my_user ' ,
' password ' => ' covfefe ' )
);
if ( $ login [ ' status ' ][ ' http_code ' ]== 200 ){
return true ;
}
// or
$ wcurl -> setOptions ( [ ' basicauth ' => " $ user : $ password " ]);
}
Beim Aufruf von wcurl::instance()
wird es wie eine Singleton-Klasse zurückgegeben, sodass an jeder Stelle im Code dasselbe Objekt verwendet wird. Um eine neue Instanz aus der Klasse zu erzwingen, verwenden Sie etwas wie
$ apiTwo = new wcurl ([ $ iniName | $ optionsArray ]);
Und dann kann $apiTwo
im F3-Hive gespeichert werden.
Es gibt viel zu verbessern, aber ich werde derzeit Funktionen entwickeln, die ich brauche. Wenn etwas für Ihren Anwendungsfall nicht möglich ist, reichen Sie ein Problem oder sogar eine PR ein. Vielen Dank an die F3-Entwickler für dieses wunderbare Framework. Wenn Sie nach etwas wie F3-wcurl suchen, es aber nicht verwenden, überlegen Sie es sich zweimal: Warum verwenden Sie F3 noch nicht?