Diese Bibliothek bietet eine einfache und unkomplizierte Implementierung der IETF-Problemdetails für HTTP-APIs, RFC 9457.
RFC 9457 ist eine einfache Spezifikation zum Formatieren von Fehlerantworten von RESTful-APIs im Web. Diese Bibliothek bietet eine einfache und bequeme Möglichkeit, mit dieser Spezifikation zu interagieren. Es unterstützt das Generieren und Parsen von RFC 9457-Nachrichten sowohl in JSON- als auch in XML-Varianten.
Was sagst du da? Jemand hat Ihrer API eine fehlerhafte Anfrage gesendet? Sag ihnen, dass es ein Problem ist!
use Crell ApiProblem ApiProblem ;
$ problem = new ApiProblem ( " You do not have enough credit. " , " http://example.com/probs/out-of-credit " );
// Defined properties in the API have their own setter methods.
$ problem
-> setDetail ( " Your current balance is 30, but that costs 50. " )
-> setInstance ( " http://example.net/account/12345/msgs/abc " );
// But you can also support any arbitrary extended properties!
$ problem [ ' balance ' ] = 30 ;
$ problem [ ' accounts ' ] = [
" http://example.net/account/12345 " ,
" http://example.net/account/67890 "
];
$ json_string = $ problem -> asJson ();
// Now send that JSON string as a response along with the appropriate HTTP error
// code and content type which is available via ApiProblem ::CONTENT_TYPE_JSON.
// Also check out asXml() and ApiProblem ::CONTENT_TYPE_XML for the angle-bracket fans in the room.
Oder, noch besser, Sie können ApiProblem für einen bestimmten Problemtyp in eine Unterklasse umwandeln (da Typ und Titel zusammenpassen und relativ fest sein sollen) und dann einfach Ihre eigenen fehlerspezifischen Daten auffüllen. Genau wie die Verlängerung einer Ausnahme!
Wenn Sie eine Bibliothek oder ein Framework verwenden, das eine eigene JSON-Serialisierung durchführen möchte, wird dies ebenfalls vollständig unterstützt. ApiProblem implementiert JsonSerializable
, sodass Sie es direkt an json_encode()
übergeben können, als wäre es ein nacktes Array.
$ response = new MyFrameworksJsonResponse ( $ problem );
// Or do it yourself
$ body = json_encode ( $ problem );
Sie verwenden wahrscheinlich PSR-7 für Ihre Antworten. Aus diesem Grund enthält diese Bibliothek ein Dienstprogramm zum Konvertieren Ihres ApiProblem
Objekts in ein PSR-7 ResponseInterface
Objekt mithilfe einer PSR-17-Factory Ihrer Wahl. Etwa so:
use Crell ApiProblem HttpConverter ;
$ factory = getResponseFactoryFromSomewhere ();
// The second parameter says whether to pretty-print the output.
$ converter = new HttpConverter ( $ factory , true );
$ response = $ converter -> toJsonResponse ( $ problem );
// or
$ response = $ converter -> toXmlResponse ( $ problem );
Dadurch erhalten Sie ein voll funktionsfähiges und markiertes Antwortobjekt zurück, das zum Zurücksenden an den Client bereit ist.
Senden Sie Nachrichten an eine API, die mit API-Problem-Fehlern antwortet? Kein Problem! Sie können diese Antwort ganz einfach so handhaben:
use Crell ApiProblem ApiProblem ;
$ problem = ApiProblem :: fromJson ( $ some_json_string );
$ title = $ problem -> getTitle ();
$ type = $ problem -> getType ();
// Great, now we know what went wrong, so we can figure out what to do about it.
(Es funktioniert auch für fromXml()!)
Installieren Sie ApiProblem wie jedes andere Composer-Paket:
composer require crell/api-problem
Weitere Einzelheiten finden Sie in der Composer-Dokumentation.
Wenn Sie sicherheitsrelevante Probleme entdecken, verwenden Sie bitte das GitHub-Sicherheitsmeldeformular und nicht die Problemwarteschlange.
Diese Bibliothek wird unter der MIT-Lizenz veröffentlicht. Kurz gesagt: „Lassen Sie die Urheberrechtserklärung intakt, sonst viel Spaß.“ Weitere Informationen finden Sie unter LIZENZ.
Pull-Anfragen akzeptiert! Das Ziel ist die vollständige Konformität mit der IETF-Spezifikation.