2009-02-26 5 views
0

In another question fragte ich nach verschiedenen Implementierungen eines einfachen RESTful Webservice. Es wurde jedoch darauf hingewiesen, dass die von mir definierte API nicht besonders RESTful war. Meine Frage: Ist das eine schlechte Sache? Genauer gesagt: Was sind alternative Möglichkeiten, eine solche API zu definieren?
Ich werde die Antwort aus der Problemdefinition in der anderen Frage hinzufügen. Ich würde gerne die streng koscher RESTful-Version sehen, sowie alle anderen Variationen oder Verbesserungen, die andere vorschlagen können.Variationen über einen einfachen Webservice/API: Summieren einer Liste von Zahlen

Das Ziel besteht darin, einfach einen Dienst bereitzustellen, um eine Liste von Zahlen zusammenzufassen. Eine Webservice/API-Definition pro Antwort, bitte!


(Der Punkt ist natürlich nicht wörtlich so ein dummes webservice zu schaffen. Dies sollte eine Frage über das elegante Design von einfachem Web Service sein, mit dieser als verbindendem Beispiel.)

Antwort

1

Hier die API zu schlagen. Ein Aufruf des Formulars

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

sollte zurückkehren

<sum>SUM</sum> 

wo LIST ist eine Liste der durch Leerzeichen getrennte reelle Zahlen und SUM die Summe von ihnen.

Zum Beispiel

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

sollte Idealer

<sum>6</sum> 

zurückkehren, es sei auch einen optionalen "output" Parameter liefert das Format der Ergebnisse zu spezifizieren. Zum Beispiel

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

zurückkehren würde

{"sum" : 4} 
+0

"wo LIST eine Liste von durch Leerzeichen getrennten reellen Zahlen ist" könnte ein anderer Trenner als Platz gut sein, da Leerzeichen in URLs ziemlich verpönt sind. (in Ihrem Beispiel kann ich sehen, Sie selbst verwenden ein "+") anders als das: genau richtig =) –

+0

Vielen Dank! Ein '+' ist eigentlich eine Standardmethode zum Codieren eines Leerzeichens in einer URL, so dass '1 + 2 + 3' ein url-codiertes Rendering von '1 2 3' ist. – dreeves

1

ich mit dem Vorbehalt/Ausrede, dass die Vorteile von REST starten startet für größere und komplexere APIs zu zeigen. Die folgende Lösung wird für ein so triviales Problem wahrscheinlich ziemlich umständlich erscheinen. Nachdem ich das gesagt habe,

Zuerst würde ich nach einem vorhandenen Medientyp suchen, der Listen darstellen kann. Ich würde keine Abfragezeichenfolgenparameter verwenden, da ich ihre Verwendung lieber auf Suchfilter beschränken möchte. Ich werde html als Medientyp verwenden, weil es der erste Gedanke ist, der Listen unterstützt.

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

Zweitens würde ich eine Ressource "Datenverarbeitung" definieren, die die Summierung tun wird.

http://example.org/SummingMachine 

würde ich die POST-Methode verwenden, da RFC2616 sagt kann POST verwendet werden für:

Providing, einen Block von Daten wie dem Ergebnis ein Formular abgeschickt werden, zu einem Daten-Handling Prozess

Also die Summe tun würde ich tun

POST http://example.org/SummingMachine 

und senden Sie die HTML-Liste im Hauptteil des POST. Das Ergebnis könnte als etwas zurückkommen wie:

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

Ich würde vorschlagen, dass diese Lösung mehr RESTful ist als das Original, weil

  • es Standardmedientypen für die Darstellungen verwendet
  • die Ressource, das definiert ist ein Substantiv anstelle eines Verbs
  • es verwendet POST, um einen "Datenhandhabungsprozess" anstelle von GET
durchzuführen