วิธีสร้าง REST URLs ที่ไม่มีกริยา?


283

ฉันพยายามหาวิธีออกแบบ URL ที่เงียบสงบ ฉันทุกคนใช้วิธีเงียบ ๆ ในการใช้ URL กับคำนามไม่ใช่คำกริยาไม่เข้าใจวิธีการทำเช่นนี้

เรากำลังสร้างบริการเพื่อใช้เครื่องคิดเลขทางการเงิน เครื่องคิดเลขใช้พารามิเตอร์หลายตัวที่เราจะอัปโหลดผ่านไฟล์ CSV กรณีการใช้จะเกี่ยวข้องกับ:

  1. อัปโหลดพารามิเตอร์ใหม่
  2. รับพารามิเตอร์ล่าสุด
  3. รับพารามิเตอร์สำหรับวันที่ที่กำหนด
  4. ทำให้ชุดของพารามิเตอร์ใช้งานได้
  5. ตรวจสอบชุดของพารามิเตอร์

ฉันรวบรวมวิธีการพักผ่อนที่จะมี URL ประเภทต่อไปนี้:

/parameters
/parameters/12-23-2009

คุณสามารถใช้สามกรณีแรกด้วย:

  1. POST ที่คุณรวมไฟล์พารามิเตอร์ไว้ในคำขอโพสต์
  2. รับ URL แรก
  3. รับ URL ที่สอง

แต่คุณจะใช้กรณีที่ 4 และ 5 โดยไม่ต้องใช้คำกริยาได้อย่างไร คุณไม่ต้องการ URL เช่น:

/parameters/ID/activate
/parameters/ID/validate

??


3
ฉันชอบ PATCH มากกว่า POST สำหรับการอัพเดทบางส่วน
user2016971

คำตอบ:


71

บางทีสิ่งที่ชอบ:

PUT /parameters/activation HTTP/1.1
Content-Type: application/json; encoding=UTF-8
Content-Length: 18

{ "active": true }

1
POSTตกลงถ้าคุณต้องการดำเนินการ "ขั้นตอน" เช่นตรวจสอบพารามิเตอร์ทุกครั้งที่คุณส่งคำขอ แต่เมื่อคุณแก้ไขสถานะ (แอปพลิเคชัน) ของทรัพยากรคุณจะปรับปรุงทรัพยากรที่มีอยู่จริง ๆ ไม่ได้สร้างทรัพยากรใหม่หรือโพสต์คำขอการประมวลผล
Andrey Vlasovskikh

19
PUT สำหรับการสร้างทรัพยากรใหม่หรือการวาง (โดยรวมไม่ใช่ในบางส่วน) ทรัพยากรใหม่ที่ URL เฉพาะ ฉันไม่เห็นว่า PUT เหมาะกับกรณีนี้อย่างไร
Breton

30
ที่จริงPOSTVS PUTไม่เหมือนVSinsert อัพเดตทรัพยากรที่สอดคล้องกับเส้นทางที่กำหนดหรือสร้างทรัพยากรใหม่ที่สอดคล้องกับเส้นทางที่กำหนด สร้างทรัพยากรใหม่ที่ใดที่หนึ่ง ตัวอย่างเช่นจะอัปเดตความคิดเห็นที่เหมาะสมในขณะที่จะสร้างทรัพยากรใหม่(และควรกลับเส้นทางไปยังทรัพยากรใหม่ในการตอบสนอง) updatePUTPOSTPUT /blog/posts/3/comments/5POST /blog/posts/3/commentscomment
yfeldblum

23
@Justice @Breton ความแตกต่างที่สำคัญกว่าPUTคือ idempotent ขณะที่POSTไม่ โดยปกติคุณควรวางข้อ จำกัด ในสิ่งที่คุณให้มากที่สุดเท่าที่จะเป็นไปได้ การผสานกับPUTให้ข้อมูลเพิ่มเติมกับไคลเอ็นต์ของเซอร์วิส
Andrey Vlasovskikh

3
ทรัพยากรอาจเป็น / พารามิเตอร์ / สถานะและเนื้อหาของคำขออาจเป็นเพียง "ใช้งาน" ด้วยวิธีนี้คุณจะวางทรัพยากรใหม่ทั้งหมดไปยัง URL เฉพาะ
Carlos Aguayo

991

หลักการทั่วไปสำหรับการออกแบบ URI ที่ดี:

  • อย่าใช้พารามิเตอร์การสืบค้นเพื่อเปลี่ยนสถานะ
  • อย่าใช้เส้นทางแบบตัวพิมพ์ใหญ่หากคุณสามารถช่วยได้ ตัวพิมพ์เล็กดีที่สุด
  • อย่าใช้ส่วนขยายเฉพาะการใช้งานใน URIs ของคุณ (.php, .py, .pl ฯลฯ )
  • อย่าตกอยู่ในRPCด้วย URI ของคุณ
  • อย่าจำกัด พื้นที่ URI ของคุณให้มากที่สุด
  • อย่าทำให้เซ็กเมนต์เส้นทางสั้น
  • ทำอย่างใดอย่างหนึ่ง/resourceหรือ/resource/; สร้างการเปลี่ยนเส้นทาง 301 จากที่คุณไม่ได้ใช้
  • ทำพารามิเตอร์การใช้แบบสอบถามสำหรับย่อยเลือกของทรัพยากร; การแบ่งหน้าคือการค้นหา
  • ทำสิ่งที่ย้ายออกจาก URI ที่ควรจะเป็นในส่วนหัว HTTP หรือร่างกาย

(หมายเหตุ: ฉันไม่ได้พูดว่า "RESTful URI design"; URI นั้นทึบแสงใน REST)

หลักการทั่วไปสำหรับการเลือกเมธอด HTTP:

  • อย่าใช้ GET เพื่อเปลี่ยนสถานะ นี่เป็นวิธีที่ดีในการทำให้ Googlebot ทำลายวันของคุณ
  • อย่าใช้ PUT ยกเว้นว่าคุณกำลังอัปเดตทรัพยากรทั้งหมด
  • อย่าใช้ PUT ยกเว้นว่าคุณสามารถทำ GET บน URI เดียวกันได้อย่างถูกกฎหมาย
  • อย่าใช้ POST เพื่อดึงข้อมูลที่มีอายุการใช้งานนานหรืออาจมีเหตุผลที่จะแคช
  • อย่าทำการดำเนินการที่ไม่ได้ใช้idempotentด้วย PUT
  • ทำใช้งานได้รับมากที่สุดเท่าที่เป็นไปได้
  • ทำใช้ POST ในการตั้งค่าที่จะนำเมื่อมีข้อสงสัย
  • ทำใช้โพสต์เมื่อใดก็ตามที่คุณต้องทำบางสิ่งบางอย่างที่รู้สึกเหมือน RPC
  • ทำใช้ PUT สำหรับการเรียนของทรัพยากรที่มีขนาดใหญ่หรือลำดับชั้น
  • อย่าใช้ลบในการตั้งค่าที่โพสต์ไปยังแหล่งลบ
  • Doใช้ GET สำหรับสิ่งที่ต้องการการคำนวณเว้นแต่ป้อนข้อมูลของคุณมีขนาดใหญ่ซึ่งในกรณีที่ใช้โพสต์

หลักการทั่วไปของการออกแบบเว็บเซอร์วิสด้วย HTTP:

  • อย่าใส่ข้อมูลเมตาลงในเนื้อหาของการตอบกลับที่ควรอยู่ในส่วนหัว
  • อย่าใส่ข้อมูลเมตาลงในทรัพยากรที่แยกต่างหากเว้นแต่จะรวมถึงการสร้างค่าใช้จ่ายที่สำคัญ
  • อย่าใช้รหัสสถานะที่เหมาะสม
    • 201 Createdหลังจากสร้างทรัพยากร ทรัพยากรต้องมีอยู่ในเวลาที่ตอบสนองถูกส่ง
    • 202 Accepted หลังจากดำเนินการสำเร็จหรือสร้างทรัพยากรแบบอะซิงโครนัส
    • 400 Bad Requestเมื่อมีคนทำการดำเนินการกับข้อมูลที่เป็นการหลอกลวงอย่างชัดเจน สำหรับใบสมัครของคุณอาจเป็นข้อผิดพลาดในการตรวจสอบ โดยทั่วไปจะสำรองไว้ 500 หากมีข้อยกเว้นที่ไม่ได้ตรวจสอบ
    • 401 Unauthorizedเมื่อมีคนเข้าถึง API ของคุณโดยไม่ต้องระบุAuthorizationส่วนหัวที่จำเป็นหรือเมื่อข้อมูลประจำตัวภายในAuthorizationไม่ถูกต้อง อย่าใช้รหัสตอบกลับนี้หากคุณไม่ได้รับข้อมูลรับรองผ่านทางAuthorizationส่วนหัว
    • 403 Forbidden เมื่อมีคนเข้าถึง API ของคุณในลักษณะที่อาจเป็นอันตรายหรือหากพวกเขาไม่ได้รับอนุญาต
    • 405 Method Not Allowed เมื่อมีคนใช้ POST เมื่อพวกเขาควรจะใช้ PUT ฯลฯ
    • 413 Request Entity Too Large เมื่อมีคนพยายามส่งไฟล์ขนาดใหญ่ที่ยอมรับไม่ได้ให้คุณ
    • 418 I'm a teapot เมื่อพยายามชงกาแฟกับกาน้ำชา
  • ทำใช้ส่วนหัวของแคชเมื่อใดก็ตามที่คุณสามารถ
    • ETag ส่วนหัวเป็นสิ่งที่ดีเมื่อคุณสามารถลดทรัพยากรให้เป็นค่าแฮชได้อย่างง่ายดาย
    • Last-Modified ควรระบุให้คุณทราบว่าการรักษาเวลาประทับเมื่อทรัพยากรได้รับการปรับปรุงเป็นความคิดที่ดี
    • Cache-ControlและExpiresควรได้รับค่าที่สมเหตุสมผล
  • ทำทุกสิ่งที่คุณทำได้เพื่อให้เกียรติส่วนหัวแคชในคำขอ ( If-None-Modified, If-Modified-Since)
  • Doใช้การเปลี่ยนเส้นทางเมื่อพวกเขาให้ความรู้สึก แต่เหล่านี้ควรจะหายากสำหรับบริการเว็บ

สำหรับคำถามเฉพาะของคุณ POST ควรใช้สำหรับ # 4 และ # 5 การดำเนินการเหล่านี้อยู่ภายใต้แนวทาง "คล้าย RPC" ด้านบน สำหรับ # 5 Content-Type: application/x-www-form-urlencodedโปรดจำไว้ว่าการโพสต์ไม่จำเป็นต้องมีการใช้งาน สิ่งนี้อาจเป็น JSON หรือ CSV ได้อย่างง่ายดาย


11
413 มีไว้สำหรับขนาดของคำขอที่คุณกำลังส่งเพื่อให้คุณสามารถปฏิเสธใครบางคนที่ส่งข้อมูลถึงคุณได้อย่างสุภาพร่วมกับ 411 ดังนั้นคุณจึงบังคับให้คนอื่นบอกคุณว่ากำลังส่งข้อมูลมากแค่ไหน สำหรับตัวอย่างจาก 413 ฉันคิดว่า 400 จะเป็นการตอบสนองที่เหมาะสมกว่า
Garry Shutler

5
+1 เนื่องจากเป็นทรัพยากรที่ยอดเยี่ยม อย่างไรก็ตามเป็นทรัพยากรทั่วไปและไม่ได้ถามคำถามโดยตรง สิ่งนี้ควรรวมย่อหน้าเพิ่มเติมพร้อมคำตอบเฉพาะ
ซามูเอลเนฟฟ์

@ GarryShutler จับดีคุณพูดถูก ขอบคุณสำหรับการแก้ไข
Bob Aman

1
ใช่คุณจะใช้PUTในกรณีที่คุณเขียนทับวัตถุทั้งหมดเท่านั้น อย่างไรก็ตามฉันอ้างว่าPATCHหรือPOSTนั้นสมเหตุสมผลในกรณีที่มีการอัพเดททรัพยากรบางส่วน PATCHมีความชัดเจนมากขึ้นในแง่ของการดำเนินการที่จะทำ แต่เนื่องจากลูกค้าไม่สามารถที่จะออกคำขอPATCHได้ทั้งหมดจึงเหมาะสมอย่างยิ่งที่จะอนุญาตให้มีPOSTแทนและฉันอาจไปไกลถึงการสนับสนุนว่าPOSTควรจะได้รับอนุญาตให้เป็นทางเลือกหากPATCHถูกนำมาใช้
Bob Aman

1
+1 สำหรับข้อผิดพลาด 409 ข้อผิดพลาด 400 เป็นสิ่งที่สามารถแก้ไขได้โดยการตรวจสอบฝั่งไคลเอ็นต์ที่เพียงพอ 409 ชี้แจงว่าคำขอนั้นเป็นที่ยอมรับและสอดคล้องกัน แต่ขัดแย้งกับบางแง่มุมของสถานะเซิร์ฟเวอร์ (โดยปกติแล้วจะเกิดขึ้นพร้อมกัน แต่ในทางทฤษฎีแล้วข้อ จำกัด ใด ๆ
claytond

18

เมื่อใดก็ตามที่ดูเหมือนว่าคุณต้องการคำกริยาใหม่ให้คิดเปลี่ยนคำกริยานั้นเป็นคำนามแทน ตัวอย่างเช่นเปลี่ยน 'เปิดใช้งาน' เป็น 'เปิดใช้งาน' และ 'ตรวจสอบ' เป็น 'ตรวจสอบ'

แต่จากสิ่งที่คุณเขียนฉันจะบอกว่าใบสมัครของคุณมีปัญหามากขึ้น

เมื่อใดก็ตามที่มีการเสนอทรัพยากรที่เรียกว่า 'พารามิเตอร์' มันควรส่งค่าสถานะสีแดงในใจของสมาชิกทุกคนในโครงการ 'พารามิเตอร์' สามารถนำไปใช้กับทรัพยากรใด ๆ มันไม่เจาะจงพอ

'พารามิเตอร์' หมายถึงอะไรกันแน่? อาจมีหลายสิ่งที่ต่างกันซึ่งแต่ละอย่างควรมีทรัพยากรแยกต่างหาก

อีกวิธีในการรับสิ่งนี้ - เมื่อคุณพูดคุยเกี่ยวกับแอปพลิเคชันของคุณกับผู้ใช้ปลายทาง (ผู้ที่รู้น้อยเกี่ยวกับการเขียนโปรแกรม) คำที่พวกเขาใช้ซ้ำคืออะไร?

นี่คือคำที่คุณควรออกแบบใบสมัครของคุณ

หากคุณยังไม่มีการแปลงนี้กับผู้ใช้ที่คาดหวัง - หยุดทุกอย่างตอนนี้และอย่าเขียนโค้ดอีกบรรทัดจนกว่าคุณจะทำ! เมื่อนั้นทีมของคุณจะมีไอเดียว่าต้องสร้างอะไร

ฉันไม่รู้อะไรเกี่ยวกับซอฟต์แวร์ทางการเงิน แต่ถ้าฉันต้องเดาฉันจะบอกว่าทรัพยากรบางอย่างอาจใช้ชื่อเช่น "รายงาน" "การชำระเงิน" "โอนเงิน" และ "สกุลเงิน"

มีหนังสือดี ๆ หลายเล่มในส่วนนี้ของกระบวนการออกแบบซอฟต์แวร์ สองฉันจะแนะนำให้มีการDomain ขับเคลื่อนการออกแบบและวิเคราะห์รูปแบบ


1
นี่เป็นจุดที่ดีจริงๆ มันเป็นเรื่องง่ายที่จะพลาดถ้าคุณอยู่ในสภาพจิตใจสำหรับการประมวลผลตรรกะที่เป็นทางการและการใช้เหตุผล มันไม่สำคัญว่า X จะเป็นอะไรตราบใดที่มันลงตัวกับส่วนอื่น ๆ ในวิธีที่ถูกต้อง ปัจจัยมนุษย์หลุดลอยไป
Breton

1
บางครั้งฉันพบว่ามีประโยชน์ในการแปลงคำต่างๆให้เป็น "ทรัพยากรการประมวลผล" เช่น "activator" หรือ "validator" เป็นต่อ RFC 2616 POST สามารถใช้ในการ "ให้บล็อกของข้อมูล ... กับกระบวนการจัดการข้อมูล"
Darrel มิลเลอร์

เข้าใจ ในกรณีนี้ผู้ใช้จะอ้างถึงข้อมูลว่า "พารามิเตอร์" (หรือ "พารามิเตอร์ความเสี่ยง" หรือสิ่งที่คล้ายกัน) รายการพารามิเตอร์มีการตั้งค่าหลายประเภท แต่พารามิเตอร์จะถูกอัปโหลดเป็นทั้งชุดเสมอ (ในไฟล์ CSV)
มาร์คัส Leon

@ Marcus - ฟังดูเหมือนเป็นเรื่องผิดปกติมาก บางทีถ้าคุณอธิบายว่าแอปของคุณทำอะไรในรายละเอียดมากขึ้นเราจะสามารถให้คำแนะนำที่ดีกว่าสำหรับการระบุทรัพยากร
Apodaca รวย

1
"เมื่อคุณพูดคุยแอปพลิเคชันของคุณกับผู้ใช้ปลายทางคำที่พวกเขาใช้ซ้ำ ๆ กันคืออะไร" ... และถ้าเป็นคำกริยาทั้งหมดล่ะ? XD
Amalgovinus

11

การออกแบบ URL ของคุณไม่เกี่ยวข้องกับว่าแอปพลิเคชันของคุณสงบหรือไม่ วลี "URL ที่สงบ" จึงไร้สาระ

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

ที่ได้กล่าวมาลองมาที่คำถามของคุณ: สองกรณีสุดท้ายนั้นไม่สงบและไม่เหมาะกับรูปแบบการพักผ่อนใด ๆ นี่คือสิ่งที่คุณอาจเรียกว่า RPC หากคุณจริงจังกับ REST คุณจะต้องคิดใหม่ว่าแอปพลิเคชันของคุณทำงานอย่างไร เป็นเช่นนั้นหรือละทิ้ง REST และทำแอปของคุณเป็นแอป RPC

อืมมอาจจะไม่

แนวคิดในที่นี้คือคุณต้องปฏิบัติต่อทุกสิ่งเป็นทรัพยากรดังนั้นเมื่อชุดพารามิเตอร์มี URL ที่คุณสามารถอ้างถึงได้คุณเพียงเพิ่ม:

GET [parametersurl]/validationresults

POST [paramatersurl]
body: {command:"activate"}

แต่อีกครั้งสิ่งที่เปิดใช้งานคือ RPC ไม่ใช่ REST


คุณระบุจุดที่น่าสนใจที่นี่ คุณช่วยอธิบายเพิ่มเติมอีกเล็กน้อยได้ไหมว่าแนวทางแบบ RESTful สำหรับบางสิ่งเช่นนี้จะเป็นอย่างไร
poezn

ฉันใช้เวลาสักครู่อ่านคำตอบที่นี่และฉันคิดว่าความยุติธรรมอาจเป็นสิ่งที่ เขาสร้างแบบจำลองคุณสมบัติส่วนบุคคลของวัตถุพารามิเตอร์ของคุณเป็นทรัพยากรส่วนบุคคลและใช้คำสั่ง PUT เพื่อแทนที่เนื้อหาของคุณสมบัตินั้นที่ทรัพยากรนั้น นี่คือการสร้างแบบจำลองสถานะของแต่ละวัตถุเป็นชุดของทรัพยากรและการแก้ไขสถานะเป็นการวางหรือลบหรือปรับเปลี่ยนทรัพยากร สำหรับการตรวจสอบ - คุณเพียงแค่ต้องการทรัพยากรที่ระบุว่าพารามิเตอร์นั้นถูกต้องหรือไม่ดังที่ได้กล่าวไว้ในคำตอบของฉัน นั่นจะเป็นเรื่องปกติตราบใดที่ไม่มีผลข้างเคียง
Breton

แน่นอนว่าสิ่งที่ "เปิดใช้งาน" ไม่เพียงตั้งค่าคุณสมบัติเดียวเป็นจริง ถ้ามันต้องทำอะไรอย่างอื่นมันก็ยังไม่สงบและฉันไม่แน่ใจว่าคุณจะทำแบบจำลองนี้อย่างไร
Breton

ฉันไม่คิดว่าคุณสามารถพูดได้ว่าสองกรณีสุดท้ายนั้นไม่สงบ ผลการเปิดใช้งานและการตรวจสอบเป็นเพียงวิธีการบอกทางอ้อมว่าทรัพยากรกำลังเปลี่ยนเป็นสถานะใหม่ในเครื่องสถานะ ส่วนที่เหลือค่อนข้างมีความสามารถในการสร้างแบบจำลองนี้
Darrel Miller

@ บาร์เรลฉันคิดว่าคุณชี้ให้เห็นส่วนหนึ่งของ REST ที่อาจจะท้าทายสำหรับหลาย ๆ คนที่ยังใหม่กับ REST คุณจะดำเนินการเกี่ยวกับการดำเนินการ "ตรวจสอบทรัพยากร x" ได้อย่างไร ฉันคิดว่าสิ่งที่ท้าทายคือมันเป็นการผ่าตัดที่อาจส่งผลให้เกิดการเปลี่ยนแปลงในสถานะ แต่รัฐใหม่เป็นผลมาจากการร้องขอ
ฌอน

6

ข้อกำหนดการเปิดใช้งานและตรวจสอบความถูกต้องเป็นสถานการณ์ที่คุณพยายามเปลี่ยนสถานะของทรัพยากร ไม่มีความแตกต่างที่ทำให้คำสั่ง "สมบูรณ์" หรือคำขออื่น ๆ "ส่ง" มีวิธีมากมายที่จะจำลองแบบการเปลี่ยนแปลงสถานะเหล่านี้ แต่วิธีหนึ่งที่ฉันพบว่าบ่อยครั้งคือการสร้างทรัพยากรการรวบรวมสำหรับทรัพยากรในรัฐเดียวกันจากนั้นย้ายทรัพยากรระหว่างคอลเล็กชันเพื่อส่งผลกระทบต่อรัฐ

เช่นสร้างทรัพยากรบางอย่างเช่น,

/ActiveParameters
/ValidatedParameters

หากคุณต้องการให้ชุดพารามิเตอร์ใช้งานอยู่ให้เพิ่มชุดนั้นไปยังคอลเลกชัน ActiveParameters คุณสามารถส่งชุดพารามิเตอร์เป็นหน่วยงานหรือคุณสามารถส่ง URL เป็นพารามิเตอร์แบบสอบถามได้ดังนี้

POST /ActiveParameters?parameter=/Parameters/{Id}

สิ่งเดียวกันสามารถทำได้ด้วย / ValidatedParameters หากพารามิเตอร์ไม่ถูกต้องเซิร์ฟเวอร์สามารถส่งคืน "คำขอไม่ถูกต้อง" ไปยังคำขอเพื่อเพิ่มพารามิเตอร์ในการรวบรวมพารามิเตอร์ที่ตรวจสอบได้


1

ฉันจะแนะนำทรัพยากร Meta และวิธีการดังต่อไปนี้

ทำให้พารามิเตอร์ใช้งานและ / หรือตรวจสอบพวกเขา:

> PUT /parameters/<id>/meta HTTP/1.1
> Host: example.com
> Content-Type: application/json
> Connection: close
>
> {'active': true, 'require-valid': true}
>
< HTTP/1.1 200 OK
< Connection: close
<

ตรวจสอบว่าพารามิเตอร์ใช้งานอยู่และใช้ได้หรือไม่:

> GET /parameters/<id>/meta HTTP/1.1
> Host: example.com
> Connection: close
>
< HTTP/1.1 200 OK
< Content-Type: application/json
< Connection: close
<
< {
<     'active': true,
<     'require-valid': true,
<     'valid': {'status': false, 'reason': '...'}
< }
<

เท่าที่ฉันเข้าใจคำถามคือเกี่ยวกับการตั้งชื่อ URL ที่เงียบสงบไม่ใช่เกี่ยวกับฟังก์ชันการทำงานใช่ไหม
poezn

2
คำถามที่ถูก จำกัด ให้กับ "URL ที่สงบ" เป็นคำถามที่ไม่ดีและไม่ควรตอบ คำถามควรถูกขยายเพื่อพิจารณา "ทรัพยากรที่สงบที่สุดด้วยวิธีการและ URL ที่เกี่ยวข้อง" - และตอบเป็นเช่นนี้
yfeldblum

ตามที่ฉันเข้าใจแล้วคำถามเกี่ยวกับการตั้งชื่อ URL และวิธีการ HTTP ที่ทรัพยากรที่มีชื่อควรตอบสนอง
Andrey Vlasovskikh

1

ฉันรู้สึกเศร้าเล็กน้อยที่เห็นว่าหลังจากผ่านไปกว่า 10 ปีแล้วไม่มีคำตอบว่าจริง ๆ แล้วสิ่งที่ได้รับการร้องขอใน OP สามารถออกแบบในสถาปัตยกรรม REST ได้ดังนั้นฉันจึงรู้สึกว่าต้องทำเช่นนี้ในตอนนี้

สิ่งแรกสิ่งที่เหลือคืออะไร! REST ย่อหรือ ReST ย่อมาจาก "Representational State Transfer" และกำหนดการแลกเปลี่ยนสถานะของทรัพยากรในรูปแบบการแสดงที่แน่นอน รูปแบบการนำเสนอเป็นไปตามประเภทของสื่อที่เจรจาต่อรอง ในกรณีของapplication/htmlรูปแบบการแสดงอาจเป็นสตรีมของเนื้อหาข้อความที่จัดรูปแบบ HTML ซึ่งแสดงผลในเบราว์เซอร์อาจหลังจากใช้การจัดรูปแบบสไตล์ชีทบางอย่างเพื่อจัดวางองค์ประกอบบางอย่างในตำแหน่งที่แน่นอน

REST เป็นหลักการทั่วไปของเว็บที่เรียกดูได้ที่เราทุกคนรู้แม้ว่าจะกำหนดเป้าหมายไปที่แอปพลิเคชันทุกประเภทและไม่เพียงเบราว์เซอร์ ดังนั้นโดยการออกแบบแนวคิดเดียวกันที่นำไปใช้กับเว็บยังใช้กับสถาปัตยกรรมส่วนที่เหลือ คำถามเช่นวิธีการบรรลุบางสิ่งบางอย่างด้วยวิธี "สงบ" แก้ไขรอบการตอบคำถามวิธีการบรรลุบางสิ่งบางอย่างบนเว็บเพจแล้วนำแนวคิดเดียวกันไปใช้กับเลเยอร์แอปพลิเคชัน

เครื่องคิดเลขที่ใช้เว็บมักจะเริ่มต้นด้วย "หน้า" บางอย่างที่ช่วยให้คุณป้อนค่าบางอย่างเพื่อคำนวณก่อนที่จะส่งข้อมูลที่ป้อนไปยังเซิร์ฟเวอร์ ใน HTML นี้มักจะทำได้ผ่าน<form>องค์ประกอบHTML ที่สอนลูกค้าเกี่ยวกับพารามิเตอร์ที่มีให้ตั้งตำแหน่งเป้าหมายที่จะส่งคำขอไปยังเช่นเดียวกับรูปแบบการเป็นตัวแทนที่จะใช้เมื่อส่งข้อมูลอินพุต นั่นคือสามารถมีลักษณะเช่นนี้:

<html>
  <head>
    ...
  </head>
  <body>
    <form action="/../someResource" method="post" enctype="application/x-www-form-urlencoded">
      <label for="firstNumber">First number:</label>
      <input type="number" id="firstNumber" name="firstNumber"/>

      <label for="secondNumber">Second number:</label>
      <input type="number" id="secondNumber" name="secondNumber"/>

      <input type="submit" value="Add numbers"/>
    </form>
  </body>
</html>

ตัวอย่างข้างต้นกล่าวคือมีช่องป้อนข้อมูลสองช่องที่ผู้ใช้กรอกข้อมูลหรือออโตมาตาอื่น ๆ และเมื่อเรียกใช้งานองค์ประกอบส่งข้อมูลเข้าเบราว์เซอร์จะดูแลการจัดรูปแบบข้อมูลอินพุตในapplication/x-www-form-urlencodedรูปแบบการนำเสนอที่ถูกส่ง ไปยังตำแหน่งเป้าหมายที่กล่าวถึงผ่านวิธีการร้องขอ HTTP ที่ระบุPOSTในกรณีนี้ หากเราเข้า1สู่ช่องfirstNumberป้อนข้อมูลและ2ลงในช่องsecondNumberป้อนข้อมูลเบราว์เซอร์จะสร้างการแสดงfirstNumber=1&secondNumber=2และส่งสิ่งนี้เป็นส่วนของเนื้อหาของคำขอจริงไปยังทรัพยากรเป้าหมาย

คำขอ HTTP ดิบที่ออกให้กับเซิร์ฟเวอร์อาจมีลักษณะเช่นนี้:

POST /../someResource
Host: www.acme.com
Content-Type: application/x-www-form-urlencoded
Content-Length: 28
Accept: application/html

firstNumber=1&secondNumber=2

เซิร์ฟเวอร์อาจทำการคำนวณและตอบกลับด้วยหน้า HTML เพิ่มเติมที่มีผลลัพธ์ของการคำนวณตามคำขอที่ระบุว่าลูกค้าเข้าใจรูปแบบนี้

ดังที่ Breton ชี้ให้เห็นแล้วไม่มีสิ่งใดเป็น URL "RESTful" หรือ URI URI / URL เป็นประเภทของตนเองและไม่ควรสื่อความหมายใด ๆ กับลูกค้า / ผู้ใช้ ในตัวอย่างเครื่องคิดเลขด้านบนผู้ใช้ไม่สนใจว่าจะส่งข้อมูลไปที่ใดและสนใจเพียงว่าเมื่อทริกเกอร์ช่องป้อนข้อมูลการส่งคำขอจะถูกส่งไป ข้อมูลที่จำเป็นทั้งหมดที่จำเป็นสำหรับการทำงานควรได้รับจากเซิร์ฟเวอร์แล้ว

เบราว์เซอร์อาจไม่ทราบว่าคำขอนั้นป้อนเครื่องคิดเลขด้วยพารามิเตอร์ป้อนเข้าจริง ๆ ก็อาจเป็นรูปแบบคำสั่งบางชนิดที่ส่งกลับการแสดงแบบฟอร์มถัดไปเพื่อดำเนินการสั่งซื้อต่อไปหรือบางประเภทที่แตกต่างกันโดยสิ้นเชิง ทรัพยากร. มันทำสิ่งที่ HTML spec ต้องการในกรณีเช่นนี้และไม่สนใจว่าเซิร์ฟเวอร์กำลังทำอะไรอยู่ แนวคิดนี้ทำให้เบราว์เซอร์ใช้รูปแบบการนำเสนอแบบเดียวกันเพื่อทำสิ่งต่าง ๆ เช่นการสั่งซื้อบางอย่างจากร้านค้าออนไลน์ที่คุณต้องการสนทนากับเพื่อนที่ดีที่สุดของคุณลงชื่อเข้าใช้บัญชีออนไลน์และอื่น ๆ

ความสามารถในการจ่ายขององค์ประกอบบางอย่างเช่นในกรณีที่ฟิลด์ป้อนข้อมูลที่มักจะแสดงผลเป็นปุ่มกำหนดสิ่งที่คุณควรทำกับมัน ในกรณีของปุ่มหรือลิงค์มันบอกให้คุณคลิก องค์ประกอบอื่น ๆ อาจสื่อถึงการจ่ายที่แตกต่างกัน ความสามารถในการจ่ายเงินดังกล่าวยังสามารถแสดงผ่านความสัมพันธ์ของลิงก์เช่นเดียวกับpreloadลิงก์ที่มีคำอธิบายประกอบที่โดยทั่วไปบอกลูกค้าว่าสามารถโหลดเนื้อหาของทรัพยากรที่เชื่อมโยงในพื้นหลังได้แล้วเนื่องจากผู้ใช้มักจะคว้าเนื้อหานี้ต่อไป ความสัมพันธ์เชื่อมโยงดังกล่าวควรของหลักสูตรได้มาตรฐานหรือตามกลไกส่วนขยายสำหรับความสัมพันธ์ประเภทตามที่กำหนดโดยเว็บเชื่อมโยง

นี่เป็นแนวคิดพื้นฐานที่ใช้บนเว็บและควรใช้ในสถาปัตยกรรม REST อ้างอิงจาก "ลุงบ็อบ" โรเบิร์ตซีมาร์ตินซีสถาปัตยกรรมเกี่ยวกับความตั้งใจและความตั้งใจที่อยู่เบื้องหลังสถาปัตยกรรมส่วนที่เหลือคือการแยกลูกค้าออกจากเซิร์ฟเวอร์เพื่อให้เซิร์ฟเวอร์สามารถพัฒนาได้อย่างอิสระในอนาคตโดยไม่ต้องกลัวพวกเขาจะทำลายลูกค้า น่าเสียดายที่ต้องมีวินัยมากเพราะเป็นเรื่องง่ายที่จะแนะนำการมีเพศสัมพันธ์หรือเพิ่มโซลูชั่นการแก้ไขอย่างรวดเร็วเพื่อให้งานเสร็จและไปต่อ ดังที่ Jim Webber ชี้ให้เห็นในสถาปัตยกรรม REST คุณในฐานะผู้ให้บริการควรพยายามออกแบบโปรโตคอลแอปพลิเคชันโดเมนที่คล้ายกับเกมคอมพิวเตอร์ที่ใช้ข้อความในยุค 70ที่ลูกค้าจะทำตามจนกว่าจะสิ้นสุดกระบวนการ

สิ่งที่เรียกว่า "REST" APIs ที่น่าเสียดายในความเป็นจริงคือทุกสิ่ง แต่นั่น คุณเห็นการแลกเปลี่ยนข้อมูลส่วนใหญ่ที่ใช้ JSON ซึ่งระบุไว้ในเอกสารภายนอกเฉพาะ API ซึ่งยากที่จะผสานรวมแบบทันที รูปแบบที่คำขอต้องมีลักษณะเป็นฮาร์ดโค้ดในเอกสารภายนอกซึ่งนำไปสู่การดำเนินการแปล URIs จำนวนมากเพื่อส่งกลับ typs ที่กำหนดไว้ล่วงหน้าแทนที่จะใช้รูปแบบการแสดงทั่วไปที่มีการเจรจาล่วงหน้า สิ่งนี้ป้องกันไม่ให้เซิร์ฟเวอร์เปลี่ยนแปลงเนื่องจากลูกค้าคาดหวังว่าจะได้รับรูปแบบข้อมูลบางอย่าง (หมายเหตุไม่ใช่รูปแบบการแสดง!) สำหรับ URIs ที่กำหนดไว้ล่วงหน้า การแลกเปลี่ยนรูปแบบข้อมูลที่กำหนดเองนี้ยังป้องกันไม่ให้ลูกค้าโต้ตอบกับ API อื่น ๆ เนื่องจาก "รูปแบบข้อมูล" มักจะไหลไปยัง API เฉพาะ เรารู้แนวคิดนี้จากอดีตจากเทคโนโลยี RPC เช่น Corba, RMI หรือ SOAP ซึ่งเราประณามอย่างชั่วร้ายแม้ว่า Peppol จะย้ายไปที่มันอีกครั้งโดยแทนที่ AS2 ด้วย AS4 เป็นโปรโตคอลการโอนเริ่มต้นเมื่อเร็ว ๆ นี้

ในส่วนที่เกี่ยวกับคำถามจริงที่ถามการส่งข้อมูลเป็นไฟล์ csv ไม่แตกต่างจากการใช้การapplication/x-www-form-urlencodedแสดงหรือสิ่งที่คล้ายกัน จิมเวบเบอร์ทำให้มันชัดเจนว่าหลังจากที่ทุกHTTP เป็นเพียงโปรโตคอลการขนส่งที่มีประสิทธิภาพการประยุกต์ใช้การโอนเอกสารผ่านเว็บที่ ไคลเอ็นต์และเซิร์ฟเวอร์อย่างน้อยควรทั้งการสนับสนุนtext/csvตามที่กำหนดในRFC 7111 ไฟล์ CSV นี้สามารถสร้างขึ้นได้เนื่องจากการประมวลผลประเภทสื่อที่กำหนดองค์ประกอบของรูปแบบองค์ประกอบเป้าหมายหรือแอตทริบิวต์เพื่อส่งคำขอไปยังรวมถึงวิธีการ HTTP เพื่อทำการอัปโหลดการกำหนดค่า

มีสองประเภทสื่อที่สนับสนุนรูปแบบเช่นเป็นHTML , รูปแบบ HAL , halform , ไอออนหรือไฮดรา ผมอยู่ แต่ไม่ทราบชนิดของสื่อที่จะสามารถเข้ารหัสข้อมูลที่ป้อนเข้าไปtext/csvโดยตรงด้วยเหตุหนึ่งต้องอาจจะกำหนดและลงทะเบียนกับรีจิสทรีชนิดของสื่อ IANA ของ

การอัปโหลดและดาวน์โหลดชุดพารามิเตอร์ที่สมบูรณ์ไม่ควรเป็นปัญหาที่ฉันเดา ตามที่กล่าวไว้ก่อนหน้านี้ URI เป้าหมายไม่เกี่ยวข้องเนื่องจากลูกค้าจะใช้ URI เพื่อดึงเนื้อหาใหม่เพื่อดำเนินการ การกรองตามวันธุรกิจไม่ควรเป็นเรื่องยาก ที่นี่เซิร์ฟเวอร์ควรเป็นลูกค้าที่มีความเป็นไปได้ทั้งหมดที่ลูกค้าสามารถเลือกได้ ในช่วงไม่กี่ปีที่ผ่านมา GraphQL และ RestQL ได้รับการพัฒนาซึ่งแนะนำ SQL เช่นภาษาที่สามารถกำหนดเป้าหมายได้ที่จุดปลายที่แน่นอนเพื่อรับการตอบกลับที่ผ่านการกรอง อย่างไรก็ตามในความรู้สึกที่แท้จริงนี้เป็นการละเมิดแนวคิดเบื้องหลัง REST ในฐานะก) GraphQL คือใช้จุดปลายเดียวซึ่งป้องกันการใช้แคชอย่างเหมาะสมและข) ต้องการความรู้เกี่ยวกับเขตข้อมูลที่มีอยู่ซึ่งอาจนำไปสู่การมีเพศสัมพันธ์ของลูกค้า เป็นโมเดลข้อมูลพื้นฐานของทรัพยากร

การเปิดใช้งานหรือปิดใช้งานพารามิเตอร์การกำหนดค่าบางอย่างเป็นเพียงเรื่องของการกระตุ้นให้เกิดการควบคุมสื่อหลายมิติที่ให้ค่าใช้จ่ายนี้ ในรูปแบบ HTML นี้อาจเป็นช่องทำเครื่องหมายง่ายหรือการเลือกหลายบรรทัดในรายการหรือประเภทนั้น ขึ้นอยู่กับแบบฟอร์มและวิธีการที่กำหนดว่าจะสามารถส่งการกำหนดค่าทั้งหมดผ่านPUTหรือฉลาดเกี่ยวกับการเปลี่ยนแปลงที่ทำและทำการอัปเดตบางส่วนผ่านPATCHเท่านั้น อันหลังจำเป็นต้องมีเครื่องคิดเลขของการเป็นตัวแทนการเปลี่ยนแปลงกับสิ่งที่อัปเดตแล้วและฟีดเซิร์ฟเวอร์ด้วยขั้นตอนที่จำเป็นเพื่อเปลี่ยนการนำเสนอปัจจุบันเป็นสิ่งที่ต้องการ ตามข้อกำหนดของ PATHต้องทำภายในธุรกรรมเพื่อให้ขั้นตอนทั้งหมดหรือไม่ใช้เลย

HTTP อนุญาตและสนับสนุนให้เซิร์ฟเวอร์ตรวจสอบคำขอที่ได้รับล่วงหน้าก่อนที่จะใช้การเปลี่ยนแปลง สำหรับPUTสถานะ spec:

เซิร์ฟเวอร์ต้นทางควรตรวจสอบว่าการเป็นตัวแทน PUT สอดคล้องกับข้อ จำกัด ใด ๆ ที่เซิร์ฟเวอร์มีสำหรับทรัพยากรเป้าหมายที่ไม่สามารถหรือจะไม่สามารถเปลี่ยนแปลงได้โดย PUT สิ่งนี้มีความสำคัญอย่างยิ่งเมื่อเซิร์ฟเวอร์ต้นทางใช้ข้อมูลการกำหนดค่าภายในที่เกี่ยวข้องกับ URI เพื่อตั้งค่าสำหรับการแสดงข้อมูลเมตาบนการตอบกลับของ GET เมื่อการแสดง PUT ไม่สอดคล้องกับทรัพยากรเป้าหมายเซิร์ฟเวอร์ต้นทางควรทำให้สอดคล้องกันโดยการเปลี่ยนการนำเสนอหรือเปลี่ยนการกำหนดค่าทรัพยากรหรือตอบสนองด้วยข้อความแสดงข้อผิดพลาดที่เหมาะสมที่มีข้อมูลเพียงพอที่จะอธิบายว่าทำไมการแสดงไม่เหมาะสม แนะนำให้ใช้รหัสสถานะ 409 (ขัดแย้ง) หรือ 415 (ประเภทสื่อที่ไม่สนับสนุน)

ตัวอย่างเช่นหากทรัพยากรเป้าหมายมีการกำหนดค่าให้มีประเภทเนื้อหาของ "text / html" เสมอและการแสดง PUT มีประเภทเนื้อหาของ "image / jpeg" เซิร์ฟเวอร์ต้นทางควรดำเนินการอย่างใดอย่างหนึ่งต่อไปนี้:

กำหนดค่าทรัพยากรเป้าหมายใหม่เพื่อสะท้อนประเภทสื่อใหม่

ข เปลี่ยนการนำเสนอ PUT เป็นรูปแบบที่สอดคล้องกับทรัพยากรก่อนบันทึกเป็นสถานะทรัพยากรใหม่ หรือ,

ค. ปฏิเสธคำขอด้วยการตอบกลับ 415 (ชนิดสื่อที่ไม่สนับสนุน) ซึ่งระบุว่าทรัพยากรเป้าหมายถูก จำกัด ที่ "text / html" ซึ่งอาจรวมถึงลิงก์ไปยังทรัพยากรอื่นที่อาจเป็นเป้าหมายที่เหมาะสมสำหรับการเป็นตัวแทนใหม่

HTTP ไม่ได้กำหนดอย่างชัดเจนว่าวิธี PUT มีผลต่อสถานะของเซิร์ฟเวอร์ต้นทางอย่างไรนอกเหนือจากสิ่งที่สามารถแสดงได้โดยเจตนาของคำขอตัวแทนผู้ใช้และความหมายของการตอบกลับของเซิร์ฟเวอร์ต้นทาง ...

ในการหาผลรวมการโพสต์นี้คุณควรใช้ชนิดสื่อบันทึกที่มีอยู่ซึ่งอนุญาตให้คุณสอนลูกค้าเกี่ยวกับพารามิเตอร์อินพุตที่จำเป็นหรือได้รับการสนับสนุนตำแหน่งเป้าหมายที่จะส่งคำขอไปยังการดำเนินการที่จะใช้ ต้องจัดรูปแบบคำขอหรือกำหนดคำขอของคุณเองที่คุณลงทะเบียนกับ IANA หลังอาจจำเป็นถ้าคุณต้องการแปลงอินพุตtext/csvจากนั้นอัปโหลดการแสดง CSV ไปยังเซิร์ฟเวอร์ การตรวจสอบควรเกิดขึ้นก่อนที่การเปลี่ยนแปลงจะถูกนำไปใช้กับทรัพยากร URI ที่เกิดขึ้นจริงไม่ควรเกี่ยวข้องกับลูกค้าอื่นนอกจากเพื่อพิจารณาว่าจะส่งคำขอไปที่ใดและผู้ให้บริการดำเนินการนั้นสามารถเลือกได้โดยอิสระ เมื่อทำตามขั้นตอนเหล่านี้คุณจะมีอิสระในการเปลี่ยนฝั่งเซิร์ฟเวอร์ของคุณได้ตลอดเวลาและลูกค้าจะไม่หยุดพักหากพวกเขาสนับสนุนประเภทสื่อที่ใช้แล้ว


0

แก้ไข:แน่นอน URI จะป้องกันGETคำขอจาก idempotent ที่เหลืออยู่


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

รายงานกลับมาพร้อม400 Bad Requestรหัสสถานะหากข้อมูลที่ส่งไม่ถูกต้องและคำขอจะต้องเปลี่ยนแปลงก่อนที่จะส่งอีกครั้ง ( รหัสสถานะ HTTP / 1.1 )

สิ่งนี้ขึ้นอยู่กับการตรวจสอบความถูกต้อง ณ เวลาที่ส่งแม้ว่าจะชะลอการใช้งานในกรณีที่คุณใช้งาน คำตอบอื่น ๆ มีวิธีแก้ปัญหาที่เหมาะสมกับสถานการณ์นั้น


URI นั้นหมายถึงตัวระบุ การใช้ URL เฉพาะไม่ควรมีผลข้างเคียง ลองนึกภาพว่า proxy ทำอะไรกับสิ่งนั้น
Breton

2
หรือ google สำหรับเรื่องนั้น ฉันเคยอ่านเรื่องราวเกี่ยวกับเว็บสโตร์ที่ลบผลิตภัณฑ์ทั้งหมดโดย google เพราะความงี่เง่าแบบนี้
Breton

0

ในสภาพแวดล้อม REST แต่ละ URL เป็นทรัพยากรที่ไม่ซ้ำกัน ทรัพยากรของคุณคืออะไร? เครื่องคิดเลขการเงินไม่มีทรัพยากรที่ชัดเจนจริงๆ คุณต้องขุดลงไปในสิ่งที่คุณกำลังเรียกพารามิเตอร์และดึงทรัพยากรออกมา ตัวอย่างเช่นปฏิทินการตัดจำหน่ายสำหรับเงินกู้อาจเป็นทรัพยากร URL สำหรับปฏิทินอาจประกอบด้วยวันที่เริ่มต้น, คำ (เป็นเดือนหรือปี), ระยะเวลา (เมื่อรวมดอกเบี้ย), อัตราดอกเบี้ยและหลักการเริ่มต้น ด้วยค่าทั้งหมดเหล่านี้คุณมีปฏิทินการชำระเงินที่เฉพาะเจาะจง:

http://example.com/amort_cal/2009-10-20/30yrsfixed/monthly/5.00/200000

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


5
ฉันคิดว่ามันค่อนข้างโง่ที่จะใช้เครื่องหมายทับที่นี่สิ่งที่จะเกิดความผิดพลาดกับ disass_cal? date = 2009-10-20 & type = 30yrsfixed & period = month & rate = 5.0 & initialamount = 200000? ส่วนที่เหลือไม่สนใจตราบเท่าที่มันเป็นทรัพยากร สเป็ค URI นั้นใส่ใจ คุณคิดว่าลิงก์ที่เกี่ยวข้องทำงานกับโครงร่างเช่นนี้ได้อย่างไร
Breton

คุณนำมาซึ่งจุดที่ดีอย่างไรก็ตาม "พารามิเตอร์" เหล่านี้จำเป็นต้องเก็บไว้ที่เซิร์ฟเวอร์หรือไม่ หากเป็นการคำนวณเพียงครั้งเดียวทำไมไม่เพียงสร้างพื้นที่เสมือนโดยที่พารามิเตอร์อยู่ใน URL ตราบใดที่คุณไม่ได้เปลี่ยนสถานะภายในก็ควรจะดี
Breton

1
และ "พารามิเตอร์" ไม่ใช้กับ "ทรัพยากร" ทรัพยากรเป็นเอนทิตีเดียวที่มีตัวระบุเฉพาะ URL ของฉันระบุทรัพยากรเดียว URL ที่กำหนดพารามิเตอร์เป็นการระบุทรัพยากรที่คุณเลือกระหว่างการใช้พารามิเตอร์
jmucchiello

2
REST ไม่ได้ขึ้นอยู่กับ "ทรัพยากร CRUDing" การผสานพารามิเตอร์เคียวรีทั้งหมดของคุณลงในเซ็กเมนต์เส้นทางไม่ได้สร้างขึ้นโดยอัตโนมัติสำหรับอินเตอร์เฟส RESTful เพราะตอนนี้คุณคิดว่าคุณสามารถเรียกทรัพยากรที่เปลี่ยนแปลงทุกครั้ง น่าเสียดายที่ไม่มีกระบวนการเวทย์มนตร์ที่คุณสามารถใช้เพื่อระบุว่าทรัพยากรในระบบของคุณควรเป็นอย่างไร มันต้องมีการออกแบบอย่างระมัดระวังไม่ใช่สูตรเชิงกล
Darrel Miller

2
สถาปัตยกรรม REST ไม่สนใจสิ่งที่อยู่ใน URL อีกครั้ง URL จะหมายถึงการเป็นสีขาวขุ่น ไม่สำคัญว่าคุณจะใช้เครื่องหมายสแลชอัฒภาคหรือหัวใจยูนิโค้ดเป็นตัวคั่น อ่านสิ่งนี้และตอบคำถามนี้ - ไม่ใช่สิ่งที่คุณจินตนาการว่าฉันจะพูด
Breton
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.