Khi thiết kế giao diện RESTful, ngữ nghĩa của các loại yêu cầu được coi là quan trọng đối với thiết kế.
- NHẬN - Thu thập danh sách hoặc lấy phần tử
- PUT - Thay thế bộ sưu tập hoặc phần tử
- POST - Tạo bộ sưu tập hoặc phần tử
- XÓA - Vâng, erm, xóa bộ sưu tập hoặc phần tử
Tuy nhiên, điều này dường như không bao gồm khái niệm "tìm kiếm".
Ví dụ: trong việc thiết kế một bộ dịch vụ web hỗ trợ trang web Tìm kiếm việc làm, bạn có thể có các yêu cầu sau:
- Nhận quảng cáo việc làm cá nhân
- GET để
domain/Job/{id}/
- GET để
- Tạo quảng cáo việc làm
- Đăng lên
domain/Job/
- Đăng lên
- Cập nhật quảng cáo việc làm
- PUT để
domain/Job/
- PUT để
- Xóa quảng cáo việc làm
- DELETE để
domain/Job/
- DELETE để
"Nhận tất cả các công việc" cũng đơn giản:
- GET để
domain/Jobs/
Tuy nhiên, làm thế nào để công việc "tìm kiếm" rơi vào cấu trúc này?
Bạn có thể cho rằng đó là một biến thể của "bộ sưu tập danh sách" và thực hiện như sau:
- GET để
domain/Jobs/
Tuy nhiên, các tìm kiếm có thể phức tạp và hoàn toàn có thể tạo ra một tìm kiếm tạo ra chuỗi GET dài. Đó là, tham khảo một câu hỏi SO ở đây , có vấn đề khi sử dụng chuỗi GET dài hơn khoảng 2000 ký tự.
Một ví dụ có thể là trong một tìm kiếm theo khía cạnh - tiếp tục ví dụ "công việc".
Tôi có thể cho phép tìm kiếm trên các khía cạnh - "Công nghệ", "Tiêu đề công việc", "Kỷ luật" cũng như các từ khóa văn bản miễn phí, tuổi của công việc, vị trí và mức lương.
Với giao diện người dùng linh hoạt và một số lượng lớn công nghệ và chức danh công việc, việc tìm kiếm có thể bao gồm một số lượng lớn các lựa chọn khía cạnh là khả thi.
Tinh chỉnh ví dụ này cho CV, thay vì công việc, mang lại nhiều khía cạnh hơn nữa và bạn có thể dễ dàng tưởng tượng ra một tìm kiếm với hàng trăm khía cạnh được chọn, hoặc thậm chí chỉ 40 mặt, mỗi mặt dài 50 ký tự (ví dụ: Tên công việc, Tên trường đại học, Tên nhà tuyển dụng).
Trong tình huống đó, có thể mong muốn di chuyển PUT hoặc POST để đảm bảo dữ liệu tìm kiếm sẽ được gửi chính xác. Ví dụ:
- Đăng lên
domain/Jobs/
Nhưng về mặt ngữ nghĩa đó là một hướng dẫn để tạo ra một bộ sưu tập.
Bạn cũng có thể nói rằng bạn sẽ thể hiện điều này như là việc tạo ra một tìm kiếm:
- Đăng lên
domain/Jobs/Search/
hoặc (như được đề xuất bởi burngramma bên dưới)
- Đăng lên
domain/JobSearch/
Về mặt ngữ nghĩa có vẻ có ý nghĩa, nhưng bạn không thực sự tạo ra bất cứ điều gì, bạn đang thực hiện một yêu cầu cho dữ liệu.
Vì vậy, về mặt ngữ nghĩa, đó là một GET , nhưng GET không được đảm bảo để hỗ trợ những gì bạn cần.
Vì vậy, câu hỏi là - Cố gắng giữ đúng với thiết kế RESTful nhất có thể, trong khi đảm bảo rằng tôi đang giữ trong giới hạn của HTTP, thiết kế phù hợp nhất cho tìm kiếm là gì?
domain/Jobs?keyword={keyword}
. Điều này hoạt động tốt với tôi :) Hy vọng của tôi là,SEARCH
động từ sẽ trở thành một tiêu chuẩn. lập trình