2009-02-26 3 views
0

Dans another question J'ai demandé différentes implémentations d'un simple service Web RESTful. Il a été souligné, cependant, que l'API I définie n'était pas particulièrement RESTful. Ma question: est-ce une mauvaise chose? Plus précisément: Quelles sont les autres façons de définir une telle API?
Je vais ajouter la réponse de la définition du problème dans l'autre question. J'adorerais voir la version RESTful strictement casher, ainsi que toutes les autres variantes ou améliorations que d'autres peuvent suggérer.Variations sur un simple service Web/API: sommation d'une liste de nombres

Le but est simplement de fournir un service pour additionner une liste de nombres. Une définition de service Web/API par réponse, s'il vous plaît!


(Le point est bien sûr de ne pas fournir littéralement un webservice stupide. Cela est censé être une question sur le design élégant de webservices simples, avec cela comme un exemple fédérateur.)

Répondre

1

Voilà l'API à battre. Un appel de la forme

http://server.com/sum?summands=LIST 

doit retourner

<sum>SUM</sum> 

LIST est une liste de nombres réels séparés par des espaces et la somme est la somme d'entre eux.

Par exemple,

http://server.com/sum?summands=1+2+3 

devrait retourner

<sum>6</sum> 

Idéalement, il serait également fournir un paramètre optionnel "output" pour spécifier le format des résultats. Par exemple,

http://server.com/sum?summands=2+2&output=json 

retournerait

{"sum" : 4} 
+0

"où LISTE est une liste de nombres réels séparés par des espaces" peut-être un séparateur différent de l'espace serait-il bon, puisque les espaces dans les URL sont plutôt désapprouvés. (dans votre exemple, je peux vous voir vous-même utiliser un "+") autre que cela: juste correct =) –

+0

Merci! Un '+' est en fait un moyen standard de coder un espace dans une URL, donc '1 + 2 + 3' est un rendu codé en url de '1 2 3'. – dreeves

1

Je vais commencer par la mise en garde/excuse que les avantages de REST commencent à montrer pour les API plus vastes et complexes. La solution suivante semblera probablement assez lourde pour un problème si trivial. Cela dit,

Je commencerais par rechercher un type de support existant pouvant représenter des listes. Je n'utiliserais pas de paramètres de chaîne de requête car je préfère limiter leur utilisation à des filtres de recherche. Je vais utiliser html comme type de média car c'est le premier qui vient à l'esprit qui supporte les listes.

<ul> 
    <li>1</li> 
    <li>2</li> 
    <li>3</li> 
</ul> 

Deuxièmement, je définirais une ressource de «gestion des données» qui fera la sommation.

http://example.org/SummingMachine 

Je voudrais utiliser la méthode POST, car RFC2616 dit POST peut être utilisé pour:

Fournir un bloc de données, telles que le résultat de soumettre un formulaire, à un traitement des données processus

donc, pour faire la somme que je ferais

POST http://example.org/SummingMachine 

et envoyez la liste html dans le corps du POST. Le résultat pourrait revenir quelque chose comme:

<div class="result">6</div> 

Je suggère que cette solution est plus RESTful que l'original car

  • il utilise les types de support standard pour les représentations
  • la ressource est défini est un nom au lieu d'un verbe
  • il utilise POST pour effectuer un "traitement des données" processus au lieu d'utiliser GET
Questions connexes