2012-09-21 44 views
5

hướng dẫn Hầu hết REST của nguồn lực sắp xếp như sau:Thiết kế URL RESTful cho các trang web

GET /car/  -> list of cars 
GET /car/<id>/ -> info about specific car 
POST /car/  -> create a new car 

nhưng khi xây dựng các ứng dụng web để sử dụng trong các trình duyệt, có một mắt xích còn thiếu mà hiếm khi được thảo luận, trước khi bạn có thể đăng bài đến/xe /, bạn cần phải GET một hình thức để tạo ra một nguồn tài nguyên mới (xe hơi). URL nên cho biểu mẫu này là gì?

tôi thường sử dụng:

GET /car/new/ -> form for creating a new car 
POST /car/new/ -> redirect to /car/<id>/ if item is created else show form with invalid fields highlighted 

nhưng theo http://www.slideshare.net/Wombert/phpjp-urls-rest đây không phải là một URL nghỉ ngơi đầy đủ. Tôi có thể thấy lý do tại sao nó không phải là REST tốt, bởi vì "mới" thực sự được sử dụng như một động từ và không phải là tài nguyên, nhưng khi nào biểu mẫu sẽ là vậy, vì GET /car/ đã được sử dụng để liệt kê xe hơi, vì vậy bạn không thể sử dụng GET /car/ cho hình thức cho những chiếc xe mới.

Trong ngắn hạn, câu hỏi của tôi là: "URL RESTful cho 'tạo biểu mẫu tài nguyên' là gì?"

Trên một lưu ý hơi liên quan, ngay cả trong dịch vụ web, đôi khi không phải lúc nào cũng khôn ngoan để dựa vào máy khách biết trước lược đồ, do đó ngay cả trong các dịch vụ web có thể cần phải là một cách để khách hàng yêu cầu lược đồ hiện tại của tài nguyên. AFAICS, đây là một tình huống tương tự với nhu cầu GET tạo biểu mẫu (tức là biểu mẫu giống như một lược đồ mô tả cách xây dựng truy vấn POST để tạo tài nguyên). Dòng suy nghĩ của tôi có đúng không?

+0

Không thể nâng cấp đủ điều này! Có nghĩa là không có đề cập đến liên kết này thiếu ở bất cứ nơi nào, và đáng buồn là không có câu trả lời thỏa mãn, quá. – aefxx

Trả lời

2

REST không quan tâm quá nhiều về URI của bạn trông như thế nào miễn là nó xác định một tài nguyên duy nhất và tự mô tả. Đáp ứng các tiêu chí đó và hơn thế nữa, đó là sở thích cá nhân. Không có gì cấm sử dụng động từ trong URI nếu nó có ý nghĩa khi sử dụng nó.

Liên quan đến lưu ý hơi liên quan của bạn, những gì bạn gợi ý với biểu mẫu là sơ đồ là loại phương tiện. Kiến trúc RESTful liên quan đến máy khách và máy chủ, cả hai đều hiểu các loại phương tiện được sử dụng để biểu diễn trạng thái ứng dụng.

Một REST API nên dành gần như tất cả các nỗ lực mô tả nó trong định loại phương tiện (s) được sử dụng để đại diện cho nguồn lực và lái xe trạng thái ứng dụng, hoặc trong việc xác định tên mối quan hệ kéo dài và/hoặc dấu siêu văn bản cho phép -up cho các loại phương tiện chuẩn hiện có. Bất kỳ nỗ lực nào mô tả phương pháp sử dụng trên các URI quan tâm phải được xác định hoàn toàn trong phạm vi các quy tắc xử lý cho loại phương tiện (và, trong hầu hết các trường hợp, đã được xác định bởi loại phương tiện hiện tại ).

đọc thêm ở đây: http://roy.gbiv.com/untangled/2008/rest-apis-must-be-hypertext-driven

Đó là từ Roy Fielding, người được xác định REST. Nói chung, các loại phương tiện truyền thông của bạn nên có thể mở rộng - tức là mọi thay đổi sẽ được thêm vào và không làm hỏng các ứng dụng khách cũ hơn trừ khi cần thiết.

+0

Tôi đoán những gì tôi muốn là một ví dụ về cách người khác đã giải quyết vấn đề này (sự cần thiết cho hình thức tạo GET) trong URL RESTful của họ. Một cách khác tôi đã sử dụng là đặt biểu mẫu tạo trên/xe/trang (hoàn toàn yên tĩnh), nhưng từ góc độ khả năng sử dụng không phải lúc nào cũng phù hợp nếu ví dụ/xe/trang đã quá đông đúc. –

+2

Nếu bạn xác định một lộ trình của '/ cars /: id', và bạn cố gắng để có mẫu của bạn nằm ở một cái gì đó như'/xe/new', bạn không thể có một chiếc xe với một id của 'mới' - một cái gì đó để được thận trọng. Có lẽ bạn có thể có một cái gì đó như '/ forms/add-new-car'. – tuespetre

2

Tôi luôn giả định rằng "biểu mẫu" như vậy không phải là tài nguyên, do đó, /<name>/new là không sao - các biểu mẫu không phải là các yếu tố thông thường của API. Tác giả của các trang trình bày đưa vào danh sách "xấu", nhưng không cung cấp đúng - Tôi cho rằng anh ta rất yên tĩnh đến mức anh quên nghĩ về những trường hợp như vậy.

+0

vấn đề là '/ /new /' ngụ ý rằng '/ /new /' là một tài nguyên con '/ /', trong khi nó không phải là từ '/ /new /' thực sự là một hành động trên '/ /' –

+1

Tôi đồng ý, nhưng vẫn - bạn cung cấp câu trả lời tại sao nó là xấu (những gì tôi đã biết) và không phải là câu trả lời đúng hoặc đề xuất khác. Bạn có thể cho chúng tôi những ý tưởng mới không? –

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