10 Stimmen

Delphi XE2: Wie definiert man eine benutzerdefinierte DataSnap REST URI?

Ich verwende Delphi XE2 zum Schreiben von DataSnap REST-Dienst. Ich stelle fest, dass der REST-URI in DataSnap streng diesem Format folgen muss (siehe aquí ):

http://my.site.com/datasnap/rest/URIClassName/URIMethodName[/inputParameter]*

Ein bekanntes Beispiel ist die vom DataSnap-Server-Assistenten erstellte Beispielmethode:

http://my.site.com/datasnap/rest/TServerMethods1/ReverseString/ABC

Es gibt 2 gängige Möglichkeiten, Parameter in URI zu liefern:

  1. Parameter Pfadsegment: /TServerMethods1/ReverseString/ABC
  2. Abfrage-String-Parameter: /TServerMethods1/customers?name=bill

Der Pfadsegmentparameter URI wird definitiv von DataSnap REST unterstützt. Unterstützt DataSnap REST auch Abfrage-String-Parameter URI?

Ich habe das folgende REST-URI-Beispiel und fand es scheint unmöglich, es mit aktuellen DataSnap REST-Bibliothek arbeiten:

  1. /Kunden/A1234

    Kundenobjekt mit der ID A1234 zurückgeben

  2. /Kunden/A1234.xml

    Rückgabe des Kundenobjekts mit der ID A1234 im XML-Format

  3. /Kunden/A1234.json

    Kundenobjekt der ID A1234 im json-Format zurückgeben

  4. /Kunden/A1234.html

    Rückgabe des Kundenobjekts mit der ID A1234 im html-Format

  5. /customers?name=Rechnung

    gibt eine Liste von Kunden zurück, deren Name Bill enthält

5voto

Marjan Venema Punkte 18796

Ich weiß nicht, wie man das mit DataSnap machen kann, aber es gibt Möglichkeiten, das zu umgehen. Sie können etwas namens URLRewrite für diesen Zweck nutzen, da sowohl Ihre freundlichen URIs als auch die von DataSnap benötigten leicht zuzuordnen sind.

Für IIS können Sie das URLRewrite-Modul verwenden (aktivieren), das in IIS 7 standardmäßig enthalten ist. Weitere Informationen finden Sie auf der offiziellen Website: http://www.iis.net/download/urlrewrite .

Stellen Sie sicher, dass Sie Regeln erstellen für Eingehend et Ausgehend von URIs, damit die "internen" (Datasnap-)URIs nicht nach außen dringen.

Wenn Sie die Website mit Apache betreiben, ist eine ähnliche Funktionalität verfügbar, und ich glaube, Sie müssen die .htaccess-Datei ändern, aber ich habe keine Erfahrung mit Apache, also könnte ich mich irren.

3voto

Patrick Punkte 409

Ein bisschen spät zur Party, aber ja, Sie können Abfrageparameter verwenden.

Sie müssen GetInvocationMetadata.QueryParams verwenden

siehe das folgende Beispiel.

uses DBXPlatform;

function TServerMethods1.EchoString(Value: string): string;
var
  metaData: TDSInvocationMetadata;
  i: integer;
begin
  metaData := GetInvocationMetadata;
  for i := 0 to Pred(metaData.QueryParams.Count) do
  begin
    Result := Result + '<param>' + metaData.QueryParams[i] + '</param>';
  end;
  metaData.ResponseContent := '<xml>' + Result + '</xml>';
end;

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X