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

Representational state transfer หรือ REST เป็นรูปแบบสถาปัตยกรรมสำหรับซอฟต์แวร์ระบบเครือข่ายเพื่อถ่ายโอนข้อมูลผ่านเว็บ

3
การส่งโทเค็นการเข้าถึงผ่านทางส่วนหัว HTTP มีความปลอดภัยหรือไม่
นี่เป็นบริการเว็บสงบเป็นครั้งแรกและฉันกังวลเกี่ยวกับปัญหาด้านความปลอดภัย การส่งโทเค็นการเข้าถึงของฉันผ่านส่วนหัว HTTP ปลอดภัยหรือไม่ ตัวอย่างเช่น: POST /v1/i/resource HTTP/1.1 Content-Type: application/x-www-form-urlencoded Api-key: 5cac3297f0d9f46e1gh3k83881ba0980215cd71e Access_token: 080ab6bd49b138594ac9647dc929122adfb983c8 parameter1=foo&parameter2=bar SSLการเชื่อมต่อทำมากกว่า นอกจากนี้สิ่งที่จะต้องมีการกำหนดเป็นscopeคุณลักษณะสำหรับทุกคนaccess token

1
REST API กฎเกี่ยวกับการทันเนล
แค่อ่านนี้ในREST API กฎหมาย : GET และ POST จะต้องไม่ถูกนำมาใช้เพื่ออุโมงค์วิธีคำขออื่น Tunneling หมายถึงการใช้ HTTP ในทางที่ผิดหรือปิดบังเจตนาของข้อความผิด ๆ และทำลายความโปร่งใสของโปรโตคอล ส่วนที่เหลือ API ต้องไม่ประนีประนอมการออกแบบโดยวัตถุประสงค์ของ HTTP วิธีการร้องขอในความพยายามไปสู่การรองรับลูกค้าที่มี จำกัด HTTP คำศัพท์ ใช้วิธีการ HTTP อย่างเหมาะสมตามกฎที่ระบุไว้ในส่วนนี้เสมอ [ไฮไลท์โดยฉัน] แต่แล้วจำนวนมากของกรอบการใช้อุโมงค์เพื่อแสดงการเชื่อมต่อผ่านทาง REST รูปแบบ HTML, ตั้งแต่<form>เท่านั้นที่รู้เกี่ยวกับและGET POSTตัวอย่างล่าสุดของฉันเป็นMethodRewriteMiddlewareสำหรับขวด (ส่งโดยผู้เขียนของกรอบ): http://flask.pocoo.org/snippets/38/ มีวิธีใดบ้างที่จะปฏิบัติตาม "กฎ" โดยไม่มีแฮ็กหรือส่วนเสริมในเว็บเฟรมเวิร์ก
11 api  rest  web-framework  http 

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

3
วิธีการใช้ RESTful API ภายนอกด้วย Symfony
เรากำลังสร้างสถาปัตยกรรม Microservice สำหรับโครงการของเราโดยส่วนใหญ่แล้วแอพพลิเคชั่นส่วนหน้าของ Symfony จะโต้ตอบกับ RESTful APIs ส่วนหลัง ปัญหาคือวิธีนี้กำลังทำลายการจัดการเอนทิตี้ของ Symfony ที่อาศัยหลักคำสอนกับฐานข้อมูลเป็นอย่างมาก โดยที่ Symfony มักจะจัดการเอนทิตีกับ Doctrine โดยอัตโนมัติงานส่วนใหญ่สิ่งนี้ไม่สามารถทำซ้ำได้ง่ายเมื่อเราต้องเข้าถึงข้อมูลภายนอกจาก API ตัวอย่างเช่นกับเอนทิตีของลูกค้า: ด้วยการใช้ Doctrine เราต้องกำหนดคลาสลูกค้าของเราและตอนนี้มันเป็นเรื่องง่ายที่จะสร้างปรับปรุงเรียกลูกค้าของเรา การใช้วิธี REST API ลูกค้าสามารถเข้าถึงได้ผ่าน API แต่เรามีงานจำนวนมากเพื่อกำหนดวิธีสร้างไคลเอ็นต์ (POST), อัปเดต (PUT), ดึง (GET) ฯลฯ เพื่อให้ลูกค้าสังเกตเห็นมีการใช้งานโดยแอปพลิเคชั่นหลายแห่งไม่เพียง แต่แอพพลิเคชั่นส่วนหน้าเท่านั้นดังนั้นจึงเป็น API เฉพาะ เราควรสร้างคลาสที่มีวิธีคล้ายเอนทิตีที่ซ่อนความซับซ้อนในการเรียก API การนำเข้าข้อมูล API ทั้งหมดในพื้นที่และเข้าถึงพวกเขาผ่าน Doctrine หรือวิธีอื่นใด?

3
มีกลยุทธ์ในการค้นหาบริการ REST โดยใช้ HATEOAS หรือไม่
เมื่อสร้างบริการ REST ด้วยข้อ จำกัดHATEOASมันง่ายมากที่จะโฆษณาการมีอยู่ของทรัพยากรผ่านการเชื่อมโยง คุณทำGETถึงรูทของเว็บไซต์ของฉันและฉันตอบกลับด้วยเอกสารรูทที่แสดงรายการทรัพยากรระดับแรกทั้งหมด: { users: { href: "/users" } questions { href: "/questions" } } ลูกค้าที่เข้าใจวิธีการอ่านhrefค่าเหล่านี้สามารถดำเนินการGETตามคำขอและค้นหาทรัพยากรปัจจุบันทั้งหมดที่มีอยู่ในแอปพลิเคชัน สิ่งนี้ทำงานได้ดีสำหรับสถานการณ์การค้นหาขั้นพื้นฐาน แต่ไม่ได้ระบุว่าทรัพยากรสามารถสืบค้นได้หรือไม่ ตัวอย่างเช่นอาจมีเหตุผลที่จะดำเนินการ: GET /users?surname=Smith มีรูปแบบใดบ้างที่สามารถแสดงความสามารถในการสืบค้นด้วยข้อมูลที่เพียงพอที่ลูกค้าสามารถสร้างแบบสอบถามแบบเชื่อมโยงกันโดยไม่จำเป็นต้องมีความรู้มาก่อนเกี่ยวกับทรัพยากรหรือไม่ นอกจากนี้ยังมีวิธีที่จะแสดงว่าลูกค้าได้รับอนุญาตให้ดำเนินการPOSTไปยังสถานที่ที่กำหนดพร้อมกับสถานที่ที่คาดหวัง ตัวอย่างเช่นอาจเป็นไปได้ว่าลูกค้าจะทำสิ่งต่อไปนี้เพื่อสร้างทรัพยากรคำถามใหม่: POST /questions { title: "Are there strategies for discovering REST services using HATEOAS?", body: "When building a REST service with the HATEOAS constraint, it's …
10 design  rest  hateoas 

5
แนวคิด REST API
ฉันมีคำถามสามข้อเกี่ยวกับการออกแบบ REST API ที่ฉันหวังว่าบางคนสามารถทำให้เข้าใจได้ ฉันค้นหาอย่างไม่ลดละเป็นเวลาหลายชั่วโมง แต่ไม่พบคำตอบสำหรับคำถามของฉันที่ใดก็ได้ (บางทีฉันอาจไม่รู้ว่าต้องค้นหาอะไร) คำถามที่ 1 คำถามแรกของฉันเกี่ยวกับการกระทำ / RPC ฉันพัฒนา REST API มาระยะหนึ่งแล้วและฉันเคยคิดถึงสิ่งต่าง ๆ ในแง่ของการรวบรวมและทรัพยากร อย่างไรก็ตามฉันได้เจอสองสามกรณีที่กระบวนทัศน์ไม่ได้นำไปใช้และฉันสงสัยว่ามีวิธีที่จะกระทบยอดกับกระบวนทัศน์ REST หรือไม่ โดยเฉพาะฉันมีกรณีที่การแก้ไขทรัพยากรทำให้อีเมลถูกสร้างขึ้น อย่างไรก็ตามในภายหลังผู้ใช้สามารถระบุได้โดยเฉพาะว่าพวกเขาต้องการส่งอีเมลที่ถูกส่งไปก่อนหน้านี้อีกครั้ง เมื่อส่งอีเมลอีกครั้งจะไม่มีการแก้ไขทรัพยากร ไม่มีการเปลี่ยนแปลงสถานะ มันเป็นการกระทำที่ต้องเกิดขึ้น การดำเนินการจะเชื่อมโยงกับประเภททรัพยากรเฉพาะ เหมาะสมไหมที่จะรวมการเรียกการดำเนินการบางอย่างกับ URI ทรัพยากร (เช่น/collection/123?action=resendEmail)? จะเป็นการดีกว่าถ้าระบุการกระทำและส่งรหัสทรัพยากรให้ (เช่น/collection/resendEmail?id=123) นี่เป็นวิธีที่ผิดที่จะเกิดขึ้นหรือไม่? ตามเนื้อผ้า (อย่างน้อยด้วย HTTP) การดำเนินการที่ดำเนินการอยู่เป็นวิธีการร้องขอ (GET, POST, PUT, DELETE) แต่สิ่งเหล่านั้นไม่อนุญาตให้มีการกระทำที่กำหนดเองกับทรัพยากร คำถามที่ 2 ฉันใช้ส่วนการสอบถามของ URL เพื่อกรองชุดของทรัพยากรที่ส่งคืนเมื่อทำการสืบค้นคอลเลกชัน (เช่น/collection?someField=someval) ภายในตัวควบคุม …
10 api  rest 

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

6
ทดสอบไคลเอ็นต์ REST กับเซิร์ฟเวอร์ REST ติดตั้งอย่างไร?
เมื่อเขียนการทดสอบหน่วยเป็นเรื่องปกติที่จะใช้อุปกรณ์ติดตั้ง: ข้อมูลที่ทดสอบได้เพียงเล็กน้อยดังนั้นเราจึงสามารถพูดได้: 1. รับลูกค้าทั้งหมดควรรวม Willy Wonka 2. ลบไคลเอนต์ 3 และตอนนี้รับไคลเอนต์ไม่ควรรวมวิลลี่วองก้าอีกต่อไป ไม่เป็นไรสำหรับการทดสอบหน่วย ใช้การตั้งค่า / การลดระดับเพื่อโหลดการแข่งขันอีกครั้งหรือย้อนกลับการทำธุรกรรม ดังนั้นการทดสอบสร้างปรับปรุงและลบจะทำภายในการทำธุรกรรม ข้อมูลชั่วคราวใหม่มีจำนวน จำกัด ตามความยาวของการทดสอบนั้นจะถูกรีเซ็ต แต่จะเกิดอะไรขึ้นเมื่อเราแยกเซิร์ฟเวอร์ REST ออกจากไคลเอนต์ REST เราต้องการตรวจสอบให้แน่ใจว่าลูกค้า REST ของเราไม่เพียง แต่อ่านอย่างถูกต้อง แต่สร้างอัปเดตและลบอย่างถูกต้อง ฉันไม่สามารถค้นหาตัวอย่างหรือคำแนะนำสำหรับวิธีการนี้กับเซิร์ฟเวอร์ REST ทดสอบระยะไกล สมมติว่าฉันได้ทดสอบเซิร์ฟเวอร์ REST ที่ให้บริการติดตั้งเท่านั้น ลักษณะไร้สัญชาติทั้งหมดของ HTTP หมายความว่าเป็นการยากที่จะส่ง "BEGIN TRANSACTION" และ "ROLLBACK TRANSACTION" หรือ "RELOAD FIXTURES" ประเภทข้อความใช่ไหม ฉันไม่สามารถเป็นคนแรกที่ต้องการทำสิ่งนี้ดังนั้นฉันจึงรู้สึกว่าฉันต้องการวิธีคิดที่แตกต่างออกไป ข้อเสนอแนะใด ๆ
10 unit-testing  api  rest 

7
นี่คือ "รูปแบบต่อต้าน" และฉันควรหยุดใช้หรือออกแบบที่ฉลาดนี้หรือไม่?
ฉันมักจะทำต่อไปนี้เมื่อสร้างบริการ REST: มีการร้องขอ HTML บริการส่งคืนหน้าเว็บที่ต้องการ แต่ไม่มี "ทรัพยากร" ที่ร้องขอเช่น ข้อมูล หน้าเว็บมี JavaScript ที่ออกคำขอ AJAX ไปยังบริการเดียวกัน (ประเภทเนื้อหาที่แตกต่างกัน) บริการจะส่งคืนข้อมูลจริง (JSON) และหน้าแสดงข้อมูลนั้น ในอีกด้านหนึ่งดูเหมือนว่าไม่มีประสิทธิภาพ (2 คำขอ) แต่หลังจากนั้นฉันก็ใช้สิ่งนี้ "ประสิทธิภาพการทำงานไม่มีความกังวล" หมายถึงแอพภายในที่มีปริมาณการใช้งานต่ำและเว็บไซต์ง่ายและโหลดเร็ว เหตุผลที่ฉันลงเอยด้วยเหตุผลนี้ก็คือหน้าเว็บนั้นเกือบจะบริสุทธิ์ Html + JavaScript และแทบจะไม่จำเป็นต้องมีสิ่งที่ฝั่งเซิร์ฟเวอร์โดยเฉพาะอย่างยิ่งไม่มีการวนซ้ำเพื่อสร้างตารางและสิ่งต่าง ๆ เช่นนั้น (ซึ่งฉันคิดว่าน่าเกลียดมาก เช่น slickgrid) เช่นการแยกข้อมูลและมุมมอง ตอนนี้ก่อนที่ฉันจะใช้สิ่งนี้เป็นความคิดที่ดีหรือฉันควรหยุดทำหรือไม่

2
มันเหมาะสมสำหรับทรัพยากร REST ที่จะเป็นเอกพจน์และพหูพจน์หรือไม่?
ฉันสงสัยว่า, มากกว่าเลย์เอาต์แบบเดิม ๆ มากกว่านี้: api/Products GET // gets product(s) by id PUT // updates product(s) by id DELETE // deletes (product(s) by id POST // creates product(s) มันจะมีประโยชน์มากกว่าไหมถ้ามีเอกพจน์และพหูพจน์เช่น: api/Product GET // gets a product by id PUT // updates a product by id DELETE // deletes a product by id …
10 rest 

2
รหัสสถานะการตอบกลับที่เหมาะสมคือ POST เมื่อไม่พบทรัพยากรหลัก
ฉันมีจุดสิ้นสุดดังต่อไปนี้: a/{id}/b และต้องการสร้างbพร้อมกับส่งPOSTคำขอไปยังมัน ถ้าaมีให้{id}ไม่ได้พบว่าผมควรจะตอบสนองด้วย404 NOT_FOUNDหรืออาจจะมี409 CONFLICT? มันคือการจัดการธรรมดาa/{id}เคล็ดลับคือที่นี่มีการใช้แหล่งข้อมูลย่อย

2
REST API สามารถส่งคืนทรัพยากรจำนวนมากเป็นทรัพยากรทรัพยากรเดียวได้หรือไม่
ฉันอยู่ระหว่างดำเนินการสร้าง REST API และขณะนี้ฉันกำลังประสบปัญหาดังต่อไปนี้: Fooเป็นทรัพยากรแรก การดำเนินการ CRUD สามารถนำไปใช้ผ่าน/foo/URI Barเป็นทรัพยากรที่สอง การดำเนินการ CRUD สามารถนำไปใช้ผ่าน/bar/URI ทุกคนมีความเกี่ยวข้องกับศูนย์หรือหนึ่งFoo Barเหตุผลที่ฉันไม่ถือว่าBarเป็นแหล่งข้อมูลย่อยของFooคือเนื่องจากBarอินสแตนซ์เดียวกันสามารถใช้ร่วมกันระหว่าง mutiple Foos ดังนั้นผมจึงคิดว่ามันจะดีกว่าที่จะเข้าถึงได้ผ่านทางเป็นอิสระ URI /foo/[id]/barแทน ปัญหาของฉันคือในกรณีจำนวนมากลูกค้าที่ขอFooอินสแตนซ์ก็สนใจBarอินสแตนซ์ที่เกี่ยวข้องเช่นกัน ขณะนี้หมายความว่าพวกเขาจะต้องดำเนินการสองแบบสอบถามแทนหนึ่งแบบสอบถาม ฉันต้องการแนะนำวิธีที่ช่วยให้รับวัตถุทั้งสองด้วยการสืบค้นเพียงครั้งเดียว แต่ฉันไม่รู้วิธีจำลอง API สำหรับการทำ สิ่งที่ฉันมาด้วย: ฉันสามารถแนะนำพารามิเตอร์การสืบค้นที่คล้ายกับสิ่งนี้: /foo/[id]?include_bar=true. ปัญหาด้วยวิธีการนี้คือการเป็นตัวแทนทรัพยากร (เช่นโครงสร้าง JSON) ของการตอบสนองจะต้องดูแตกต่างกัน (เช่นภาชนะเช่น{ foo: ..., bar: ... }แทนที่จะเป็นแบบอนุกรมFoo) ซึ่งทำให้Fooจุดสิ้นสุดของทรัพยากร "แตกต่าง" ฉันไม่คิดว่ามันเป็นสิ่งที่ดี เมื่อทำการสอบถาม/fooลูกค้าควรได้รับการแสดงทรัพยากรเดียวกัน (โครงสร้าง) เสมอโดยไม่คำนึงถึงพารามิเตอร์การสืบค้น /fooandbar/[foo-id]ความคิดก็คือการแนะนำปลายทางอ่านอย่างเดียวใหม่เช่น ในกรณีนี้จะไม่มีปัญหาในการส่งคืนการแสดงแทนเช่น{ foo: ..., bar: ... …

4
REST API ควรจะสามารถแปลงวันที่และเวลาเป็นเขตเวลาไคลเอนต์ที่เหมาะสมได้หรือไม่?
ในขณะที่ใช้ API ของเราปัญหาของวันที่และเวลาและเขตเวลาก็เกิดขึ้น วันที่ทั้งหมดถูกปรับให้เป็น UTC ในฐานข้อมูล ปัจจุบันในแอปพลิเคชันที่ไม่ใช่ API ชุดข้อมูลทั้งหมดจะถูกแปลงตามการตั้งค่าของผู้ใช้ก่อนนำเสนอ ตอนนี้มีคำถามเดียวกันสำหรับ API: API ควรจะสามารถคืนค่าวันที่และเวลาที่เหมาะสมสำหรับเขตเวลาตามความหมายของคำขอหรือไม่ เช่นGET /posts?timezone=America/Sao_Paulo? หรือควรจะทำในสิ่งที่ลูกค้ากำลังเข้าถึง API? อัปเดต:เนื่องจากมีการเกิดขึ้นสองสามครั้ง: เวลาปัจจุบันที่มีเขตเวลาจะถูกส่งคืน (แม้ว่าจะเป็นออฟเซ็ต TZ เสมอ+00:00) รูปแบบที่เป็นที่นิยม 8601:2015-10-29T23:00:49+00:00
10 rest  api  time 

2
การใช้ส่วนหัวการให้สิทธิ์ที่กำหนดเองใน REST API
ฉันกำลังสร้าง REST api ที่ซึ่งลูกค้าได้รับการรับรองความถูกต้องโดยใช้ใบรับรองลูกค้า ลูกค้าในกรณีนี้ไม่ใช่ผู้ใช้รายบุคคล แต่เป็นเลเยอร์การนำเสนอบางประเภท ผู้ใช้จะได้รับการรับรองความถูกต้องโดยใช้วิธีการที่กำหนดเองและเป็นความรับผิดชอบของเลเยอร์การนำเสนอเพื่อดูว่าสิ่งนี้ทำถูกต้องแล้ว (หมายเหตุ: ฉันรู้ว่านี่ไม่ใช่วิธีการที่เหมาะสม แต่ api นั้นไม่ใช่สาธารณะ) ฉันต้องการส่งชื่อผู้ใช้สำหรับแต่ละคำขอ (ไม่ใช่รหัสผ่าน) แต่ฉันไม่แน่ใจว่าจะทำเช่นไร เป็นความคิดที่ดีที่จะใช้ส่วนหัวการให้อนุญาตหรือไม่

3
มันเป็นการปฏิบัติที่ไม่ถูกต้องหรือไม่สำหรับคำนิยามออบเจ็กต์ API ที่มีรหัสอ้างอิงบุคคลที่สามเป็นคุณสมบัติหรือไม่
แบบนี้: Campaign: type: object properties: id: type: string description: "A GUID identifier" referenceId: type: string description: "A consumers identifier they have used to map their own systems logic to this object." name: type: string description: "'Great Campaign 2017' as an example" ผมกังวลเกี่ยวกับreferenceid โดเมนระบบเป็นแพลตฟอร์มที่รวมเข้ากับบุคคลที่สามได้หลายวิธีผ่านการส่งออกข้อมูลและการนำเข้ารูปแบบต่างๆ (xml, excel) เป็นผู้ใหญ่พอที่จะอนุญาตให้บุคคลที่ 3 รวมกับระบบของเราผ่าน API และการออกแบบของ …

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