Câu hỏi API REST: tiêu đề HTTP tùy chỉnh và thông số URL


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

76
2018-02-06 23:49


gốc




Các câu trả lời:


URL cho biết chính tài nguyên đó. "Khách hàng" là một tài nguyên có thể được thực hiện, vì vậy phải là một phần của url cơ sở: /orders/view/client/23.

Các tham số chỉ là, để tham số hóa truy cập vào tài nguyên. Điều này đặc biệt đi kèm với các bài đăng và tìm kiếm: /orders/find?q=blahblah&sort=foo. Có một ranh giới giữa các thông số và tài nguyên phụ: /orders/view/client/23/active versus /orders/view/client/23?show=active. Tôi khuyên bạn nên chọn 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 trả về một trạng thái chuyển giao (để xáo trộn bộ nhớ), các 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 tài nguyên (phần thân) hoặ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 cho 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 đã nhìn thấy các tiêu đề tùy chỉnh xuất hiện là trong hệ thống yêu cầu hệ thống hoạt động thay mặt cho người dùng. Hệ thống proxy sẽ xác thực người dùng và thêm "X-User: userid"để các tiêu đề và sử dụng các thông tin hệ thống để đạt điểm cuối. Hệ thống nhận xác nhận rằng các thông tin 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 phép thực hiện hành động.


87
2018-02-07 00:12



Cảm ơn câu trả lời toàn diện như vậy! Bạn vẫn sẽ sử dụng X-User cho một API di động có nguy cơ có một proxy xấu (mà loại bỏ tiêu đề) vẫn còn cao? - Vasile Cotovanu
Không, việc sử dụng X-User mà tôi đã đề cập là trong hệ thống kết nối hệ thống nơi hệ thống đang hành động thay mặt cho một bên thứ ba. Ví dụ, User U nói chuyện với Server A. Server A trình bày thông tin đăng nhập vào Server B với tiêu đề X-User để nói "Sử dụng thông tin đăng nhập của tôi để kiểm tra xem tôi có được ủy quyền thực hiện tác vụ này thay mặt cho Người dùng U." Điều này xuất hiện trong Kiến trúc hướng dịch vụ và thường bạn sử dụng HTTPS. Nền tảng di động hầu như luôn luôn là hành động của chính Người dùng và sử dụng thông tin xác thực người đầu tiên thích hợp cho giao dịch. - Nialscorva
Đoạn thứ ba là một trong những câu trả lời thông tin nhất mà tôi đã đọc trên SO ;-) - Alistair77
@Nialscorva Giải thích tuyệt vời! nếu tôi muốn người dùng tương tác với API của tôi thông qua vùng chứa được ủy quyền (như ứng dụng dành cho thiết bị di động của tôi) thì sao? Những gì tôi đang làm bây giờ là ứng dụng di động của tôi không được phép thực hiện bất kỳ hành động nào và không phải là người dùng cuối .. cả hai thông tin đăng nhập phải có mặt nếu người dùng sẵn sàng thực hiện một hành động. - bolbol


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 thông thường để 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ác mẫu điển hình bằng cách sử dụng tiêu đề tùy chỉnh. Không phải để nói rằng bạn sẽ không có trường hợp sử dụng chúng, chỉ là chúng phải là phương sách cuối cùng và một thứ chưa được xử lý bởi thông số HTTP.


5
2018-02-06 23:56



Hết lòng đồng ý ... không bao giờ tái phát minh ra bánh xe nếu có một cách tiêu chuẩn để hoàn thành một nhiệm vụ. - Alessandro Santini


Tiêu đề tùy chỉnh có các ưu điểm sau:

  • Có thể đọc dễ dàng bằng các công cụ / tập lệnh mạng (xác thực, thông tin meta, ...)
  • Giữ url miễn phí từ các công cụ bảo mật (an toàn hơn, không phải trong trình duyệt / proxy cache)
  • Giữ sạch hơn các url: cho phép bộ nhớ đệm tốt hơn các tài nguyên

4
2017-12-09 11:02



chúng cũng có thể được lọc / lọc một cách âm thầm bởi các proxy - fusi


Tôi sẽ không sử dụng các tiêu đề tùy chỉnh vì bạn không biết liệu có proxy nào vượt qua các tiêu đề đó hay không. URL dựa trên là con đường để đi.

NHẬN / đơn đặt hàng / lượt xem / khách hàng / 23


3
2018-02-06 23:53



Tôi sẽ không khuyên bạn nên tùy chỉnh tiêu đề, hoặc, nhưng proxy bị hỏng không phải là lý do. Proxy bị hỏng, nó phải được sửa. - Julian Reschke


Khi nào bạn sử dụng ... các tiêu đề HTTP trong phần yêu cầu của một 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 với mã thông báo Guid cho REST api thay vì tên người dùng / mật khẩu 

Nếu bạn tham gia vào các mã thông báo hoặc các thông tin xác thực khác giữa các tên 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 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 rõ ràng (từ lịch sử trình duyệt, nhật ký proxy, v.v.).


3
2018-06-23 19:26





Không có tiêu chuẩn cho REST, tuy nhiên cách được chấp nhận sẽ là

GET /orders/view/23

Không sử dụng các tiêu đề tùy chỉnh và do đó 23 sau khi xem giả định là id do đó bạn sẽ có một chức năng mà có trong id và do đó chỉ tạo ra thông tin đó.


2
2018-02-06 23:52





Chắc chắn OK:

GET /orders/view/client_id/23 or 
GET /orders/view/?client_id=23

Cũng OK:

GET /orders/view/23 or 

Tôi nghĩ điều này cũng sẽ ổn thôi:

POST /orders/view 
(custom HTTP header) CLIENT_ID: 23

1
2018-02-06 23:54



Phản hồi POST REST-ful phải là HTTP 303 có tiêu đề Vị trí được đặt thành "/ đơn đặt hàng / xem / 23". - Rich Remer


Bạn có thể sử dụng tiêu đề tùy chỉnh để bao gồm thêm thông tin về yêu cầu được xử lý một phần xem xét Bao vây không phải là một thực hành tốt. Tiêu đề là đảm bảo.


0
2018-03-04 12:37