คำถามติดแท็ก http

HyperText Transfer Protocol - ระบบที่เป็นข้อความสำหรับแสดงคำขอเว็บและตอบกลับ

3
เหตุใด HTTP จึงไม่เปลี่ยนเส้นทาง POST
การเปลี่ยนเส้นทาง HTTP ทำได้โดยใช้รหัส HTTP 301 และ 302 (อาจเป็นรหัสอื่น) และฟิลด์ส่วนหัวที่เรียกว่า "ตำแหน่ง" ซึ่งมีที่อยู่ของสถานที่ใหม่ที่จะไป อย่างไรก็ตามเบราว์เซอร์จะส่งคำขอ "GET" ไปยัง URL นั้นเสมอ อย่างไรก็ตามหลายครั้งคุณต้องเปลี่ยนเส้นทางผู้ใช้ของคุณไปยังโดเมนอื่นผ่านทาง POST (ตัวอย่างเช่นการชำระเงินธนาคาร) นี่เป็นสถานการณ์ทั่วไปและเป็นข้อกำหนดจริงๆ ไม่มีใครรู้ว่าทำไมความต้องการทั่วไปดังกล่าวจึงถูกเพิกเฉยในข้อกำหนด HTTP วิธีแก้ปัญหาคือการส่งแบบฟอร์ม (พร้อมพารามิเตอร์ในเขตข้อมูลที่ซ่อนอยู่) พร้อมชุดการดำเนินการไปยังตำแหน่งเป้าหมาย (ค่าของฟิลด์ส่วนหัวLocation ) และใช้setTimeoutเพื่อส่งแบบฟอร์มไปยังตำแหน่งเป้าหมาย

6
เหตุใดจึงไม่ควรขอข้อมูลการเปลี่ยนแปลง GET บนเซิร์ฟเวอร์
ทั่วอินเทอร์เน็ตฉันเห็นคำแนะนำต่อไปนี้: GET ไม่ควรเปลี่ยนแปลงข้อมูลบนเซิร์ฟเวอร์ - ใช้คำขอ POST สำหรับสิ่งนั้น พื้นฐานของความคิดนี้คืออะไร ถ้าฉันสร้างบริการ php ซึ่งแทรกข้อมูลในฐานข้อมูลและส่งผ่านพารามิเตอร์ในสตริงการสืบค้น GET ทำไมจึงเป็นเช่นนั้น (ฉันใช้คำสั่งที่เตรียมไว้เพื่อดูแล SQL Injection) คำขอ POST มีความปลอดภัยมากกว่าหรือไม่ หรือมีเหตุผลทางประวัติศาสตร์สำหรับเรื่องนี้? คำแนะนำนี้วันนี้มีความถูกต้องหรือไม่?
109 http  http-request 

8
รหัสสถานะ HTTP ใดที่จะส่งคืนหากการกระทำหลายอย่างเสร็จสิ้นด้วยสถานะที่แตกต่างกัน
ฉันกำลังสร้าง API ที่ผู้ใช้สามารถขอให้เซิร์ฟเวอร์ดำเนินการหลายอย่างในคำขอ HTTP เดียว ผลลัพธ์ถูกส่งคืนเป็นอาร์เรย์ JSON โดยมีหนึ่งรายการต่อการดำเนินการ แต่ละการกระทำเหล่านี้อาจล้มเหลวหรือประสบความสำเร็จอย่างเป็นอิสระจากกัน ตัวอย่างเช่นการกระทำแรกอาจสำเร็จการป้อนข้อมูลไปยังการดำเนินการที่สองอาจมีรูปแบบไม่ดีและไม่สามารถตรวจสอบได้และการกระทำที่สามอาจทำให้เกิดข้อผิดพลาดที่ไม่คาดคิด หากมีหนึ่งคำขอต่อการกระทำฉันจะส่งคืนรหัสสถานะ 200, 422 และ 500 ตามลำดับ แต่ตอนนี้เมื่อมีคำขอเพียงครั้งเดียวฉันควรส่งรหัสสถานะใด ตัวเลือกบางอย่าง: ส่งคืน 200 เสมอและให้ข้อมูลรายละเอียดเพิ่มเติมในร่างกาย อาจปฏิบัติตามกฎข้างต้นเฉพาะเมื่อมีมากกว่าหนึ่งการกระทำในคำขอ? อาจส่งคืน 200 หากคำขอทั้งหมดสำเร็จมิฉะนั้น 500 (หรือรหัสอื่น) เพียงใช้หนึ่งคำขอต่อการกระทำและยอมรับค่าใช้จ่ายเพิ่มเติม มีอะไรที่แตกต่างไปจากเดิมอย่างสิ้นเชิง?
72 api  http 

5
HATEOAS เสนออะไรให้ค้นพบและแยกส่วนนอกเหนือจากความสามารถในการเปลี่ยนโครงสร้าง URL ของคุณอย่างอิสระมากขึ้นหรือน้อยลง
เมื่อเร็ว ๆ นี้ฉันได้อ่านเกี่ยวกับ Hypermedia ว่าเป็น Engine of Application State (HATEOAS) ซึ่งเป็นข้อ จำกัด ที่อ้างว่าทำให้ API ของเว็บ "สงบ" อย่างแท้จริง โดยทั่วไปแล้วจะรวมถึงลิงก์ที่มีการตอบสนองต่อการเปลี่ยนแปลงที่เป็นไปได้ทั้งหมดที่คุณสามารถทำได้จากสถานะปัจจุบัน ให้ฉันอธิบายสิ่งที่ HATEOAS ตั้งอยู่บนความเข้าใจของฉัน - และโปรดแก้ไขให้ถูกต้องหากฉันพลาดอะไรไป / GET: { "_links": { "child": [ { "href": "http://myapi.com/articles", "title": "articles" } ] } } /articles?contains=HATEOAS GET: { "_items": [ { "uri": "http://myapi.com/articles/0", "title": "Why Should …
61 rest  http  hateoas 

3
สแลชต่อท้ายใน RESTful API
ฉันได้มีการถกเถียงกันว่าจะทำอย่างไรกับการต่อท้ายสแลชใน RESTful API ให้บอกว่าฉันมีทรัพยากรที่เรียกว่าสุนัขและทรัพยากรรองสำหรับสุนัขแต่ละตัว ดังนั้นเราสามารถทำสิ่งต่อไปนี้: GET/PUT/POST/DELETE http://example.com/dogs GET/PUT/POST/DELETE http://example.com/dogs/{id} แต่เราจะทำอย่างไรกับกรณีพิเศษต่อไปนี้: GET/PUT/POST/DELETE http://example.com/dogs/ มุมมองส่วนตัวของฉันคือว่าเรื่องนี้ไม่ว่าจะเป็นส่งคำขอไปเป็นทรัพยากรบุคคลที่มีสุนัข id null= ฉันคิดว่า API ควรส่งคืน 404 สำหรับกรณีนี้ บางคนบอกว่าคำขอกำลังเข้าถึงทรัพยากรสุนัขนั่นก็คือละเว้นการต่อท้ายสแลชจะถูกละเว้น ไม่มีใครรู้คำตอบที่ชัดเจน?
60 api  rest  http 

8
จะใช้รหัสสถานะ HTTP 404 ใน API เมื่อใด
ฉันทำงานในโครงการและหลังจากโต้เถียงกับคนที่ทำงานเป็นเวลานานกว่าหนึ่งชั่วโมง ฉันตัดสินใจที่จะรู้ว่าคนในการแลกเปลี่ยนสแต็คอาจพูดอะไร เรากำลังเขียน API สำหรับระบบมีแบบสอบถามที่ควรส่งทรีขององค์กรหรือต้นไม้เป้าหมาย โครงสร้างขององค์กรเป็นองค์กรที่มีผู้ใช้อยู่กล่าวอีกนัยหนึ่งต้นไม้นี้ควรมีอยู่เสมอ ในองค์กรต้นไม้แห่งเป้าหมายควรมีอยู่เสมอ (นั่นคือจุดเริ่มต้นของการโต้แย้ง) ในกรณีที่ไม่มีต้นไม้เพื่อนร่วมงานของฉันตัดสินใจว่ามันจะถูกต้องที่จะตอบการตอบกลับด้วยรหัสสถานะ 200 จากนั้นก็เริ่มขอให้ฉันแก้ไขรหัสของฉันเพราะแอปพลิเคชันล้มลงเมื่อไม่มีต้นไม้ ฉันจะพยายามทำให้เปลวไฟและความโกรธเคืองน้อยลง ฉันแนะนำให้เพิ่มข้อผิดพลาด 404 เมื่อไม่มีต้นไม้ อย่างน้อยก็ให้ฉันรู้ว่ามีบางอย่างผิดปกติ เมื่อใช้ 200 ฉันต้องเพิ่มการตรวจสอบพิเศษในการตอบกลับของฉันในการติดต่อกลับสำเร็จเพื่อจัดการข้อผิดพลาด ฉันคาดหวังว่าจะได้รับวัตถุ แต่จริง ๆ แล้วฉันอาจได้รับการตอบสนองที่ว่างเปล่าเพราะไม่พบอะไรเลย มันฟังดูยุติธรรมมากที่จะทำเครื่องหมายการตอบรับเป็น 404 และจากนั้นสงครามก็เริ่มขึ้นและฉันได้รับข้อความว่าฉันไม่เข้าใจสกีมาโค้ดสถานะ HTTP ดังนั้นฉันมาที่นี่แล้วถามว่าเกิดอะไรขึ้นกับ 404 ในกรณีนี้ ฉันยังได้ข้อโต้แย้งว่า " ไม่พบอะไรเลยดังนั้นจึงถูกต้องที่จะคืน 200" ฉันเชื่อว่ามันผิดเพราะต้นไม้ควรมีอยู่เสมอ หากเราไม่พบอะไรและเราคาดหวังบางสิ่งมันควรจะเป็น 404 ข้อมูลเพิ่มเติม, ฉันลืมที่จะเพิ่ม URL ที่ดึงมา องค์กร /OrgTree/Get เป้าหมาย /GoalTree/GetByDate?versionDate=... /GoalTree/GetById?versionId=... ความผิดพลาดของฉันจำเป็นต้องใช้ทั้งพารามิเตอร์ หาก versionDate ใด …

5
ฉันควรส่งคืนสถานะ HTTP 400 (คำขอไม่ถูกต้อง) หากพารามิเตอร์ถูกต้องทางไวยากรณ์ แต่ละเมิดกฎทางธุรกิจหรือไม่
บอกว่าฉันมีปลายทาง REST ที่ใช้จำนวนเต็มเป็นพารามิเตอร์: /makeWaffles?numberOfWaffles=3 ในกรณีนี้ฉันต้องการให้ตัวเลขเป็นบวกเพราะฉันไม่สามารถลบจำนวนวาฟเฟิลได้ (และการขอ 0 วาฟเฟิลเป็นการเสียเวลา) ดังนั้นฉันต้องการปฏิเสธคำขอใด ๆ ที่ไม่มีจำนวนเต็มบวก ฉันต้องการปฏิเสธคำขอที่มีจำนวนเต็มที่เกินจำนวนสูงสุด (สมมติว่าเป็น MAX_INTEGER) ในกรณีที่มีคนขอวาฟเฟิลในจำนวนที่ไม่เป็นบวกฉันควรส่งคืนสถานะ HTTP 400 (คำขอไม่ถูกต้อง) หรือไม่ ความคิดเริ่มต้นของฉันคือใช่: ไม่ใช่หมายเลขที่ถูกต้องสำหรับฉันที่จะทำตามคำขอ อย่างไรก็ตามRFCไม่ได้กล่าวถึงกฎเกณฑ์ทางธุรกิจว่าเป็นเหตุผลในการ: รหัสสถานะ 400 (คำขอไม่ถูกต้อง) บ่งชี้ว่าเซิร์ฟเวอร์ไม่สามารถหรือไม่สามารถประมวลผลคำขอเนื่องจากสิ่งที่ถูกมองว่าเป็นข้อผิดพลาดของลูกค้า (เช่นไวยากรณ์คำขอที่ผิดรูปแบบ, กรอบข้อความคำขอที่ไม่ถูกต้องหรือการกำหนดเส้นทางคำขอหลอกลวง) กฎทางธุรกิจไม่ได้อยู่ภายใต้ตัวอย่างใด ๆ มันถูกต้องทางไวยากรณ์มีการวางกรอบอย่างเหมาะสมและไม่ได้กำหนดเส้นทางคำขอที่หลอกลวง ดังนั้นฉันควรคืนสถานะ HTTP 400 (คำขอไม่ถูกต้อง) หากพารามิเตอร์ถูกต้องทางไวยากรณ์ แต่ละเมิดกฎทางธุรกิจหรือไม่ หรือมีสถานะที่เหมาะสมกว่าที่จะกลับมา?
56 api-design  http 

3
ฉันควรใช้รหัสสถานะ HTTP เพื่ออธิบายเหตุการณ์ระดับแอปพลิเคชัน
เซิร์ฟเวอร์จำนวนมากที่ฉันจัดการจะส่งคืน HTTP 200 สำหรับคำขอที่ลูกค้าควรพิจารณาถึงความล้มเหลวโดยมี 'ความสำเร็จ: เท็จ' ในเนื้อความ ดูเหมือนว่าฉันจะใช้รหัส HTTP ไม่ถูกต้องกับฉันโดยเฉพาะในกรณีของการตรวจสอบสิทธิ์ที่ล้มเหลว ฉันได้อ่านรหัสข้อผิดพลาด HTTP โดยสังเขปแล้วสรุปว่า '4xx' บ่งชี้ว่าไม่ควรทำคำขออีกครั้งจนกว่าจะมีการเปลี่ยนแปลงในขณะที่ '5xx' แสดงว่าคำขอนั้นอาจจะใช้งานได้หรืออาจไม่ถูกต้อง แต่ก็ไม่สำเร็จ ในกรณีนี้ 200: การเข้าสู่ระบบล้มเหลวหรือ 200: ไม่พบไฟล์นั้นหรือ 200: พารามิเตอร์ที่หายไป x ดูเหมือนผิดปกติ ในทางกลับกันฉันเห็นการโต้แย้งว่า '4xx' ควรระบุปัญหาเชิงโครงสร้างของคำขอเท่านั้น ดังนั้นจึงเหมาะสมที่จะส่งคืน 200: ผู้ใช้ / รหัสผ่านไม่ดีแทนที่จะได้รับอนุญาต 401 เนื่องจากลูกค้าได้รับอนุญาตให้ทำการร้องขอ แต่มันเกิดขึ้นไม่ถูกต้อง อาร์กิวเมนต์นี้สามารถสรุปได้ว่าหากเซิร์ฟเวอร์สามารถประมวลผลคำขอและตัดสินใจได้ทั้งหมดรหัสการตอบสนองควรเป็น 200 และขึ้นอยู่กับลูกค้าที่จะตรวจสอบเนื้อหาสำหรับข้อมูลเพิ่มเติม โดยทั่วไปดูเหมือนว่าจะเป็นเรื่องของการตั้งค่า แต่นั่นไม่น่าพอใจดังนั้นถ้าใครมีเหตุผลว่าทำไมหนึ่งในกระบวนทัศน์เหล่านี้ถูกต้องมากขึ้นฉันอยากจะรู้

10
รหัสสถานะ http สำหรับข้อผิดพลาด“ บริการไม่พร้อมให้บริการในพื้นที่ของคุณ” ควรเป็นอย่างไร
บริการของเราอยู่ใน 5 เมืองในขณะนี้ หากมีคนพยายามโทรหา API บริการของเราจากเมืองอื่นเราต้องการส่งข้อผิดพลาดService not available in your areaนี้ คำถามคือรหัส http ที่เหมาะสมสำหรับข้อผิดพลาดนี้คืออะไร? 503: บริการไม่พร้อมใช้งาน 403: ถูกห้าม หรืออย่างอื่น?
51 api  api-design  http 

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

3
ทำไม PATCH ถึงไม่เป็น idempotent?
ฉันสงสัยเกี่ยวกับเรื่องนี้ สมมติว่าฉันมีuserทรัพยากรด้วยidและnameสาขา ถ้าฉันต้องการอัปเดตฟิลด์ฉันสามารถทำคำขอแพทช์กับทรัพยากรเช่นนี้ได้ PATCH /users/42 {"name": "john doe"} จากนั้นแอปพลิเคชันจะอัปเดตชื่อผู้ใช้ 42 แต่ทำไมถ้าฉันทำซ้ำคำขอนี้ผลลัพธ์จะแตกต่างกันอย่างไร อ้างอิงจากRFC 5789 PATCH นั้นไม่ปลอดภัยหรือ idempotent

4
รหัสสถานะ HTTP สำหรับ“ การประมวลผลยังคง”
ฉันกำลังสร้าง RESTful API ที่รองรับการจัดคิวงานระยะยาวเพื่อการจัดการในที่สุด เวิร์กโฟลว์ทั่วไปสำหรับ API นี้จะเป็น: ผู้ใช้กรอกข้อมูลในแบบฟอร์ม ลูกค้าโพสต์ข้อมูลไปยัง API API ส่งคืนยอมรับ 202 ลูกค้าเปลี่ยนเส้นทางผู้ใช้ไปยัง URL ที่ไม่ซ้ำกันสำหรับคำขอนั้น ( /results/{request_id}) ~ ~ ในที่สุด URL ที่ลูกค้าเยี่ยมชมอีกครั้งและเห็นผลลัพธ์ในหน้านั้น ปัญหาของฉันอยู่ในขั้นตอนที่ 6 ทุกครั้งที่ผู้ใช้เยี่ยมชมหน้าเว็บฉันจะส่งคำขอไปยัง API ของฉัน ( GET /api/results/{request_id}) เป็นการดีที่งานจะเสร็จสมบูรณ์ในขณะนี้และฉันจะส่งคืน 200 OK พร้อมผลลัพธ์ของงานของพวกเขา แต่ผู้ใช้มีความเร่งรีบและฉันคาดหวังว่าการรีเฟรชมากเกินไปเมื่อผลลัพธ์ยังไม่เสร็จสิ้นการประมวลผล ตัวเลือกที่ดีที่สุดของฉันสำหรับรหัสสถานะคืออะไร: คำขอนี้มีอยู่ มันยังไม่เสร็จ แต่มันก็ไม่ได้ล้มเหลว ฉันไม่ได้คาดหวังว่าจะมีรหัสเดียวในการสื่อสารทั้งหมด แต่ฉันต้องการสิ่งที่ให้ฉันส่งเมทาดาทาแทนที่จะให้ลูกค้าคาดหวังเนื้อหา มันสมเหตุสมผลแล้วที่จะส่งคืนค่า 202 เนื่องจากไม่มีความหมายอื่นที่นี่: เป็นGETคำขอดังนั้นจึงไม่มีสิ่งใดที่จะเป็น "ยอมรับ" นั่นจะเป็นตัวเลือกที่สมเหตุสมผลหรือไม่ ทางเลือกที่ชัดเจนสำหรับสิ่งนี้ทั้งหมด - …
47 rest  http 

2
REST API ควรจัดการคำขอ PUT กับทรัพยากรที่สามารถแก้ไขได้บางส่วนได้อย่างไร
สมมติว่า REST API ตอบกลับGETคำขอHTTP ส่งคืนข้อมูลเพิ่มเติมบางอย่างในวัตถุย่อยowner: { id: 'xyz', ... some other data ... owner: { name: 'Jo Bloggs', role: 'Programmer' } } เห็นได้ชัดว่าเราไม่ต้องการให้ใครPUTกลับมา { id: 'xyz', ... some other data ... owner: { name: 'Jo Bloggs', role: 'CEO' } } และประสบความสำเร็จ อันที่จริงเราอาจไม่ได้ใช้วิธีการที่อาจประสบความสำเร็จในกรณีนี้ แต่คำถามนี้ไม่เพียงเกี่ยวกับวัตถุย่อย: โดยทั่วไปแล้วจะทำอย่างไรกับข้อมูลที่ไม่ควรแก้ไขได้ในคำขอ PUT มันควรจะต้องหายไปจากคำขอ PUT หรือไม่ มันควรจะถูกทิ้งอย่างเงียบ ๆ …

2
รหัสสถานะ HTTP REST ที่แนะนำสำหรับ 'ถึงขีด จำกัด การร้องขอ'
ฉันกำลังรวบรวมข้อมูลจำเพาะสำหรับบริการ REST ซึ่งเป็นส่วนหนึ่งที่จะรวมความสามารถในการเร่งความเร็วให้กับผู้ใช้ทั้งในกลุ่มและรายบุคคล เท่ากันหมดเวลาสำหรับสิ่งเหล่านี้จะสามารถกำหนดค่าต่อทรัพยากร / กลุ่ม / บริการ ฉันแค่ดูข้อมูลจำเพาะ HTTP 1.1 และพยายามตัดสินใจว่าจะสื่อสารกับลูกค้าอย่างไรว่าคำขอจะไม่ได้รับการตอบสนองเพราะพวกเขาถึงขีด จำกัด แล้ว ตอนแรกฉันคิดว่ารหัสลูกค้า403 - Forbiddenเป็นรหัสแต่จากสเป็ค: การอนุญาตจะไม่ช่วยและไม่ควรทำซ้ำการร้องขอ รบกวนฉัน ปรากฏขึ้นจริงว่า503 - Service Unavailableเป็นสิ่งที่ดีกว่าที่จะใช้ - เพราะมันช่วยให้การสื่อสารของเวลาลองผ่านการใช้Retry-Afterส่วนหัว เป็นไปได้ว่าในอนาคตฉันอาจมองหาการสนับสนุน 'ซื้อ' คำขอเพิ่มเติมผ่านทางอีคอมเมิร์ซ (ในกรณีนี้มันจะดีถ้ารหัสลูกค้า402 - Payment Requiredได้รับการสรุป!) - แต่ฉันคิดว่านี่อาจถูกบีบให้เป็นการตอบสนอง 503 เช่นกัน คุณคิดว่าฉันควรใช้อันไหน หรือมีอีกอย่างที่ฉันไม่ได้พิจารณา?

4
REST - แลกเปลี่ยนระหว่างการเจรจาต่อรองเนื้อหาผ่านส่วนหัวยอมรับกับส่วนขยาย
ฉันกำลังทำงานผ่านการออกแบบ RESTful API เรารู้ว่าเราต้องการส่งคืน JSON และ XML สำหรับทรัพยากรที่กำหนด ฉันคิดว่าเราจะทำสิ่งนี้: GET /api/something?param1=value1 Accept: application/xml (or application/json) อย่างไรก็ตามมีบางคนที่ใช้ส่วนขยายสำหรับสิ่งนี้เช่น: GET /api/something.xml?parm1=value1 (or /api/something.json?param1=value1) อะไรคือการแลกเปลี่ยนกับวิธีการเหล่านี้? เป็นการดีที่สุดที่จะพึ่งพาส่วนหัวการยอมรับเมื่อไม่ได้ระบุนามสกุล แต่ให้เกียรตินามสกุลเมื่อระบุ? มีข้อเสียเปรียบกับวิธีการนั้นหรือไม่?

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.