Wenn es Ihnen darum geht, den Restprinzipien treu zu bleiben.
Dann gibt es in der Regel 4 Punkte, die zu beachten sind:
- Basis-URI für den Webdienst
- Der Internet-Medientyp der vom Webdienst unterstützten Daten.
Dies ist oft JSON, XML oder YAML, kann aber auch jede andere gültige Internet Medientyp sein.
- Die vom Webdienst unterstützten Operationen unter Verwendung von HTTP-Methoden (z. B. GET, PUT, POST oder DELETE).
- Die API muss hypertextgesteuert sein
Siehe, http://en.wikipedia.org/wiki/Representational_state_transfer für weitere Einzelheiten.
Nun, mit dieser sagte, würde ich vorschlagen, ändern Sie Ihre oben genannten Code zu sein, was in der Nähe der unten Pseudo-Codes.
1) Das Vorhandensein von Ressourcen ist der Schlüssel. Stellen Sie sich Ihren Beitrag als eine Sammlung von Ressourcen vor, auf die über einen URI zugegriffen werden kann (Authentifizierung und Autorisierung sind weitere Aspekte, die Sie vielleicht auch berücksichtigen möchten):
api.domain.com/resources/posts => Dieser URI verweist auf eine Sammlung von Posts
2) Der Satz von Operationen, die Sie mit HTTP-Methoden/Verben unterstützen wollen, muss definiert werden, z. B. wenn Sie nur ein Mitglied der Sammlung abrufen wollen:
api.domain.com/resources/posts/12
Nachfolgend finden Sie die Kopfzeilen und den Textkörper einer eingehenden Anfrage für diese URI:
Akzeptieren: application/json
Inhalt-Typ: application/json
Url anfordern: http://api.domain.com/resources/posts/12
Methode anfordern: GET
Ihre Anwendung sollte in der Lage sein, diese Art von Anfrage zu bearbeiten, ohne dass die Operation im URI angegeben werden muss, womit wir wieder bei Punkt (1) wären,
als dass ein URI auf diese Weise geschrieben wird:
domain.com/api/posts/ alle
Ihr URI sollte auf diese Weise modelliert werden:
resources/posts/12 als resources/type/item, um ein Mitglied aus der Sammlung abzurufen,
resources/posts als resources/type, um mit der gesamten Sammlung zu arbeiten.
Hier ist ein Beispiel für Codes:
Gemeinsame abstrakte Klasse Hier können Sie einige allgemeine Aufgaben implementieren. Wenn Sie eine dienstbasierte Implementierung verwenden können diese Aufgaben auch durch einen Dienst erledigt werden.
abstract class ResourcesController extends AppController {
}
class PostResourcesController extends ResourcesController {
/**
* By the time this method is called in your controller/class, you already know
* that the HTTP method is GET.
*
* @param Request\$_GET $request A request instance
* @param int $postId The post ID to retrieve
*
* @return Response A reponse instance
*/
function getPost(Request $Request, $postId = null)
{
/**
* Here you can use the request object to get
* the response content type
* the requesting client accepts. Example JSON or XML.
*/
/**
* using the $postId you can then query your database
* to retrieve a post with that ID or use a sort of
* service.
*/
/**
* Once you implemented a you logic
* you can build a response to return.
*/
}
}
Dieser Code ist unvollständig, aber ich hoffe, er liefert eine Vorstellung davon, wie eine echte Restful-API aussehen könnte.
Der Schlüssel dazu ist, sicherzustellen, dass
"Die Anwendung kann mit einer Ressource interagieren, indem sie zwei Dinge kennt: den Bezeichner der Ressource und die erforderliche Aktion".
Ich hoffe, das hat geholfen.