web-dev-qa-db-fra.com

Comment écrire une API REST?

J'écris une application iPhone en tant que projet de loisir et il lui faudra un service Web pour lui fournir des données. Ce n'est pas très différent de ce que je fais au travail, mais au travail, je n'écris que des vues et des contrôleurs. Quelqu'un d'autre est responsable de la rédaction du modèle et les clients fournissent généralement le service Web.

Auparavant, j’avais déjà travaillé sur la programmation Web, à l’époque où tout le monde utilisait MySQL et PHP, mes compétences sont donc un peu dépassées, mais je suis convaincu que je serais capable de tirer parti des techniques que je connais déjà. Cependant, je ne veux pas perdre mon temps en utilisant des outils obsolètes. J'ai compris que l'état de l'art serait d'écrire une API REST. Je pensais qu'il devrait y avoir de très bons frameworks qui ne vous donneraient qu'une API REST avec la fonctionnalité CRUD dès que vous aurez défini un modèle.

Je suppose que ma question est la suivante: quel serait le moyen le plus rapide d’obtenir une API REST opérationnelle? Je veux vraiment juste me concentrer sur l'écriture de l'application iPhone et ne pas passer trop de temps sur cette API. Ce serait formidable si je pouvais aussi obtenir l’administration Web et l’historique des révisions. Je devrais également ajouter que l'API n'est pas censée être publique, le support de l'authentification serait également utile.

Juste pour être clair. Un cadre PHP ne me dérangerait pas. En fait, cela pourrait peut-être être mieux puisque je sais que mon hébergement actuel le supporte.

82
Erik B

Juste pour que tu saches:

J'ai fini par utiliser Ruby sur Rails.

EDIT: Étant donné que cette réponse a été votée pour ne pas avoir indiqué le motif du choix Ruby sur Rails et aussi aucune instruction sur la façon d'écrire une API REST avec elle, je pensais vous donner ma motivation et quelques instructions simples.

J'ai commencé à lire un livre sur Ruby sur Rails et je me suis rendu compte que tout ce que je devais faire était d'utiliser un échafaudage et j'ai obtenu un JSON REST API gratuitement.

Voici un bon guide pour vous aider à démarrer: http://guides.rubyonrails.org/getting_started.html

Lorsque vous avez votre environnement Ruby sur Rails opérationnel, créer votre API REST n'est pas plus difficile que d'exécuter:

$ Rails generate scaffold Post name:string title:string content:text

(Exemple tiré du lien ci-dessus.) J'ai également constaté que Rails est très facile et gratuit à déployer sur herok , ce qui signifie que je n'ai pas à payer pour Hébergement pour mon API très basique et à faible trafic, REST. Il existe de nombreuses autres raisons pour lesquelles je suis très heureux de travailler avec Ruby sur Rails, mais cela va au-delà le contexte de cette question.

8
Erik B

EDIT:

Les liens ci-dessous qui étaient apparemment bons pour 3 ans ne fonctionnent plus, alors je suis allé à la recherche de nouveaux tutoriels que je pense vont rester pendant un moment. Celles-ci se trouvent sur le site de Ray Wenderlich, un site de tutoriel très respecté pour ios dev. Le premier article fait en réalité référence aux liens brisés ci-dessous mais il est complet en lui-même:

Comment écrire un service Web simple PHP/MySQL pour une application iOS

et le second a une petite tournure. Il a utilisé parse.com sur le backend et AFNetworking. Les deux sont assez excellents.

Comment synchroniser des données de base avec un service Web - Partie 1


J'ai corrigé les liens brisés ci-dessous en trouvant les articles dans le chemin du retour. Les gens semblent aimer les liens alors je les garderai. Les liens ci-dessus devraient fournir plus de matière à réflexion.


Je fais exactement la même chose avec mon application iphone. J'ai trouvé cet article sur la construction d'une API RESTful en PHP:

https://web.archive.org/web/20130910164802/http://www.gen-x-design.com/archives/create-a-rest-api-with-php/

et il y a aussi un article de suivi ici:

https://web.archive.org/web/20130323001500/http://www.gen-x-design.com/archives/making-restful-requests-in-php/

avec un lien vers le code source au bas de l'article.

42
nickfox

J'ai suivi un tutoriel assez simple pour créer des API RESTful avec PHP:

Corey Maynard - Création d’une API RESTful avec PHP

Le concept principal comprend:

  • une classe abstraite qui gère l'analyse de l'URI et renvoie la réponse, et
  • une classe concrète constituée uniquement des points d'extrémité de l'API.
8
jim_kastrin

J'ai programmé une REST dans ZEND Framework à l'aide du Zend_Rest_Controller, sur l'iPhone que j'ai utilisé ASIHTTPRequest . Mon expérience avec les deux était bonne. Au début, j’avais quelques difficultés à configurer ZEND et à le connecter à MySQL, mais une fois que j’ai compris comment le faire, j’ai pu écrire très rapidement l’API. Je peux partager davantage d’informations avec vous si vous avez des questions.

EDIT: Il semble n'y avoir aucune documentation officielle sur Zend_Rest_Controller. Ce lien décrit comment l’utiliser pour créer votre API. Vous devez simplement désactiver le rendu dans la init() de votre sous-classe et implémenter les méthodes pour chaque appel REST.

8
Philipp Flenker

Qu'en est-il de Python?

J'utiliserais Python, Django et Piston.

  1. Je générerais des modèles Django à partir de votre base de données existante en utilisant inspectdb .
  2. Ajoutez l'administrateur Django à vos modèles.
  3. Ajouter Django Piston à votre application.
  4. Profit.

Sans expérience avec Python ou Django, cela vous prendra probablement une journée pour développer cette solution et tout le code est testé à l'unité et s'est avéré fonctionner .

3
igorgue

Si vous souhaitez utiliser PHP, je vous recommande d'utiliser le framework CodeIgniter avec le serveur REST de Phil Sturgeon:

http://net.tutsplus.com/tutorials/php/working-with-restful-services-in-codeigniter-2

https://github.com/philsturgeon/codeigniter-restserver

2
adamkrell

Vérifiez ce qui suit PHP la classe qui suit MVC. http://www.phpclasses.org/package/5080-PHP-Implement-REST-Web-services-servers.html

J'espère que cela t'aides.

1
shauvik

Une autre option est restSQL, un framework de persistance ultra-léger. Voir http://restsql.org . Il prend en charge MySQL et PostgreSQL et s’exécute dans un conteneur standard Java EE, par exemple Apache Tomcat.).

restSQL est une couche d'accès aux données très peu conventionnelle. restSQL n'est pas une vue orientée objet de la base de données. Il présente des "vues" plates ou hiérarchiques des tables de bases de données relationnelles. Ces vues peuvent être interrogées et mises à jour via un simple HTTP basé sur REST ou Java. L'interface HTTP est basée sur les principes REST, qui utilisent -dans les fonctionnalités, plutôt que de faire abstraction d'eux.

Vous voulez une 'API REST avec une fonctionnalité CRUD' et c'est exactement le point de mire de reposSQL Vous pouvez le faire sans code. Définissez simplement vos ressources SQL via des fichiers XML et commencez à faire des appels HTTP avec la fonctionnalité CRUD complète.

0
Mark Sawers

Vous devez utiliser les langues avec lesquelles vous êtes à l'aise pour le service Web. Toute langue capable de formuler REST réponses aux demandes convient parfaitement.

Cela dit, si vous souhaitez que quelque chose fonctionne rapidement, je vous suggère d'utiliser Python sur Google App Engine. C'est gratuit et vous pouvez utiliser Java au lieu de Python si vous le souhaitez. App Engine prend en charge l'authentification à l'aide d'OpenID et/ou de comptes Google (ne sachant pas s'ils s'excluent mutuellement), ce qui devrait faciliter la codification.

En ce qui concerne les requêtes sur le périphérique iOS, je suggère d'utiliser ASIHTTPRequest .

0
Moshe

Si vous connaissez déjà PHP, rien de mal à un backend PHP/MySQL. Vous pouvez envoyer toutes les réponses au format XML plist compatible avec l'iPhone et transformer instantanément la réponse en une structure de données NSDictionary/NSArray/NSNumber avec ce court extrait de code:

NSString *response = [request responseString];
NSData* plistData = [response dataUsingEncoding:NSUTF8StringEncoding];
NSPropertyListFormat format;
NSString *errorStr;
NSDictionary* plist = [NSPropertyListSerialization propertyListFromData:plistData 
                                                       mutabilityOption:NSPropertyListImmutable 
                                                                 format:&format 
                                                       errorDescription:&errorStr];

J'utilise également le paquet ASIHTTP pour former des URL, envoyer des requêtes asynchrones et recevoir les réponses. Je le recommande vivement:

http://allseeing-i.com/ASIHTTPRequest/

0
Bogatyr