2012-07-02 40 views
7

Tôi cần viết một máy chủ REST đơn giản trong Delphi và một máy khách trong Ruby on Rails. Tôi đã xem tất cả các video của Marco Cantu về REST ở Delphi và tôi có một câu hỏi:Sử dụng yêu cầu REST ở Delphi

Làm thế nào để yêu cầu xử lý Delphi như "https://stackoverflow.com/users/1" trong đó 1 là ID của người dùng?

Tất cả các ví dụ tôi đã nhìn thấy sử dụng các chức năng đơn giản (như EchoString(value) hoặc ReverseString(Value)) và yêu cầu là "Datasnap/rest/ClassName/EchoString/Value", nhưng tôi cần một yêu cầu như "Datasnap/rest/classname/123".

Ví dụ: TContractsCollection là tập hợp các hợp đồng và tôi muốn xem hợp đồng với ID=324556. Vì vậy, trong một trình duyệt (và trong các khách hàng ROR) nó sẽ được (ví dụ):

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

Nhưng Delphi viết:

"TContractsCollection method not found in the server method list"

Bất kỳ ý tưởng?

+0

Có một khung nhẹ mới cho Delphi và Free Pascal bao gồm [RESTful services support] (http://mikejustin.wordpress.com/dwf/) với ánh xạ tham số yêu cầu để bạn có thể khai báo URL với placeho lders như '/ users/{userId}'. (Tôi là tác giả của khuôn khổ này) – mjn

+0

Hiển thị chi tiết thực hiện nội bộ của máy chủ như tên lớp (TContractCollection) không phải là một thiết kế RESTFul tốt. Các thực thể (hoặc tài nguyên) nên được đặt tên theo cách dễ hiểu. URL RESTFul trong trường hợp này sẽ là http://mydomain.com/resources/contracts/324556, để biết thêm ví dụ, hãy xem http://stackoverflow.com/a/256359/80901 – mjn

+0

cảm ơn, mjn. Tôi đã viết nó để nhấn mạnh rằng đây là một lớp học. – yamaxim

Trả lời

0

Bạn có thể định nghĩa một hàm ở TdmServerModule như chức năng

ProcessContract(ContractNo:Integer): String 

khi

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

được gọi, ContractNo sẽ được thiết lập để 324556

Các vấn đề liên quan