รหัสสถานะ HTTP REST ที่แนะนำสำหรับ 'ถึงขีด จำกัด การร้องขอ'


43

ฉันกำลังรวบรวมข้อมูลจำเพาะสำหรับบริการ REST ซึ่งเป็นส่วนหนึ่งที่จะรวมความสามารถในการเร่งความเร็วให้กับผู้ใช้ทั้งในกลุ่มและรายบุคคล เท่ากันหมดเวลาสำหรับสิ่งเหล่านี้จะสามารถกำหนดค่าต่อทรัพยากร / กลุ่ม / บริการ

ฉันแค่ดูข้อมูลจำเพาะ HTTP 1.1 และพยายามตัดสินใจว่าจะสื่อสารกับลูกค้าอย่างไรว่าคำขอจะไม่ได้รับการตอบสนองเพราะพวกเขาถึงขีด จำกัด แล้ว

ตอนแรกฉันคิดว่ารหัสลูกค้า403 - Forbiddenเป็นรหัสแต่จากสเป็ค:

การอนุญาตจะไม่ช่วยและไม่ควรทำซ้ำการร้องขอ

รบกวนฉัน

ปรากฏขึ้นจริงว่า503 - Service Unavailableเป็นสิ่งที่ดีกว่าที่จะใช้ - เพราะมันช่วยให้การสื่อสารของเวลาลองผ่านการใช้Retry-Afterส่วนหัว

เป็นไปได้ว่าในอนาคตฉันอาจมองหาการสนับสนุน 'ซื้อ' คำขอเพิ่มเติมผ่านทางอีคอมเมิร์ซ (ในกรณีนี้มันจะดีถ้ารหัสลูกค้า402 - Payment Requiredได้รับการสรุป!) - แต่ฉันคิดว่านี่อาจถูกบีบให้เป็นการตอบสนอง 503 เช่นกัน

คุณคิดว่าฉันควรใช้อันไหน หรือมีอีกอย่างที่ฉันไม่ได้พิจารณา?

คำตอบ:


77

429 คำขอมากเกินไป

ผู้ใช้ส่งคำขอมากเกินไปในระยะเวลาที่กำหนด มีไว้สำหรับใช้กับแผนการ จำกัด อัตรา รหัสนี้ได้รับการยอมรับในRFC 6585 รหัสสถานะ HTTP เพิ่มเติม

http://i.stack.imgur.com/Y84Lj.jpg

   The 429 status code indicates that the user has sent too many
   requests in a given amount of time ("rate limiting").

   The response representations SHOULD include details explaining the
   condition, and MAY include a Retry-After header indicating how long
   to wait before making a new request...

   Note that this specification does not define how the origin server
   identifies the user, nor how it counts requests.  For example, an
   origin server that is limiting request rates can do so based upon
   counts of requests on a per-resource basis, across the entire server,
   or even among a set of servers.  Likewise, it might identify the user
   by its authentication credentials, or a stateful cookie.

   Responses with the 429 status code MUST NOT be stored by a cache...

ฟังดูยอดเยี่ยม - ฉันจะจำไว้! มันมาพร้อมกับแมวฟรีหรือเปล่า? หรือเป็นส่วนขยายของโปรโตคอลหรือไม่
Andras Zoltan

3
แมวสถานะ HTTP - สำหรับทุกความต้องการสถานะของคุณ: flickr.com/photos/girliemac/sets/72157628409467125
Sean McMillan

1
ที่เพิ่งไปรอบสำนักงานเพื่อเสียงหัวเราะและปรบมือมาก - อัจฉริยะ!
Andras Zoltan

ฉันไปกับ 429 ในที่สุด - มันอยู่ในร่างสเปค แต่ฉันสงสัยอย่างจริงจังว่ามันจะถูกนำมาใช้เพื่อสิ่งอื่น
Andras Zoltan

7

คุณมีอิสระที่จะทำสิ่งที่คุณชอบด้วยรหัส แต่ฉันจะยอมรับว่าคุณสามารถใช้503หรือถ้าคุณต้องการ402โดยไม่มีใครสามารถบ่นได้ว่าคุณกำลังทำสิ่งต่าง ๆ

แก้ไข: นักพิถีพิถันอาจบอกว่าคุณควรเริ่มต้นด้วย 503 จากนั้นสลับเมื่อชำระเงินได้แล้ว


นอกจากนี้ที่ยอดเยี่ยมในการแสดงความคิดเห็น:

4xx บ่งชี้ถึงข้อผิดพลาดโดยไคลเอนต์ที่สามารถแก้ไขได้โดยพวกเขาทำการกระทำบางอย่างในขณะที่ 5xx แสดงถึงปัญหาบนเซิร์ฟเวอร์ที่ไคลเอ็นต์ไม่สามารถช่วยแก้ไขได้ ดังนั้นในกรณีของคุณ 4xx เหมาะสมกว่าเนื่องจาก (i) เซิร์ฟเวอร์ทำงานตามที่ควรและ (ii) ลูกค้าสามารถ "แก้ไข" ข้อผิดพลาดโดยชะลอหรือซื้อเครดิตเพิ่ม ความละเอียดที่แน่นอนสามารถระบุได้ในเนื้อหาของการตอบสนอง 429 - Mike Chamberlain 7 ชั่วโมงที่แล้ว


503! 503! 503! ถึงขีด จำกัด แล้วการโทรครั้งต่อไปจะถูกระงับ ธรรมดาและเรียบง่าย ...
yannis

@YannisRizos: อ่า แต่ก็ไม่ได้รับอนุญาตเมื่อทำการชำระเงินแล้ว!
Marcin

1
รหัสข้อผิดพลาดแสดงผลลัพธ์ของการร้องขอเดียว หากการชำระเงินแล้วตามคำขอในภายหลังมันเป็นธุรกิจตามปกติ ... ถ้าคุณบันทึกพฤติกรรมมันก็ดีโดยฉัน หรือคุณสามารถส่งคืน 200 ได้พร้อมกับข้อความแสดงข้อผิดพลาด แต่นั่นไม่ได้สวย แม้ว่าบางคนอาจพูดว่าใช้รหัสข้อผิดพลาด HTTP สำหรับตรรกะทางธุรกิจไม่สวย อ่าฉันจะไปกับ 503 เป็นการส่วนตัวไม่สามารถให้บริการได้ในขณะนี้ - จนกว่าจะมีการรองรับตามปกติ 402
yannis

@YannisRizos (& Marcin) - ขอบคุณสำหรับความคิดเห็นของคุณ - ฉันคิดว่า 503 เป็นคนที่ดีที่สุดที่จะไปด้วย ในขณะที่ยังเข้าใจว่าการใช้งานในลักษณะที่สงบเงียบมักจะผิดพลาดจากการเป็นขนเมื่อมันมาถึงการใช้รหัสสถานะ HTTP มุมมองส่วนบุคคลของฉันเกี่ยวกับเรื่องนี้คือการใช้สิ่งที่โปรโตคอลให้เว้นแต่จะไม่พอดี (ซึ่งหายากมาก) ในกรณีนี้มันไม่แน่นอน!
Andras Zoltan

5
4xx บ่งชี้ถึงข้อผิดพลาดโดยไคลเอนต์ที่สามารถแก้ไขได้โดยพวกเขาทำการกระทำบางอย่างในขณะที่ 5xx แสดงถึงปัญหาบนเซิร์ฟเวอร์ที่ไคลเอ็นต์ไม่สามารถช่วยแก้ไขได้ ดังนั้นในกรณีของคุณ 4xx เหมาะสมกว่าเนื่องจาก (i) เซิร์ฟเวอร์ทำงานตามที่ควรและ (ii) ลูกค้าสามารถ "แก้ไข" ข้อผิดพลาดโดยชะลอหรือซื้อเครดิตเพิ่ม ความละเอียดที่แน่นอนสามารถระบุได้ในเนื้อหาของการตอบสนอง 429
Mike Chamberlain
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.