2012-05-12 33 views
10

Estoy usando Delphi XE2 para escribir el servicio REST DataSnap. Me he dado cuenta de que el resto URI en DataSnap debe seguir estrictamente este formato (consulte here):Delphi XE2: ¿Cómo definir un URI de REST DataSnap personalizado?

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

Un ejemplo famoso es el método de muestreo crear por asistente servidor DataSnap:

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

Hay 2 formas comunes a parámetros de suministro en URI: parámetro Segmento

  1. Ruta:/TServerMethods1/ReverseString/ABC
  2. cadena de consulta p arameter:/TServerMethods1/customers? name = factura

El URI del parámetro del segmento de ruta es definitivamente compatible con DataSnap REST. ¿El parámetro URI de parámetros de cadena de consulta es compatible con DataSnap REST también?

tengo el siguiente ejemplo REST URI y encontraron que parece imposible de hacer que funcione con corriente biblioteca DataSnap RESTO:

  1. /clientes/A1234

    objeto de devolución del cliente de ID A1234

  2. /customers/A1234.xml

    retorno del objeto de cliente A1234 ID en formato XML

  3. /customers/A1234.json

    objeto de devolución del cliente de ID A1234 en formato JSON

  4. /customers/A1234.html

    retorno del objeto de cliente A1234 ID en formato html

  5. /clientes? Nombre = Bill

    devolver una lista de cliente cuyo nombre contiene Bill

Respuesta

5

no sé cómo hacerlo usando DataSnap, pero hay maneras alrededor de él. Puedes usar algo llamado URLRewrite para esto, ya que tanto tus URIs amigables como los requeridos por DataSnap son fácilmente mapeables.

Para IIS puede usar (habilitar) el módulo URLRewrite que es estándar en IIS 7. Se puede encontrar más información en el sitio oficial: http://www.iis.net/download/urlrewrite.

Asegúrese de crear reglas para inbound y outbound URI de modo que el "interior" (DataSnap) de URI no salen en el medio natural.

Si está ejecutando el sitio en Apache, hay disponible una funcionalidad similar, y necesito ajustar el archivo .htaccess, pero no tengo experiencia con Apache, así que podría estar equivocado.

+1

Eso sería tedioso si la aplicación de descanso se va a implementar en muchos sitios. –

+0

@ChauCheeYang: ¿Por qué? Es solo un par de reglas en web.config. No necesita usar el administrador de IIS para editarlos, simplemente puede agregarlos directamente al sitio web.config del sitio o hacer que un script de instalación haga eso por usted. –

3

Un poco tarde para la fiesta, pero sí puede usar parámetros de consulta.

usted tiene que utilizar GetInvocationMetadata.QueryParams

ver el ejemplo a continuación.

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; 
+0

No utiliza TDSInvocationMetadata.Create() ... ¿es correcto? –

+0

http://docwiki.embarcadero.com/Libraries/XE2/en/Data.DBXPlatform.GetInvocationMetadata Es algo que usted no debería crear, entonces sí, es correcto – Patrick

Cuestiones relacionadas