2010-12-07 8 views
0

Ich arbeite an einer RESTful Web-Anwendung. Jetzt möchte ich die Lese (GET) Anfrage erweitern, um SQL-ähnliche Abfragen zu behandeln, aber ich konnte sie nicht in die URL wegen aller Sonderzeichen ("", "/", "<", ">", "{", "}", etc.). Ich habe bereits gelesen, dass es keine gute Idee ist, den Nachrichtentext in einer GET-Anfrage zu verwenden. Im Moment ist die einzige Option, die ich sehe, die POST-Anfrage zu verwenden. Aber ich würde auch sagen, dass dies keine gute Lösung ist, weil ich POST für eine Leseoperation verwenden würde. Gemäß den REST-Prinzipien sollte das Lesen von der GET-Anforderung durchgeführt werden, und POST sollte nur zum Manipulieren von Daten verwendet werden.RESTful-Anwendung, möchte SQL-Abfrage als Leseanforderung senden

Was denkst du? Was ist der beste Weg, um SQL-ähnliche Anfragen an meine Webanwendung zu senden?

Vielen Dank

Antwort

2

Verwenden CGI :: escape ("select * from NEVER_DO_SUCH_THINGS wo SQL_INJECTION> 'unsicher'")

+0

Danke. Im Moment benutze ich Python um Testanfragen zu senden. Cgi.escape von Python nur entkommt "<", ">", "&". urllib.quote funktioniert besser, entkommt aber trotzdem nicht "/". Es sieht nicht so einfach aus. Daher bin ich nicht wirklich glücklich mit der Lösung. Die Web-App sollte für jeden funktionieren und nicht auf die richtige Escape-Funktion angewiesen sein, vielleicht sogar auf eigene Faust etc. – pinky0x51

0

das OData URI Conventions für ein Beispiel sehen, wie Abfrageoperationen in einen URI zu stopfen .

Sie beschränken jedoch die Verwendung von POST. Die Idee der HTTP-Methoden ist, dass, wenn die Merkmale einer Anfrage denen von GET, PUT und DELETE entsprechen, sie SOLLEN sie verwenden. Sie MUSS NICHT verwenden sie, wenn die Merkmale nicht übereinstimmen. POST ist jedoch eine Platzhaltermethode, die für jede Anforderung verwendet werden kann.

Es ist nicht erforderlich, dass der POST Daten in irgendeiner Weise schreiben, aktualisieren oder manipulieren muss. Indem Sie einem Client mitteilen, dass er die POST-Methode verwenden muss, machen Sie dem Client gegenüber keinerlei Versprechen über das Verhalten des Servers.

Es ist nichts falsch daran, POST zu verwenden, um Datenblöcke zu senden, die für Abfragen verwendet werden. Der Nachteil ist, dass die Antwort eines POST nicht zwischengespeichert wird und Sie daher keinen Vorteil daraus ziehen können.

Es gibt zahlreiche hybride Ansätze, eine davon besteht darin, die Abfrageparameter zu senden und den Server eine neue temporäre Ressource erstellen, die die Abfrage darstellt und dann eine Umleitung zurückgibt, so dass der Client eine get auf der temporären Abfrage Ressource.