Tôi có nên tạo mã trạng thái HTTP của riêng mình không? (a la Twitter 420: Nâng cao sự bình tĩnh của bạn)


24

Tôi hiện đang triển khai API HTTP, lần đầu tiên của tôi.

Tôi đã dành rất nhiều thời gian để xem trang Wikipedia về mã trạng thái HTTP, bởi vì tôi quyết tâm thực hiện đúng mã cho các tình huống phù hợp. Được liệt kê trên trang đó là một mã có số 420, đây là mã tùy chỉnh mà Twitter đã sử dụng để giới hạn tỷ lệ.

Đã có một mã cho giới hạn tỷ lệ, mặc dù. Đó là 429.

Điều này khiến tôi tự hỏi tại sao họ sẽ đặt một tùy chỉnh, khi đã có trường hợp sử dụng. Có phải đó chỉ là dễ thương? Và nếu vậy, thì trường hợp nào có thể chấp nhận trả lại mã trạng thái khác, và nếu có bất kỳ vấn đề nào khách hàng có thể gặp phải với nó?

Tôi đã đọc ở đâu đó rằng Mozilla không thực hiện 418: I’m a teapotphản hồi trò đùa , điều này khiến tôi nghĩ rằng khách hàng chọn mã trạng thái nào họ thực hiện. Nếu đó là sự thật, thì tôi có thể tưởng tượng một chút hài hước của Twitter tăng cường sự bình tĩnh của bạn đang gặp vấn đề.

Trừ khi tôi nhầm, và chúng tôi có thể thích hợp bất kỳ số mã nào có nghĩa là bất cứ điều gì chúng tôi thích, và điều đó chỉ quy định rằng 404 có nghĩa là không tìm thấy, và 429 có nghĩa là làm cho nó dễ dàng.

Câu trả lời:


31

Toàn bộ Internet được xây dựng trên các quy ước. Chúng tôi gọi họ là RFC. Mặc dù không ai đến và bắt giữ bạn nếu bạn vi phạm RFC, nhưng bạn có nguy cơ dịch vụ của bạn sẽ không tương tác với phần còn lại của thế giới. Và nếu điều đó xảy ra, bạn sẽ gặp rủi ro khi startup không nhận được bất kỳ khách hàng nào, doanh nghiệp của bạn bị báo chí xấu, các cổ đông của bạn nổi loạn, bị sa thải vĩnh viễn, v.v.

Mã trạng thái HTTP có đăng ký IANA riêng , mỗi mã có thể truy nguyên theo RFC (hoặc trong một trường hợp, ID) đã xác định nó.

Trong trường hợp cụ thể của mã trạng thái 420 lạ của Twitter so với mã trạng thái 429 tiêu chuẩn được xác định trong RFC 6585 , lời giải thích rất có thể là mã sau chỉ được xác định gần đây; RFC có từ tháng 4 năm 2012. Chúng tôi thấy rằng Twitter chỉ sử dụng 420 trong phiên bản 1 không được chấp nhận trước đó của API; API phiên bản 1.1 hiện tại thực sự sử dụng mã trạng thái 429 . Vì vậy, rõ ràng rằng Twitter cần một mã trạng thái cho điều này và xác định riêng của họ; một khi một tiêu chuẩn đã có sẵn họ chuyển sang nó.

Tất nhiên, thực tiễn tốt nhất là bám sát các tiêu chuẩn nhất có thể. Khi bạn đọc RFC, hầu như bạn sẽ luôn tìm thấy các từ như "PHẢI" và "NÊN"; chúng có ý nghĩa cụ thể khi bạn xây dựng ứng dụng của mình, mà bạn có thể tìm thấy trong RFC 2119 .


2
+1 Để thêm bối cảnh lịch sử về lý do tại sao Mã trạng thái 420tồn tại và hiện tại nó đã 'hết dịch vụ'.

2

Câu hỏi này đi sâu vào vấn đề một chút. Nhưng điều quan trọng là, trong khi về mặt kỹ thuật, bạn có thể tạo bất kỳ mã trạng thái nào bạn muốn, việc tạo mã trạng thái bên ngoài phạm vi truyền thống về ý nghĩa của mã trạng thái chỉ làm cho API của bạn trở nên khó hiểu và phức tạp hơn đối với người khác. Trừ khi đó là vấn đề và API bạn đang tạo cực kỳ tuyệt vời đến nỗi mọi người sẽ sẵn sàng thay đổi mã hóa của họ để đi theo sự dẫn dắt của bạn, vậy thì điều gì cũng quan trọng phải không?

Nó hiểu rõ điều này: Bất kỳ tiêu chuẩn nào cũng có thể bị phá vỡ. Nhưng nếu bạn phá vỡ nó, bạn có được hay mất gì khi làm như vậy?

Nói chung, trong trường hợp bạn có thể làm điều gì đó khác biệt nhưng các tiêu chuẩn ngụ ý các tiêu chuẩn, tốt nhất là tuân thủ các tiêu chuẩn trừ khi có một lý do rất mạnh mẽ và thuyết phục để tránh xa các tiêu chuẩn đã được thiết lập. Trong trường hợp của Twitter, 420: Enhance Your Calmhọ đang tạo ra một mã phản hồi nói rõ ràng về một tình huống duy nhất mà họ gặp phải. Đó là làm chậm yêu cầu mà không từ chối dịch vụ.

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.