Tiêu đề phản hồi HTTP cho ID yêu cầu duy nhất cho dịch vụ REST


8

Đối với dịch vụ REST của chúng tôi, tôi muốn gửi lại ID yêu cầu duy nhất với mỗi phản hồi; hữu ích để gỡ lỗi các dự án nội bộ mà còn cung cấp hỗ trợ cho bất kỳ bên thứ ba nào có thể sử dụng dịch vụ trong tương lai.

Tôi đã quyết định rằng tôi cần sử dụng tiêu đề phản hồi, vì không phải tất cả các yêu cầu REST đều dẫn đến thân phản hồi (thường các API REST cấp thấp hơn tận dụng hoàn toàn mã trạng thái và mô tả), nhưng vẫn cần gửi lại yêu cầu này TÔI.

Tôi muốn đảm bảo, nếu có thể, tôi sử dụng Tiêu đề phản hồi HTTP không có khả năng bị loại bỏ bởi bất kỳ proxy nào trên đường đi.

Điều này có thể rất quan trọng vì một số lượng lớn khách hàng có thể sẽ là thiết bị di động với các cấu trúc liên kết mạng 'thú vị' giữa họ và máy chủ của chúng tôi.

Tuy nhiên, các dịch vụ tương tự có khả năng sẽ được bán cho các doanh nghiệp khác với tường lửa / proxy công ty riêng của họ.

Bởi vì điều này về cơ bản tôi đã tặc lưỡi ý tưởng sử dụng một tiêu đề phản hồi tùy chỉnh có lợi cho một tiêu đề nổi tiếng.

Tiêu đề nổi tiếng hiện tại của tôi sẽ là ETagtiêu đề, nhưng trong khi nó gần như đúng, nó không hoàn toàn - bởi vì ETagmột tài nguyên, không phải là một yêu cầu (tức là hai yêu cầu riêng biệt cho cùng một tài nguyên sẽ trả lại hợp pháp như nhau ETag). Hơn nữa, nếu tôi sử dụng điều đó, điều đó có nghĩa là tôi không thể thực hiện bất kỳ việc gắn thẻ thực thể nào cho bất kỳ điều gì khác.

Bất cứ ai có ý tưởng tốt hơn?

Cập nhật

Tiêu đề thực dụng, nó xuất hiện, có thể được sử dụng, nhưng tôi gặp vấn đề khi viết nó trong Asp.Net WebAPI. Đây là một câu hỏi liên quan về SO .

Câu trả lời:


4

Tôi sẽ sử dụng một cơ thể tiêu chuẩn hóa và không sử dụng tiêu đề. Ví dụ: mọi phần có thể là JSON và bao gồm một trường ID. Miễn là nó được chuẩn hóa trên nền tảng của bạn, nó được đảm bảo hoạt động.

Tôi sẽ không sử dụng tiêu đề tùy chỉnh vì nguy cơ bị tước. Tôi sẽ không sử dụng tiêu đề tiêu chuẩn vì tôi không biết tiêu đề nào phù hợp hoàn hảo (ví dụ: ETag mà bạn đề cập được sử dụng để xác định thay đổi tệp và khóa bộ đệm.)


2
Có nó là một lựa chọn. Nhưng một cái gì đó cảm thấy hacky về một phản ứng bao bọc như thế này. Xem xét một hoạt động json trả về một chuỗi; bây giờ nó trả về một loại có hai thành viên và khách hàng phải làm nhiều việc hơn để lấy dữ liệu của họ. Không yên lắm! Tôi đã tìm thấy một tiêu đề trong thông số kỹ thuật có thể làm điều đó, tôi đang đăng một câu trả lời ...
Andras Zoltan

Trên thực tế, không có tôi, có vẻ như tôi đã hiểu sai định nghĩa của 'tiêu đề thư' là một tiêu đề cụ thể và không phải là quy tắc BNF. Hmmm ...
Andras Zoltan

1
Trong tất cả các dự án của tôi, tôi sử dụng dữ liệu có cấu trúc trong phần thân, không bao giờ là một chuỗi đơn giản, vì trong tương lai tôi thường cần thêm dữ liệu mới cùng với nó. JSON là một cách tiếp cận tiêu chuẩn và jQuery sẽ tự động biến phần thân phản hồi thành đối tượng JS khi trả về từ các cuộc gọi AJAX. Bạn cũng có thể bọc tất cả các cuộc gọi / phản hồi của mình trong các chức năng của riêng bạn để xử lý cấu trúc một cách nhất quán.
Matt S

0

Hãy xem hướng dẫn từ nhóm Heroku. Trong số những thứ khác như Etags, họ đề xuất Id yêu cầu trong tiêu đề. Chúng tôi đang tìm cách thực hiện hầu hết các hướng dẫn này, nơi chúng có ý nghĩa.

Truy tìm các yêu cầu với Id yêu cầu

Bao gồm tiêu đề Id yêu cầu trong mỗi phản hồi API, được điền với giá trị UUID. Nếu cả máy chủ và máy khách ghi lại các giá trị này, nó sẽ hữu ích cho việc theo dõi và gỡ lỗi các yêu cầu.

https://github.com/interagent/http-api-design/blob/master/README.md


1
vấn đề với các tiêu đề tùy chỉnh là chúng có thể bị loại bỏ một cách hợp pháp bởi các proxy. Cuối cùng, tôi đã đi với tiêu đề thực dụng - nó ở đó để cung cấp một cơ chế để gửi lại dữ liệu tùy chỉnh của riêng bạn và nó không nên bị tước bởi các proxy theo mặc định, trừ khi cơ sở hạ tầng rõ ràng thiết lập nó.
Andras Zoltan
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.