Quelque chose d'être prudent lors de la conception d'une API RESTful est l'amalgame entre GET et POST, comme si elles étaient la même chose. Il est facile de faire cette erreur avec Django's de la fonction de base de points de vue et CherryPypar défaut de l'expéditeur, bien que les deux cadres maintenant de fournir un moyen de contourner ce problème (la classe de base des points de vue et MethodDispatcher, respectivement).
HTTP-verbes sont très importants dans le REPOS, et, sauf si vous êtes très prudent à ce sujet, vous finirez par tomber dans un RESTE anti-modèle.
Certains cadres de l'obtenir droite sont web.py, Flacon et de la Bouteille. Lorsqu'il est combiné avec le mimerender bibliothèque (divulgation complète: je l'ai écrit), ils vous permettent d'écrire de belles webservices RESTful:
import web
import json
from mimerender import mimerender
render_xml = lambda message: '<message>%s</message>'%message
render_json = lambda **args: json.dumps(args)
render_html = lambda message: '<html><body>%s</body></html>'%message
render_txt = lambda message: message
urls = (
'/(.*)', 'greet'
)
app = web.application(urls, globals())
class greet:
@mimerender(
default = 'html',
html = render_html,
xml = render_xml,
json = render_json,
txt = render_txt
)
def GET(self, name):
if not name:
name = 'world'
return {'message': 'Hello, ' + name + '!'}
if __name__ == "__main__":
app.run()
Le service de la logique est mise en œuvre qu'une seule fois, et la représentation correcte de sélection (en-tête Accept) + envoi du bon de rendre la fonction (ou le modèle) est fait dans un ordre, de façon transparente.
$ curl localhost:8080/x
<html><body>Hello, x!</body></html>
$ curl -H "Accept: application/html" localhost:8080/x
<html><body>Hello, x!</body></html>
$ curl -H "Accept: application/xml" localhost:8080/x
<message>Hello, x!</message>
$ curl -H "Accept: application/json" localhost:8080/x
{'message':'Hello, x!'}
$ curl -H "Accept: text/plain" localhost:8080/x
Hello, x!
Mise à jour (avril 2012): ajout d'informations à propos de Django reinhardt, la classe de base des points de vue, CherryPy est MethodDispatcher et Flacon et une Bouteille de cadres. Ils n'existent pas en arrière quand la question a été posée.