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

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

4
Microservices REST หรือ AMQP ซึ่งในกรณีนี้
ฉันได้อ่านบทความมากมายเกี่ยวกับสถาปัตยกรรมไมโครไซต์และฉันสงสัยว่าเมื่อไรที่จะใช้ AMQP หรือ REST ฉันได้อ่านว่าการเชื่อมต่อระหว่างบริการเป็นสิ่งที่ดีและ AMQP ดูเหมือนจะเป็นทางเลือกที่ดีในกรณีนี้ แต่ถ้าเราใช้ AMQP นี่หมายความว่าเราไม่จำเป็นต้องใช้ปลายทาง REST อีกต่อไป (แต่นั่นหมายความว่าเราสูญเสียแนวคิด HATEOAS) แต่ REST เป็นวิธีที่ดีในการสร้างบริการของฉันหรือไม่ เพราะฉันจะไม่ใช้จุดปลายใด ๆ ... ในกรณีใดอันหนึ่งดีกว่าอีกอัน? เมื่อใดที่ฉันควรใช้รายการใดรายการหนึ่ง

3
REST APIs การกำหนดเวอร์ชัน แต่ละ API มีเวอร์ชันของตัวเอง
เป็นเรื่องธรรมดามากที่จะระบุเวอร์ชันของ REST API ใน URL โดยเฉพาะที่จุดเริ่มต้นของเส้นทางนั่นคือ: POST /api/v1/accounts GET /api/v1/accounts/details อย่างไรก็ตามฉันไม่เห็นการออกแบบที่เกี่ยวข้องกับแต่ละ API กล่าวอีกนัยหนึ่งเรารักษาเวอร์ชันของแต่ละ API แยกจากกัน เช่น: POST /api/accounts/v2 GET /api/accounts/details/v3 การใช้วิธีการนี้ทำให้เราเพิ่มรุ่น API ของ API ที่เฉพาะเจาะจงเมื่อจำเป็นต้องทำการแตกหักการเปลี่ยนแปลงไม่จำเป็นต้องเพิ่มรุ่น API ทั้งหมด อะไรคือข้อเสียของการใช้สไตล์นี้แทนสไตล์ทั่วไป?

1
RESTful API และ i18n: จะออกแบบการตอบสนองอย่างไร?
เรากำลังออกแบบ RESTful API ที่มีวัตถุประสงค์เพื่อตอบสนองความต้องการของลูกค้าเป็นหลัก เนื่องจากสถานการณ์ที่เฉพาะเจาะจงลูกค้าจึงต้องทำการร้องขอให้น้อยที่สุดเท่าที่จะทำได้ API จัดการ i18n ผ่านส่วนหัว Accept-Language ในคำขอ สิ่งนี้ใช้ได้กับทุกสิ่งที่ลูกค้าต้องทำยกเว้นคุณลักษณะหนึ่งซึ่งลูกค้าต้องเก็บการตอบสนองของคำขอไปยังจุดปลายเดียวในสถานที่ที่มีอยู่ทั้งหมด เราสามารถออกแบบ API ในลักษณะที่ช่วยให้ลูกค้าสามารถดึงข้อมูลทั้งหมดนี้ได้ด้วยการร้องขอเพียงครั้งเดียวและไม่ทำลายการออกแบบ RESTful API ที่มีโครงสร้างที่สอดคล้องและมีโครงสร้างที่ดี ตัวเลือกที่เราพิจารณาแล้ว: การอนุญาตให้รวมหลายโลแคลในส่วนหัว Accept-Language และเพิ่มเวอร์ชันที่โลคัลไลซ์สำหรับโลแคลที่ร้องขอทั้งหมดในการตอบกลับแต่ละอันระบุด้วยรหัสภาษา ISO 639-1 เป็นคีย์ การสร้างบางสิ่งเช่นพารามิเตอร์ "? all_languages ​​= true" ไปยังปลายทางนั้นและส่งคืนเวอร์ชันที่แปลแล้วสำหรับโลแคลที่มีอยู่ทั้งหมดในการตอบกลับหากมีพารามิเตอร์นั้น (หากไม่มีสิ่งใดที่ได้ผลข้างต้นสำหรับเรา) ทำการร้องขอหลายครั้งเพื่อคว้าเวอร์ชั่นที่แปลเป็นภาษาท้องถิ่นทั้งหมดจากลูกค้า อันไหนเป็นทางเลือกที่ดีที่สุด?
15 rest  api  api-design  http 

2
วิธีที่ดีที่สุดในการสร้างรูปแบบการตอบสนองข้อผิดพลาด REST API และระบบรหัสข้อผิดพลาดคืออะไร?
การใช้งาน REST ของฉันจะส่งคืนข้อผิดพลาดใน JSON ด้วยโครงสร้างถัดไป: { "http_response":400, "dev_message":"There is a problem", "message_for_user":"Bad request", "some_internal_error_code":12345 } ฉันแนะนำให้สร้างโมเดลการตอบกลับพิเศษซึ่งฉันสามารถส่งผ่านค่าที่ต้องการสำหรับคุณสมบัติ (dev_message, message_for_user, some_internal_error_code) และส่งคืนได้ ในรหัสมันจะคล้ายกับสิ่งนี้: $responseModel = new MyResponseModel(400,"Something is bad", etc...); รุ่นนี้มีหน้าตาเป็นอย่างไร ฉันควรใช้วิธีการอย่างเช่น successResponse () โดยที่ฉันจะส่งผ่านเฉพาะข้อมูลตัวอักษรและรหัสจะเป็นค่าเริ่มต้น 200 รายการ ฉันติดอยู่กับเรื่องนี้ และนี่เป็นส่วนแรกของคำถามของฉัน: ฉันจำเป็นต้องใช้โมเดลนี้หรือไม่ เพราะตอนนี้ฉันเพิ่งกลับอาร์เรย์โดยตรงจากรหัส ส่วนที่สองเป็นเรื่องเกี่ยวกับระบบรหัสข้อผิดพลาด รหัสข้อผิดพลาดจะอธิบายไว้ในเอกสาร แต่ปัญหาที่ฉันพบอยู่ในรหัส วิธีที่ดีที่สุดในการจัดการรหัสข้อผิดพลาดคืออะไร? ฉันควรเขียนมันไว้ในโมเดลหรือไม่? หรือมันจะเป็นการดีกว่าถ้าจะสร้างบริการแยกต่างหากสำหรับจัดการสิ่งนี้ อัพเดท 1 ฉันใช้คลาสจำลองเพื่อการตอบสนอง มันเป็นคำตอบที่คล้ายกันของ Greg …
15 php  mvc  rest  api 

2
นี่เป็นโครงสร้างโซลูชัน Visual Studio ที่ดีสำหรับการออกแบบโดเมนขับเคลื่อนบริการเว็บสงบหรือไม่?
ฉันกำลังสร้าง. NET 4.5 C # Web API RESTful solution และฉันต้องการให้ใครบางคนบอกฉันว่าโซลูชันโครงการของฉันนั้นถูกต้องและ / หรือฉลาด (- เพียงพอหรือยัง) สำหรับโซลูชั่นที่ออกแบบโดยใช้ Domain Driven Design โปรด โซลูชันได้แบ่งออกเป็น 6 โครงการ: /ฐาน (ไม่ได้อ้างอิงอะไรเลย) โครงการเว็บและสร้างส่วนต่อประสานระหว่างโซลูชันกับโลกภายนอก มีตัวควบคุม Web API ไม่มีเหตุผลใดเลยในการรวบรวมค่าจากวัตถุที่ร้องขอและขอให้ BizApi ทำงานได้ /Biz.Api (อ้างอิงโดยฐาน]) ให้บริการโดเมนและอนุญาตให้ / โครงการอินเทอร์เฟซฐานสามารถเข้าถึงวัตถุตรรกะทางธุรกิจของโดเมนในโครงการ /Biz.Domain /Biz.Domain (อ้างอิงโดย Biz.Api) จัดเตรียมคลาสโดเมนสำหรับเลเยอร์ Biz.Api เหล่านี้มีวิธีการจัดการข้อมูลของธุรกิจในหน่วยความจำ /Dal.Db (อ้างอิงโดย Biz.Api) เลเยอร์ที่เก็บฐานข้อมูล เข้าถึงฐานข้อมูลและแมปข้อมูลที่ส่งคืนไปยัง DTO ภายในที่กำหนดในเลเยอร์ …

3
วิธีสนับสนุน API รุ่นต่างๆ
ฉันกำลังเขียน API ส่วนที่เหลือและสงสัยว่าจะจัดการกับเวอร์ชันต่าง ๆ ได้ดีที่สุดอย่างไร จากนี้ฉันไม่ได้หมายถึงวิธีการกำหนด URI เป็น V2 หรือ V3 แต่วิธีการจัดโครงสร้างรหัสที่กำหนดว่าจะต้อง: รองรับหลายรุ่นในเวลาเดียวกันเช่น URIs V1 & V2 และ V3 ต้องใช้งานพร้อมกัน ฉันจะออก V1 เมื่อพูดว่า V4 เข้ามาเพื่อ จำกัด จำนวนเงินที่สนับสนุนในแต่ละครั้ง หลีกเลี่ยงการทำซ้ำรหัสมากที่สุด ทำให้ง่ายต่อการเพิ่มการเปลี่ยนแปลงที่ไม่ทำลายกับเวอร์ชันโดยไม่ส่งผลกระทบกับเวอร์ชันอื่น ดูเหมือนว่ามีวิธีการบางอย่างที่สามารถทำได้: ใช้ Git เพื่อควบคุมเวอร์ชันโดยมีสาขาสำหรับเวอร์ชันต่าง ๆ (และเวอร์ชันเก่าเป็นหลักโดยที่ไม่มีงานพัฒนาใหม่เกิดขึ้น) นี่หมายความว่าจะไม่มีการทำสำเนารหัสเนื่องจากมีเพียงเวอร์ชันล่าสุดเท่านั้นที่อยู่ในรหัส แต่รุ่นก่อนหน้านี้จะต้องทำงานกับ DB เวอร์ชันใหม่จนกว่าจะถูกยกเลิก ทำซ้ำรหัสเพื่อให้แต่ละรุ่นได้รับการจัดการในแอปพลิเคชันเดียวกันและมีเส้นทางรหัสแยกกันโดยสิ้นเชิง แต่สิ่งนี้จะหมายถึงการทำซ้ำจำนวนมาก ใช้รหัสจำนวนมากซ้ำในเวอร์ชันต่าง ๆ แต่สิ่งนี้จะทำให้ยากต่อการบำรุงรักษาเนื่องจากการเปลี่ยนหนึ่งเวอร์ชันมีแนวโน้มที่จะกระทบกับเวอร์ชันก่อนหน้ามากกว่า มีวิธีปฏิบัติที่ดีที่สุดในการจัดการกับปัญหานี้เนื่องจากตัวเลือกทั้งหมดดูเหมือนจะมีปัญหาของตัวเองหรือไม่?

1
การตอบสนองที่เหมาะสมสำหรับส่วนที่เหลือ REST - บันทึกใหม่เต็มหรือเพียงแค่ค่ารหัสบันทึก?
ฉันกำลังสร้าง REST API ที่อนุญาตให้มีการแทรก (POST ไม่ใช่ idempotent) และอัปเดต (PUT, idempotent) เพื่อเพิ่ม / อัปเดตฐานข้อมูลไปยังแอปพลิเคชันของเรา ฉันสงสัยว่ามีมาตรฐานหรือแนวปฏิบัติที่ดีที่สุดเกี่ยวกับข้อมูลที่เราส่งกลับไปยังลูกค้าในการตอบสนองสำหรับการดำเนินการ POST (แทรก) เราจำเป็นต้องส่งกลับอย่างน้อยค่าบันทึก ID (เช่นบันทึกใหม่ของคุณคือบันทึก # 1234) เราควรตอบสนองกับวัตถุเต็มหรือไม่? (เช่นโดยพื้นฐานแล้วคำตอบเดียวกับที่พวกเขาได้รับกลับมาจากคำขอ "GET / object_type / 1234") เราควรตอบสนองด้วยค่า ID ใหม่เท่านั้นหรือไม่ (เช่น "{id: 1234}" ซึ่งหมายความว่าหากพวกเขาต้องการที่จะดึงข้อมูลทั้งหมดพวกเขาจำเป็นต้องทำคำขอ HTTP GET เพิ่มเติมเพื่อคว้าบันทึกทั้งหมด) ส่วนหัวเปลี่ยนเส้นทางชี้ไปที่ URL สำหรับวัตถุเต็มหรือไม่ มีอะไรอีกบ้าง?
15 rest 

5
REST และ HATEOAS เป็นสถาปัตยกรรมที่ดีสำหรับบริการเว็บหรือไม่?
หากฉันเข้าใจอย่างถูกต้อง REST ได้รับการยอมรับอย่างเป็นทางการจาก Roy Fielding เป็นแบบจำลองเชิงพรรณนาของสถาปัตยกรรมของเว็บ AFAIK Fielding ไม่ได้เรียกร้อง REST ว่าดีอะไรเขาแค่อธิบายสถาปัตยกรรมแบบพฤตินัยของเว็บ เว็บได้มาถึงจุดนี้พิสูจน์แล้วว่าระบบไฮเปอร์เท็กซ์แบบกระจายที่ประสบความสำเร็จอย่างมากดังนั้นการตรวจสอบ REST ในรูปแบบนี้จึงเป็นสถาปัตยกรรมที่ประสบความสำเร็จสำหรับโดเมนของไฮเปอร์มีเดียแบบกระจาย บริการเว็บ REST สร้างขึ้นโดยใช้สถาปัตยกรรม REST กับ API แต่จริงๆแล้วมีเหตุผลใดที่จะคิดว่า REST เป็นสถาปัตยกรรมที่ต้องการสำหรับโดเมนนี้หรือไม่? มีหลักฐานที่ระบุว่า HATEOAS เป็นหลักการออกแบบที่มีประโยชน์สำหรับการสื่อสารระหว่างเครื่องจักรกับเครื่องหรือไม่? ความกังวลของฉันคือ HATEOAS เหมาะสมกับไฮเปอร์มีเดียเนื่องจากมีประเภทเนื้อหาที่รู้จักกันน้อย (HTML, ภาพ, วิดีโอและอื่น ๆ ) และลูกค้ารู้วิธีใช้ แต่สำหรับ API ประเภทเนื้อหานั้นมีความเฉพาะเจาะจงมากและสามารถบริโภคได้ในลักษณะที่มีความหมายโดยลูกค้าหากลูกค้าได้รับการตั้งโปรแกรมให้บริโภคโดยเฉพาะ การส่งคืน URL ไปยังไคลเอ็นต์ไม่ได้ทำให้ตัวเองสามารถใช้ทรัพยากรที่ระบุได้
15 rest  hateoas 

4
oData ต่างจากบริการ REST อย่างไร
ฉันกำลังมองหาการเขียน API บริการเว็บและฉันกำลังคิดที่จะสร้างบริการ REST OData หมายถึงอะไรในบริบทนี้ คุณช่วยอธิบายความแตกต่างระหว่าง OData กับ REST ได้ไหม?
15 rest 

3
ฉันควรส่งคืนการตอบสนอง 204 หรือ 404 เมื่อไม่พบทรัพยากรหรือไม่
ฉันกำลังพัฒนาบริการ RESTful ที่เรียบง่ายสำหรับทัวร์นาเมนต์และกำหนดเวลา เมื่อมีการสร้างทัวร์นาเมนต์ผ่านคำขอ POST ที่มีเนื้อความ JSON การแข่งขันจะถูกแทรกใน a BiMapประกาศดังต่อไปนี้ในการนำ DAO ไปใช้: private BiMap<String, Tournament> tournaments = Maps.synchronizedBiMap(HashBiMap.create()); เมื่อมีการสร้างทัวร์นาเมนต์ id ของสตริงที่เกี่ยวข้องจะถูกส่งคืนเพื่อให้ผู้ใช้สามารถมีการอ้างอิงในอนาคตของทัวร์นาเมนต์นั้น เขา / เธอสามารถรับข้อมูลคืนจากทัวร์นาเมนต์ใหม่ที่ทำตามคำขอต่อไปนี้: GET http://localhost:8080/eventscheduler/c15268ce-474a-49bd-a623-b0b865386f39 แต่ถ้าหากไม่พบการแข่งขันที่มีรหัสดังกล่าวล่ะ จนถึงตอนนี้ฉันกำลังตอบกลับ 204 ข้อ นิวเจอร์ซีย์กำลังทำเพื่อฉันเมื่อกลับมาnullจากหนึ่งในวิธีการของมัน นี่คือวิธีการที่สอดคล้องกับเส้นทางด้านบน: @Path("/{id}") @GET @Produces(MediaType.APPLICATION_JSON) public Tournament getTournament(@PathParam("id") String id) { Optional<Tournament> optTournament = tournamentDao.getTournament(id); if (optTournament.isPresent()) return optTournament.get(); return …
15 java  rest  web-services  http 

1
วิธีที่เหมาะสมของการซ้อนรีซอร์สในโมเดล REST คืออะไร?
ฉันออกแบบ REST API ของการบริการและติดอยู่กับวิธีที่เหมาะสมในการซ้อนทรัพยากร ทรัพยากร: คู่ค้าตั๋วการตั้งค่า การเชื่อมต่อระหว่างทรัพยากร: พันธมิตรมีตั๋วหลายใบ พันธมิตรมีการตั้งค่า ตรรกะ Bussines: คุณสามารถแสดงรายชื่อพันธมิตรทั้งหมดเป็นผู้ใช้ที่ไม่ระบุชื่อ คุณสามารถเพิ่มตั๋วใหม่ให้กับพันธมิตรที่ระบุในฐานะผู้ใช้ที่ไม่ระบุชื่อ พันธมิตรเท่านั้นที่สามารถแสดงตั๋วของเขา พันธมิตรเท่านั้นที่สามารถแก้ไขตั๋วของเขาได้ พันธมิตรเท่านั้นที่สามารถแสดงรายการการตั้งค่า พันธมิตรเท่านั้นที่สามารถแก้ไขการตั้งค่า สิ่งที่ฉันทำจนถึงตอนนี้: แหล่งข้อมูลพันธมิตร GET / คู่ค้า - แสดงรายชื่อพันธมิตรทั้งหมด GET / คู่ค้า /: id - แสดงรายละเอียดของพันธมิตรที่ระบุโดย: พารามิเตอร์ id GET / คู่ค้า /: partner_id / ตั๋ว - รายการตั๋วของพันธมิตร GET / คู่ค้า /: คู่ค้า / ตั๋ว /: …
14 api  rest  api-design 

4
วิธีทำการทดสอบ API ภายนอก (Blackbox)
สมมติว่าคุณใช้ API จากผู้ขายวิธีการตรวจสอบให้แน่ใจว่า API ของพวกเขาทำงานได้ตามที่คาดไว้หรือไม่ ข้อกังวลหลักของฉันคือบางครั้งผู้ขายได้ผลักดันการเปลี่ยนแปลงรหัสของพวกเขาและทำลาย API เราต้องการมีซอฟต์แวร์อัตโนมัติบางประเภทเพื่อทดสอบพวกเขาอย่างต่อเนื่อง วิธีจัดการกับสิ่งนี้?

6
เซสชันฝั่งเซิร์ฟเวอร์ละเมิด REST หรือไม่
ตามรอยฟีลดิง (หนึ่งในผู้เขียนหลักของสเปค HTTP) ในรูปแบบสถาปัตยกรรมวิทยานิพนธ์ของเขาเมื่อพูดถึงส่วนที่เหลือเขากล่าวถึง: [E] การร้องขอจากลูกค้าไปยังเซิร์ฟเวอร์ต้องมีข้อมูลทั้งหมดที่จำเป็นเพื่อทำความเข้าใจคำขอและไม่สามารถใช้ประโยชน์จากบริบทที่จัดเก็บไว้บนเซิร์ฟเวอร์ โดย "บริบทที่เก็บไว้" เขาอ้างถึงสถานะแอปพลิเคชันเช่นหมายเลขหน้าของหน้าถัดไปคือเทียบกับสถานะของทรัพยากรเช่นแหล่งข้อมูลใด ๆ รูปภาพ ฯลฯ - ซึ่งเป็นจุดรวมของ REST มันยุติธรรมหรือไม่ที่จะบอกว่าความพยายามส่วนใหญ่ในการพักผ่อนที่บริสุทธิ์ (ต่อไปนี้เป็นการนำไปปฏิบัติซึ่งสอดคล้องกับวิทยานิพนธ์ข้างต้น) ต้องล้มเหลวเนื่องจากการพึ่งพาการจัดเก็บข้อมูลเซสชันบนเซิร์ฟเวอร์ (ถาวรหรืออย่างอื่น)? แนวคิดของเซสชั่นเป็นเรื่องปกติ - โดยเฉพาะอย่างยิ่งสำหรับนักพัฒนาเว็บ - แต่มันสงบตามข้อกำหนดข้างต้นหรือไม่
14 rest 

4
ใช้การจัดองค์ประกอบและการสืบทอดสำหรับ DTO
เรามี ASP.NET Web API ที่ให้บริการ REST API สำหรับแอปพลิเคชันหน้าเดียวของเรา เราใช้ DTOs / POCO เพื่อส่งผ่านข้อมูลผ่าน API นี้ ปัญหาคือตอนนี้ DTO เหล่านี้เริ่มใหญ่ขึ้นตามกาลเวลาดังนั้นตอนนี้เราต้องการที่จะปรับโครงสร้าง DTO อีกครั้ง ฉันกำลังมองหา "วิธีปฏิบัติที่ดีที่สุด" วิธีการออกแบบ DTO: ขณะนี้เรามี DTO ขนาดเล็กที่ประกอบด้วยเฉพาะเขตข้อมูลประเภทค่าเช่น: public class UserDto { public int Id { get; set; } public string Name { get; set; } } DTO อื่น ๆ ใช้ …
13 rest  api-design  web-api  dto  poco 

2
หากต้องการรวม ID ทรัพยากรในส่วนของข้อมูลหรือมาจาก URI
การออกแบบ API เราได้พบกับคำถามว่า PUT payload ควรมี ID ของทรัพยากรที่กำลังอัปเดตหรือไม่ นี่คือสิ่งที่เรามีอยู่ในปัจจุบัน: PUT /users/123 Payload: {name: "Adrian"} รหัสเส้นทางของเราจะดึง ID จาก URI และดำเนินการต่อด้วยการอัปเดต ผู้ใช้คนแรกของ API ของเราตั้งคำถามว่าทำไมเราไม่อนุญาต ID ในส่วนของข้อมูล: PUT /users/123 Payload: {id: 123, name: "Adrian"} เหตุผลที่เราไม่อนุญาตเพราะเป็นรหัสซ้ำใน payload และ URI เมื่อคิดถึงสิ่งนี้อีกแล้วเรากำลังเชื่อมโยงทรัพยากรเข้ากับ URI หาก URI ไม่มี ID จะต้องแก้ไขส่วนของข้อมูล: PUT /no/id/here Payload: {name: "Adrian"} < What user??? …
13 rest  resources 

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