2012-02-21 24 views
32

Tôi đang cố gắng thiết kế API RESTful nơi người dùng có thể tìm nạp một sản phẩm hoặc danh sách sản phẩm trong một yêu cầu GET duy nhất. Mỗi sản phẩm có một id duy nhất.REST api: yêu cầu nhiều tài nguyên trong một lần nhận

URL sản phẩm duy nhất là đủ đơn giản:

http://mycompany.com/api/v1/product/id 

này trả về thông tin cho một sản phẩm duy nhất. Tôi nhầm lẫn về cách URL cho nhiều thông tin sản phẩm sẽ như thế nào.

Làm thế nào về

http://mycomapny.com/api/v1/product/ids 

nơi id là một dấu phẩy tách ra danh sách các id?

+2

id sử dụng cái gì đó như http: //mycompany.com/api/v1/getproducts? Ids = [listofids] – Dampsquid

+1

Câu hỏi về thiết kế API trùng lặp câu hỏi về chi tiết triển khai trong Rails? – Tgr

Trả lời

28

gợi ý của bạn id tách bằng dấu phẩy là đủ tốt.

Sẽ là một hướng dẫn để kiểm tra một số API REST công khai để xem cách chúng xử lý. Ví dụ: API StackExchange phân tách các id có dấu chấm phẩy - https://api.stackexchange.com/docs/answers-by-ids

+0

Cảm ơn ví dụ về API. – user824212

+1

Tôi tự hỏi tại sao mọi người không sử dụng sản phẩm? Id [] = 1 & id [] = 2. Trình phân tích cú pháp URL xử lý việc này tốt. –

+5

@ JulioGreff Tôi nghĩ, đó là bởi vì nó trông hơi xấu xí. Không có lý do cụ thể nào khác. –

65

Tôi khuyên bạn nên nghĩ về nó như bạn đang liệt kê nhiều biểu diễn của tài nguyên được lọc theo id. Như vậy bạn thực hiện một yêu cầu GET đến tài nguyên cơ sở:

https://example.com/api/v1/products

Và lọc danh sách phản ứng bằng cách id:

https://example.com/api/v1/products?id=1,2,3

+14

Đây là câu trả lời cấp trên, lý do là: '/ products' và' products? Id = 1,2,3' sẽ trả về __consistent__ (= tài nguyên sưu tập). So sánh '/ products/1' và'/products/1,2,3' là một công thức cho đau đầu của khách hàng - trừ khi tất nhiên các điểm cuối lồng nhau trả về các bộ sưu tập theo mặc định (cũng là một cách tiếp cận thú vị, ví dụ xem [api + json] (http://jsonapi.org/) format) – Philzen

+1

Tôi thích cách tiếp cận này, nhưng không nên là https://example.com/api/v1/products?id=1&id=2&id=3? – Nitek

+2

@Nitek No; [không có sự đảm bảo] (http://stackoverflow.com/q/1746507/578288) rằng các tham số truy vấn trùng lặp sẽ được kết hợp thành một mảng. Đối với URL mẫu của bạn, PHP thực sự sẽ cho bạn biết rằng 'id' bằng' [1, 2, 3] ', nhưng Ruby on Rails sẽ cho bạn biết nó bằng' 3' và các khung khác cũng có thể hoạt động khác, ví dụ: nói 'id' bằng' 1'. –

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