Wenn Ihr Anliegen ist zu den Rest Prinzipien treu bleiben.
Dann gibt es in der Regel 4 Punkte im Auge zu behalten:
- Basis-URI für den Webservice
- Der Internet-Medientyp der von dem Web-Service unterstützt Daten.
Dies ist oft JSON, XML oder YAML, kann aber auch ein anderes gültiges Internet Medientyp sein.
- Der Satz von Operationen, die vom Web-Service unter Verwendung der HTTP-Methoden unterstützt werden (z. B. GET, PUT, POST oder DELETE).
- Die API muss Hypertext
See, um weitere Informationen zu http://en.wikipedia.org/wiki/Representational_state_transfer gefahren werden.
Nun, mit dem gesagt, würde ich vorschlagen, ändern Sie Ihren obigen Code, um etwas zu sein, was in der Nähe der folgenden Pseudo-Codes.
1) Die Existenz von Ressourcen ist der Schlüssel, denken Sie an Ihre Post (s) als eine Sammlung von Ressourcen, auf die von einem URI zugegriffen werden kann.(Authentifizierung & Genehmigung sind andere Bedenken, die Sie auch zu handhaben mögen):
api.domain.com/resources/posts => Diese URI verweist auf eine Sammlung von Beiträgen
2) Der Satz von Operationen, Sie wollen mit HTTP-Methoden/Verben müssen definiert unterstützen, als ein Beispiel, das wir nur ein Mitglied der Sammlung, indem Sie diese abrufen möchten vielleicht:
api.domain.com/resources/posts/12
Unten sind Anfragekopf & Körper, der in einem ankommenden gefunden werden könnte Anfrage für diese URI:
Accept: application/json
Content-Type: application/json
URL: http://api.domain.com/resources/posts/12
Anfrage Methode: GET
Ihre Anwendung der Lage sein sollte, diese Art von Griff Anfrage, ohne die Notwendigkeit der Operation in der URI festlegt, uns zurück zu Punkt zu bringen (1),
eher als eine URI auf diese Weise geschrieben hat:
domain.com/api/posts/ alle
Ihr URI Modell so sein sollte:
Ressourcen/posts/12 als resources/Typ/Artikel ein Mitglied aus der Sammlung abzurufen,
Ressourcen/Beiträge als Ressourcen/Typ, um mit der gesamten Sammlung zu arbeiten.
Hier ist ein Beispiel von Codes:
Gemeinsame abstrakte Klasse Hier finden Sie einige gemeinsame Aufgaben implementieren können. Wenn Sie eine service-basierte Implementierung verwenden, könnte dies auch von einem Service durchgeführt 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, es gibt Ihnen eine Vorstellung davon, was ein echtes RESTful API aussehen könnte.
Der Schlüssel, um sicherzustellen, dass
"die Anwendung mit einer Ressource interagieren kann, indem zwei Dinge wissen: die Kennung der Ressource und die Aktion erforderlich".
Hoffentlich half dies.
Wenn Sie Sencha Touch in Ihrer PhoneGab App verwenden, können Sie anstelle von RESTful auch eine [Ext.Direct-Implementierung] (http://banchaproject.org) verwenden. –