Khi nào bạn sử dụng tiêu đề HTTP tùy chỉnh trong phần yêu cầu của API REST?
Thí dụ:
Bạn có bao giờ sử dụng
GET /orders/view
(custom HTTP header) CLIENT_ID: 23
thay vì
GET /orders/view/client_id/23 or
GET /orders/view/?client_id=23
Khi nào bạn sử dụng tiêu đề HTTP tùy chỉnh trong phần yêu cầu của API REST?
Thí dụ:
Bạn có bao giờ sử dụng
GET /orders/view
(custom HTTP header) CLIENT_ID: 23
thay vì
GET /orders/view/client_id/23 or
GET /orders/view/?client_id=23
Câu trả lời:
URL cho biết chính tài nguyên đó. Một "khách hàng" là một nguồn lực có thể bị tác động, vì vậy nên là một phần của địa chỉ cơ sở: /orders/view/client/23
.
Tham số chỉ có vậy, để tham số hóa quyền truy cập vào tài nguyên. Điều này đặc biệt phát huy tác bằng bài đăng và tìm kiếm: /orders/find?q=blahblah&sort=foo
. Có một ranh giới mong manh giữa các thông số và phụ nguồn: /orders/view/client/23/active versus /orders/view/client/23?show=active
. Tôi đề xuất kiểu tài nguyên phụ và tham số dự trữ cho các tìm kiếm.
Vì mỗi điểm cuối đại diện cho một Chuyển trạng thái (để ghi nhớ), tiêu đề tùy chỉnh chỉ nên được sử dụng cho những thứ không liên quan đến tên của tài nguyên (url), trạng thái của tài nguyên (nội dung) hoặc các tham số trực tiếp ảnh hưởng đến tài nguyên (tham số). Điều đó để lại siêu dữ liệu thực sự về yêu cầu tiêu đề tùy chỉnh.
HTTP có rất nhiều lựa chọn tiêu đề bao gồm hầu hết mọi thứ bạn cần. Nơi tôi đã thấy các tiêu đề tùy chỉnh xuất hiện là trong một hệ thống yêu cầu hệ thống hoạt động thay mặt người dùng. Hệ thống proxy sẽ xác nhận người dùng và thêm " X-User: userid
" vào tiêu đề và sử dụng thông tin đăng nhập hệ thống để truy cập điểm cuối. Hệ thống nhận xác thực rằng thông tin xác thực hệ thống được ủy quyền để hành động thay mặt cho người dùng, sau đó xác nhận rằng người dùng được ủy quyền để thực hiện hành động.
Tiêu đề tùy chỉnh có những ưu điểm sau:
Tôi sẽ chỉ sử dụng tiêu đề tùy chỉnh khi không có cách nào khác để chuyển thông tin theo tiêu chuẩn hoặc quy ước. Darren102 đang giải thích cách điển hình để vượt qua giá trị đó. Api của bạn sẽ thân thiện hơn nhiều bằng cách sử dụng câu mẫu điển hình bằng cách sử dụng tiêu đề tùy chỉnh.
Khi nào bạn sử dụng ... tiêu đề HTTP trong phần yêu cầu của API REST?
Xác thực: GUID, xác thực cơ bản, mã thông báo tùy chỉnh, v.v. ví dụ: Xác thực cơ bản bằng mã thông báo hướng dẫn cho REST api thay vì tên người dùng / mật khẩu
Nếu bạn tham gia vào việc chuyển mã thông báo hoặc thông tin giống như xác thực khác giữa các miền được bao phủ bởi PCI-DSS hoặc các quy tắc bảo mật khác, bạn cũng có thể phải chôn vùi các tham số vì một số quy định yêu cầu rõ ràng các yếu tố xác thực tránh các URL có thể được phát lại một cách đáng kể (từ lịch sử trình duyệt, nhật ký proxy, v.v.).
Tôi sẽ không sử dụng tiêu đề tùy chỉnh vì bạn không biết liệu có proxy nào sẽ chuyển những tiêu đề đó hay không. Dựa trên URL là cách để đi.
NHẬN / đơn đặt hàng / xem / khách hàng / 23
Chắc chắn là OK:
GET /orders/view/client_id/23 or
GET /orders/view/?client_id=23
Cũng được:
GET /orders/view/23 or
Tôi nghĩ điều này cũng sẽ ổn:
POST /orders/view
(custom HTTP header) CLIENT_ID: 23