50 votes

Ajouter REST à Django

J'ai une application Django qui fonctionne très bien. Je suis ajoutant des services REST. Je suis à la recherche pour certains autres commentaires sur mon RESTE de la stratégie.

Voici quelques exemples de choses que je suis en tordant mes mains sur.

  • Maintenant, je suis en utilisant Django-API REST avec un tas de patchs.
  • Je pense que je vais retomber simplement d'écrire les fonctions d'affichage dans Django qui retournent des résultats JSON.
  • Je peux aussi voir filtrage des requêtes REST dans Apache et de routage sur un autre, non-Django instance de serveur.

Merci de proposer une approche pour répondre afin que nous puissions voter en haut ou en bas.

59voto

Ali Afshar Points 22836

Je pense revenir à écrire simplement dans Django des fonctions d'affichage qui renvoient des résultats JSON.

  • Explicite
  • Portable vers d'autres cadres
  • Ne nécessite pas de patch Django

30voto

yfeldblum Points 42613

Veuillez noter que le REPOS ne signifie pas seulement des résultats JSON. RESTE essentiellement, cela signifie que l'exposition d'une ressource API orientée indigènes, mais à part entière HTTP. Je ne suis pas un expert sur le REPOS, mais voici quelques-unes des choses que les Rails sont en train de faire.

  • Url devrait être bon, les noms simples pour les ressources
  • Utiliser les bonnes méthodes HTTP
    • HEAD, GET, POST, PUT et DELETE
    • En option avec une commande (paramètre de formulaire '_method' remplace requête HTTP-method)
  • Support type de contenu de la négociation par Accepter la demande de l'en-tête
    • En option avec un remplacement (extension de nom de fichier dans l'URL remplace MIME-type dans le d'Accepter la demande de l'en-tête)
    • Les types de contenu disponibles devrait inclure XML, XHTML, HTML, JSON, YAML, et de nombreux autres

Par exemple, pour obtenir le natif de la prise en charge HTTP, le serveur doit répondre à

GET /account/profile HTTP/1.1
Host: example.com
Accept: application/json

comme il allait répondre à la

GET /account/profile.json HTTP/1.1
Host: example.com

Et il doit répondre à

PUT /account/profile HTTP/1.1
Host: example.com

var=value

comme il allait répondre à la

POST /account/profile HTTP/1.1
Host: example.com

_method=PUT&var=value

25voto

oliland Points 699

Pour quelqu'un d'autre la recherche d'un très décent, enfichable de l'application de l'API pour Django, assurez-vous de la caisse jespern de django-piston qui est utilisé en interne au BitBucket.

Il est bien entretenu, a une grande suite et quelques frais de forks qui faire des choses comme ajouter le support pour la pagination et les autres méthodes d'authentification (l'authentification OAuth est pris en charge hors de la boîte).

Mis à jour pour refléter le fait que django-piston n'est plus maintenu.

7voto

RickyA Points 2985

Tastypie est également un nouveau cadre REST pour Django. Il a le même état d'esprit que les pistons et supprime beaucoup de codage passe-partout.

5voto

espenhogbakk Points 2108

Ma réponse à la même question ici: Cadre pour la mise en œuvre du service Web REST dans Django

La version courte est, jetez un oeil à https://github.com/jgorset/django-respite/ un framework REST à ses débuts, mais nous l'utilisons tous les jours sur des projets clients.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X