Rในส่วนที่เหลือยืนสำหรับทรัพยากร
(ซึ่งไม่เป็นความจริงเพราะมันหมายถึงตัวแทน แต่มันเป็นเคล็ดลับที่ดีในการจดจำความสำคัญของทรัพยากรใน REST)
เกี่ยวกับPUT /groups/api/v1/groups/{group id}/status/activate
: คุณไม่ได้อัปเดต "เปิดใช้งาน" "การเปิดใช้งาน" ไม่ใช่สิ่งที่มันเป็นคำกริยา คำกริยาไม่เคยเป็นแหล่งข้อมูลที่ดี กฎของหัวแม่มือ: ถ้าการกระทำคำกริยาเป็นใน URL มันอาจจะไม่สงบ
คุณกำลังทำอะไรแทน ไม่ว่าคุณจะ "เพิ่ม", "ลบ" หรือ "อัปเดต" การเปิดใช้งานในกลุ่มหรือหากคุณต้องการ: จัดการ "สถานะ" - แหล่งข้อมูลบนกลุ่ม โดยส่วนตัวแล้วฉันจะใช้ "การเปิดใช้งาน" เพราะสิ่งเหล่านี้มีความคลุมเครือน้อยกว่าแนวคิด "สถานะ": การสร้างสถานะไม่ชัดเจนการสร้างการเปิดใช้งานไม่ใช่
POST /groups/{group id}/activation
สร้าง (หรือร้องขอการสร้าง) การเปิดใช้งาน
PATCH /groups/{group id}/activation
อัพเดตรายละเอียดบางอย่างของการเปิดใช้งานที่มีอยู่ เนื่องจากกลุ่มมีการเปิดใช้งานเพียงครั้งเดียวเราจึงรู้ว่าทรัพยากรการเปิดใช้งานใดที่เราอ้างถึง
PUT /groups/{group id}/activation
ส่วนแทรกหรือแทนที่การเปิดใช้งานแบบเก่า เนื่องจากกลุ่มมีการเปิดใช้งานเพียงครั้งเดียวเราจึงรู้ว่าทรัพยากรการเปิดใช้งานใดที่เราอ้างถึง
DELETE /groups/{group id}/activation
จะยกเลิกหรือลบการเปิดใช้งาน
รูปแบบนี้มีประโยชน์เมื่อ "การเปิดใช้งาน" ของกลุ่มมีผลข้างเคียงเช่นการชำระเงินการส่งอีเมลที่ส่งเป็นต้น เฉพาะโพสต์และแพทช์อาจมีผลข้างเคียง เมื่อเช่นการลบการเปิดใช้งานจำเป็นต้องพูดแจ้งผู้ใช้ทางจดหมาย DELETE ไม่ใช่ตัวเลือกที่ถูกต้อง ในกรณีที่คุณอาจต้องการที่จะสร้างทรัพยากรการเสื่อมPOST /groups/{group_id}/deactivation
:
เป็นความคิดที่ดีที่จะปฏิบัติตามแนวทางเหล่านี้เนื่องจากสัญญามาตรฐานนี้ทำให้ชัดเจนสำหรับลูกค้าของคุณและพร็อกซีและเลเยอร์ทั้งหมดระหว่างลูกค้ากับคุณรู้ว่าจะปลอดภัยเมื่อลองอีกครั้งและเมื่อใด สมมติว่าไคลเอนต์อยู่ที่ไหนสักแห่งที่มี wifi ที่ไม่สม่ำเสมอและผู้ใช้คลิกที่ "ปิดการใช้งาน" ซึ่งก่อให้เกิดDELETE
: หากล้มเหลวลูกค้าสามารถลองใหม่ได้จนกว่าจะได้รับ 404, 200 หรืออะไรก็ได้ที่สามารถจัดการได้ แต่ถ้ามันก่อให้เกิดPOST to deactivation
มันรู้ว่าจะไม่ลองใหม่: POST หมายถึงสิ่งนี้
ตอนนี้ลูกค้าทุกคนมีสัญญาซึ่งเมื่อติดตามจะป้องกันการส่งอีเมล 42 ฉบับ "กลุ่มของคุณถูกปิดการใช้งาน" เพียงเพราะห้องสมุด HTTP ของพวกเขาพยายามโทรไปที่แบ็กเอนด์
การอัปเดตแอตทริบิวต์เดียว: ใช้ PATCH
PATCH /groups/{group id}
ในกรณีที่คุณต้องการอัพเดทคุณสมบัติ เช่น "สถานะ" อาจเป็นแอตทริบิวต์ของกลุ่มที่สามารถตั้งค่าได้ แอตทริบิวต์เช่น "สถานะ" มักจะเป็นตัวเลือกที่ดีในการ จำกัด ค่ารายการที่อนุญาต ตัวอย่างใช้ JSON-scheme ที่ไม่ได้กำหนด:
PATCH /groups/{group id} { "attributes": { "status": "active" } }
response: 200 OK
PATCH /groups/{group id} { "attributes": { "status": "deleted" } }
response: 406 Not Acceptable
การแทนที่ทรัพยากรโดยไม่มีผลข้างเคียงให้ใช้ PUT
PUT /groups/{group id}
ในกรณีที่คุณต้องการแทนที่ทั้งกลุ่ม นี่ไม่ได้แปลว่าเซิร์ฟเวอร์จะสร้างกลุ่มใหม่และส่งกลุ่มเก่าออกไปเช่นรหัสอาจยังคงเหมือนเดิม แต่สำหรับลูกค้าที่นี้คือสิ่งที่ PUT สามารถหมายถึง: ลูกค้าควรถือว่าเขาได้รับรายการใหม่ทั้งหมดขึ้นอยู่กับการตอบสนองของเซิร์ฟเวอร์
ในกรณีที่มีการPUT
ร้องขอลูกค้าควรส่งทรัพยากรทั้งหมดโดยมีข้อมูลทั้งหมดที่จำเป็นในการสร้างรายการใหม่: โดยปกติแล้วข้อมูลเดียวกันกับ POST-create จะต้องมี
PUT /groups/{group id} { "attributes": { "status": "active" } }
response: 406 Not Acceptable
PUT /groups/{group id} { "attributes": { "name": .... etc. "status": "active" } }
response: 201 Created or 200 OK, depending on whether we made a new one.
ความต้องการที่สำคัญมากคือPUT
เป็น idempotent: ถ้าคุณจำเป็นต้องมีผลข้างเคียงเมื่อปรับปรุงกลุ่ม (หรือการเปลี่ยนแปลงการเปิดใช้งาน) PATCH
คุณควรใช้ PUT
ดังนั้นเมื่อผลการปรับปรุงในเช่นการส่งอีเมลที่ไม่ได้ใช้