2012-07-02 25 views
7

Necesito escribir un servidor REST simple en Delphi y un cliente en Ruby on Rails. He visto todos los videos de Marco Cantu sobre REST en Delphi y tengo una pregunta:Usando la solicitud REST en Delphi

¿Cómo puede Delphi procesar solicitudes como "https://stackoverflow.com/users/1" donde 1 es el ID de un usuario?

Todos los ejemplos que he visto el uso de funciones simples (como EchoString(value) o ReverseString(Value)) y la petición se "Datasnap/rest/ClassName/EchoString/Value", pero necesito una petición como "Datasnap/rest/classname/123". Por ejemplo, TContractsCollection es un conjunto de contratos y quiero ver el contrato con ID=324556. Así que en un navegador (y en el cliente de RoR) será (por ejemplo):

"http://localhost:3000/DataSnap/rest/TContractsCollection/324556" 

Pero Delphi escribe:

"TContractsCollection method not found in the server method list"

¿Alguna idea?

+0

Hay un nuevo marco ligero para Delphi y Free Pascal que incluye [soporte de servicios RESTful] (http://mikejustin.wordpress.com/dwf/) con el mapeo de parámetros de solicitud para que pueda declarar la URL con placeho lders como '/ users/{userId}'. (Soy el autor de este marco) – mjn

+0

La exposición de detalles de implementación interna del servidor como el nombre de clase (TContractCollection) no es un buen diseño de RESTFul. Las entidades (o recursos) deben nombrarse de una manera fácil de entender. Una URL RESTFul en este caso sería http://mydomain.com/resources/contracts/324556, para obtener más ejemplos, vea http://stackoverflow.com/a/256359/80901 – mjn

+0

gracias, mjn. Lo he escrito para acentuar que esta es una clase. – yamaxim

Respuesta

0

Se puede definir una función en el TdmServerModule como función

ProcessContract(ContractNo:Integer): String 

cuando

http://localhost:3000/DataSnap/rest/ProcessContract/324556 

se llama, el ContractNo se establecerá en 324556

Cuestiones relacionadas