2012-02-06 21 views

Trả lời

78

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

Tham số chỉ là vậy, để tham số hóa quyền truy cập vào tài nguyên. Điều này đặc biệt có hiệu lực với các bài đăng và tìm kiếm: /orders/find?q=blahblah&sort=foo. Có một đường thẳng 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ả lời chuyển trạng thái (để xáo trộn chú thích), 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 các tham số ảnh hưởng trực tiếp đế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ó 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" vào tiêu đề và sử dụng thông tin đăng nhập hệ thống để đạt điểm cuối. Hệ thống nhận xác nhận rằng thông tin đăng nhập hệ thống được ủy quyền hành động thay mặt cho người dùng, sau đó xác thực rằng người dùng được phép thực hiện hành động.

+0

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? –

+1

Không, việc sử dụng X-Người dùng mà tôi đã đề cập là trong hệ thống đối với các kết nối hệ thống mà hệ thống đang hành động thay mặt cho 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

+4

Đ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

2

Không có tiêu chuẩn cho Văn tuy nhiên cách chấp nhận sẽ

GET /orders/view/23 

Không usin g 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 đó.

3

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 chuyển các tiêu đề đó hay không. URL dựa trên là con đường để đi.

GET/đơn đặt hàng/xem/khách hàng/23

+1

Tôi cũng không đề xuất tiêu đề tùy chỉnh, nhưng proxy bị hỏng không phải là lý do. Proxy bị hỏng, nó phải được sửa. –

1

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 sẽ nghĩ rằng đây sẽ là OK, quá :

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

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

5

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.

+0

Hoàn toàn đồ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ụ. –

3

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, thẻ tùy chỉnh vv ví dụ: Basic Authentication with a Guid token for REST api instead of username/password

Nếu bạn tham gia vào qua thẻ hoặc thông tin xác thực khác giống giữa các lĩnh vực bao phủ bởi PCI-DSS hoặc quy tắc bảo mật khác bạn cũng có thể phải chôn các thông 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 xa các URL có thể được phát lại không đáng kể (từ lịch sử trình duyệt, nhật ký proxy, v.v.).

4

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

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

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

0

Bạn có thể sử dụng tiêu đề tùy chỉnh để bao gồm nhiều thông tin về một khuyết điểm yêu cầu xử lý một phần idering rằng Enveloping không phải là một thực hành tốt. Các tiêu đề là secure.

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