Quy ước cho tiêu đề phản hồi HTTP để thông báo cho khách hàng về API không dùng nữa


84

Tôi đang nâng cấp các điểm cuối API REST của mình và tôi muốn thông báo cho khách hàng khi họ đang gọi điểm cuối không dùng nữa.
Tôi nên sử dụng tiêu đề nào trong phản hồi có thông báo dọc theo dòng "Phiên bản API này không được dùng nữa, vui lòng tham khảo tài liệu mới nhất để cập nhật điểm cuối của bạn"

Câu trả lời:


72

Tôi sẽ không thay đổi bất kỳ điều gì trong mã trạng thái để tương thích ngược. Tôi sẽ thêm tiêu đề "Cảnh báo" trong phản hồi:

Warning: 299 - "Deprecated API"

Bạn cũng có thể chỉ định "-" với "Tác nhân" phát ra cảnh báo và rõ ràng hơn trong văn bản cảnh báo:

Warning: 299 api.blazingFrog.com "Deprecated API: use betterapi.blazingFrog.com instead. Old API maintained until 2015-06-02"

Tiêu đề cảnh báo được chỉ định tại đây: https://tools.ietf.org/html/rfc7234#section-5.5 . Mã cảnh báo 299 là chung chung, "Không được chấp nhận" không phải là tiêu chuẩn.

Bạn phải yêu cầu khách hàng API của mình ghi lại các cảnh báo HTTP và giám sát nó.

Tôi chưa bao giờ sử dụng nó cho đến bây giờ, nhưng khi công ty của tôi trưởng thành hơn trong Rest API, tôi sẽ tích hợp nó.

Chỉnh sửa (2019-04-25): Như @Harry Wood đã đề cập, tiêu đề Cảnh báo nằm trong chương liên quan đến bộ nhớ đệm trong tài liệu. Tuy nhiên, RFC rõ ràngWarnings can be used for other purposes, both cache-related and otherwise.

Nếu bạn thích một phương pháp thay thế, bản nháp này https://tools.ietf.org/html/draft-dalal-deprecation-header-00 đề xuất một tiêu đề mới "Không dùng nữa".


1
Ngày cảnh báo ở cuối giá trị cảnh báo không có mục đích gì ở đây, và tốt nhất bạn nên bỏ qua nó, nếu không bạn có nguy cơ gây nhầm lẫn cho khách hàng: “Nếu người nhận. . . nhận được ngày cảnh báo khác với Dategiá trị trong cùng một thông báo, người nhận PHẢI loại trừ giá trị cảnh báo. . . trước . . . bằng cách sử dụng tin nhắn. ”
Vasiliy Faronov

Nếu bạn làm bao gồm các cảnh báo cập nhật, nó phải được định dạng theo cách tương tự như các Datetiêu đề: "Thu, 02 Apr 2015 12:25:32 GMT".
Vasiliy Faronov

@VasiliyFaronov: bạn nói đúng, vì trong trường hợp đó (API không dùng nữa) thông báo cảnh báo này sẽ luôn đúng trong tương lai. Vì vậy, nếu phản hồi (với thông báo cảnh báo) được gửi bằng bộ nhớ cache trong proxy và ngày thông báo khác, cảnh báo sẽ bị bỏ qua trong khi nó vẫn có hiệu lực. Tôi chỉnh sửa câu trả lời
BenC

Đó không phải là tiêu đề "cảnh báo" liên quan đến bộ nhớ đệm sao? Ý tôi là trong liên kết tài liệu của bạn có đề cập đến bộ nhớ đệm, nhưng toàn bộ tài liệu RFC dường như cũng có liên quan đến bộ nhớ đệm. Nhưng Warningtiêu đề có vẻ tốt là nơi có văn bản tự do để mô tả việc không dùng nữa. Các tiêu đề DeprecationSunsettiêu đề được đề cập trong các câu trả lời khác, dường như sẽ là một giải pháp tiêu chuẩn mới nổi để mô tả việc ngừng sử dụng theo cách chặt chẽ hơn có khả năng đọc được bằng máy.
Harry Wood,

1
Warningtiêu đề không chỉ liên quan đến bộ nhớ đệm. Câu đầu tiên trong Warningphần là "Cảnh báo có thể được sử dụng cho các mục đích khác, cả liên quan đến bộ nhớ cache và các mặt khác."
Çelebi Murat

37

Bạn có thể sử dụng 410 (Gone) .

Đây là cách Định nghĩa mã trạng thái của W3C mô tả nó:

410 (Đã qua)

Tài nguyên được yêu cầu không còn khả dụng tại máy chủ và không xác định được địa chỉ chuyển tiếp. Tình trạng này dự kiến ​​sẽ được coi là vĩnh viễn. Khách hàng có khả năng chỉnh sửa liên kết NÊN xóa các tham chiếu đến URI Yêu cầu sau khi người dùng chấp thuận. Nếu máy chủ không biết, hoặc không có cơ sở để xác định, liệu tình trạng này có vĩnh viễn hay không, thì mã trạng thái 404 (Không tìm thấy) NÊN được sử dụng thay thế. Phản hồi này có thể lưu vào bộ nhớ cache trừ khi được chỉ định khác.

Phản hồi 410 chủ yếu nhằm hỗ trợ nhiệm vụ bảo trì web bằng cách thông báo cho người nhận rằng tài nguyên cố ý không khả dụng và chủ sở hữu máy chủ muốn xóa các liên kết từ xa tới tài nguyên đó. Sự kiện như vậy thường xảy ra đối với các dịch vụ khuyến mại, có thời hạn và các tài nguyên thuộc về các cá nhân không còn làm việc tại trang web của máy chủ. Không cần thiết phải đánh dấu tất cả các tài nguyên vĩnh viễn không khả dụng là "đã biến mất" hoặc giữ dấu trong bất kỳ khoảng thời gian nào - đó là quyết định của chủ sở hữu máy chủ.


36
Vấn đề với 410 là nó không phù hợp với yêu cầu "không được chấp nhận" ... Nó hoạt động tốt khi API biến mất, nhưng không phải là nó sẽ biến mất trong tương lai .
Julien Genestoux

3
Nếu bạn quay trở lại 410 bạn sẽ phá vỡ tính tương thích ngược của mình
ghế tập cơ bắp

4
410 Gonenó không phải là về việc không dùng nữa, mà là về phương pháp không còn nữa. Như @BenC đã nói, cách tốt hơn là sử dụng tiêu đề Cảnh báo
sempasha 19/05

2
Đây có thể là giai đoạn tiếp theo của API phản đối
Shiplu Mokaddim

16

Tôi sẽ / đã đi với 301 (Đã di chuyển vĩnh viễn) Mã sê-ri 300 được cho là để cho khách hàng biết họ có hành động phải làm.


4
Đó có thể là những gì tôi sẽ sử dụng khi điểm cuối thực sự bị xóa nhưng tôi muốn cho họ cơ hội được thông báo trong một thời gian (giả sử họ sẽ xem xét các tiêu đề HTTP trong phản hồi) để họ có thể thực hiện các thay đổi cần thiết trên kết thúc của họ.
BlazingFrog 14/12/12

2
Thực sự không có tư cách để di chuyển. 302 (Tài nguyên được yêu cầu tạm thời nằm ở một vị trí khác, nhưng vẫn có thể tìm thấy nó tại URI được yêu cầu.) ...
u07ch 14/12/12

1
Tôi không tìm kiếm trạng thái mà tìm tiêu đề "chuẩn" để thêm vào phản hồi.
BlazingFrog 14/12/12

1
Không có tiêu đề tiêu chuẩn cho loại phản hồi này. Bạn nên tạo một tiêu đề của riêng bạn và mô tả nó trong tài liệu api của riêng bạn.
Brian Kelly

Tôi nghĩ rằng bất kỳ mã phản hồi nào> = 300 đều có thể phá vỡ mọi thứ. 299 sẽ cho phép khách hàng giữ ứng dụng của họ tồn tại cho đến khi API bị vô hiệu hóa trong khi họ thực hiện các thay đổi cần thiết.
devlord

6

Tôi muốn đề xuất một 207 Multi-Statusphản hồi, cho biết rằng đó là một phản hồi thành công, nhưng nó cũng có khả năng có trạng thái thứ hai không được dùng nữa.


1
Hấp dẫn. Tôi không biết về điều đó, nhưng tôi nghĩ trong thực tế, có một nguy cơ lớn là bạn sẽ đưa ra một thay đổi đột phá cho một số khách hàng bằng cách hoán đổi sang một mã phản hồi khác ngay cả khi nó vẫn nằm trong phạm vi 200. Tôi đoán bạn có thể làm một cách nhẹ nhàng để giảm bớt áp lực. Bắt đầu với một Deprecationtiêu đề (mà khách hàng có khả năng bỏ qua không may) sau đó sử dụng mã 207 này, sau đó 301 chuyển đến, rồi cuối cùng là 410 biến mất!
Harry Wood

4

Đang tinh chỉnh phản hồi của @ dret. Có hai tiêu đề HTTP có liên quan không được dùng nữa:Deprecation ( https://tools.ietf.org/html/draft-dalal-deprecation-header-00 ) và Sunset.

Để thông báo cho người dùng về kế hoạch ngừng sử dụng, Deprecation tiêu đề HTTP nên được sử dụng. Điều này cho thấy rằng các thiết bị đầu cuối sẽ bị bỏ một chút thời gian trong tương lai. Nó cũng cho phép bạn chỉ ra ngày thông báo điều này và mô tả các tài nguyên thay thế.

Để thông báo cho người dùng về ngày ngừng hoạt động dự kiến ​​của tài nguyên không dùng nữa, Sunset tiêu đề này nên được sử dụng ngoài tiêu đề Không dùng nữa. Điều này được mô tả trong phần # 5 https://tools.ietf.org/html/draft-dalal-deprecation-header-00#section-5 .

Bản nháp # 11 https://tools.ietf.org/html/draft-wilde-sunset-header-11 của Sunsettiêu đề làm rõ khía cạnh này cũng như trong phần 1.4 https://tools.ietf.org/html/draft-wilde -sunset-header-11 # section-1.4 .


3

Có một trường tiêu đề HTTP được gọi Sunsetnhằm mục đích báo hiệu sắp ngừng sử dụng tài nguyên. https://tools.ietf.org/html/draft-wilde-sunset-header đang trong giai đoạn cuối để trở thành RFC. Lý tưởng nhất, API của bạn nên ghi lại rằng nó sẽ sử dụng Sunset, để khách hàng có thể tìm kiếm nó và hành động theo nó, nếu họ muốn.

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.