Tôi hiện đang thiết kế một API và tôi gặp phải một vấn đề nhỏ: URL của RESTful API trông như thế nào khi bạn có thể xác định một mục bằng ID hoặc sên?Xác định mục bằng ID hoặc một slug trong RESTful API
tôi có thể nghĩ ra ba lựa chọn:
GET /items/<id>
GET /items/<slug>
Điều này đòi hỏi sên và ID là phân biệt, mà không nhất thiết phải đưa ra trong trường hợp này. Tôi không thể nghĩ ra một giải pháp sạch cho vấn đề này, ngoại trừ bạn làm điều gì đó như thế này:
GET /items/id/<id>
GET /items/slug/<slug>
này sẽ hoạt động tốt, tuy nhiên điều này không phải là nơi duy nhất tôi muốn xác định các mục bằng cách hoặc là một sên hoặc một ID và nó sẽ sớm trở nên xấu xí khi người ta muốn thực hiện cùng một cách tiếp cận cho các hành động khác. Nó chỉ là không phải là rất mở rộng, trong đó đưa chúng ta đến phương pháp này:
GET /items?id=<id>
GET /items?slug=<slug>
này có vẻ là một giải pháp tốt, nhưng tôi không biết nếu nó là những gì người ta mong đợi và vì thế nó có thể dẫn đến sai sót bực bội do sử dụng không chính xác. Ngoài ra, nó không phải dễ dàng như vậy - hoặc chúng ta hãy nói sạch - để thực hiện định tuyến cho cái này. Tuy nhiên, nó sẽ là một cách dễ dàng mở rộng và sẽ trông rất giống với phương pháp để nhận nhiều mục:
GET /items?ids=<id:1>,<id:2>,<id:3>
GET /items?slugs=<slug:1>,<slug:2>,<slug:3>
Nhưng điều này cũng có một nhược điểm: Nếu ai đó muốn xác định một số mục ông muốn lấy với ID, nhưng những người khác với một con sên? Trộn các định danh này sẽ không dễ dàng đạt được với điều này.
Giải pháp tốt nhất và được chấp nhận rộng rãi nhất cho những vấn đề này là gì? Nói chung, điều gì quan trọng khi thiết kế một API như vậy?
Câu hỏi trong một câu hỏi, sên là gì? –
Wikipedia nói: "một văn bản ngắn thân thiện với người dùng và SEO được sử dụng trong URL để xác định và mô tả tài nguyên" hoặc nội dung tương tự. –
Dựa trên các ví dụ trong bài viết Wikipedia đó và trong bảng thuật ngữ Wordpress (http://codex.wordpress.org/Glossary#Slug), có vẻ như một con sên là một phần của một url đã được phân cấp. Vì vậy, trong trường hợp của bạn có thể là mục cho id, nhưng các mục// (làm ví dụ) là cho sên. –