ฉันเพิ่งได้เรียนรู้ข้อกำหนดอินเทอร์เฟซ RESTful และใช้บุรุษไปรษณีย์เพื่อแนะนำข้อกำหนดดังกล่าว ต่อไปนี้เป็นข้อกำหนดอินเทอร์เฟซ RESTful ที่เกี่ยวข้อง: 1. RESTful คืออะไร?
REST: มันเป็นรูปแบบสถาปัตยกรรมสำหรับบริการบนเว็บ มันใช้มาตรฐานและโปรโตคอลที่ได้รับความนิยมอย่างกว้างขวาง เช่น HTTP, URI, XML, JSON และ HTML มันเป็นการออกแบบสถาปัตยกรรมแบบน้ำหนักเบาข้ามแพลตฟอร์ม สไตล์ ไม่ใช่มาตรฐานคือแนวคิด
RESTful: ภาษาจีนที่เกี่ยวข้องคือ REST บริการเว็บ Restful เป็นแอปพลิเคชัน REST ทั่วไป ซึ่งเป็นบริการเว็บที่สอดคล้องกับสไตล์ REST บริการเว็บ REST เป็นสถาปัตยกรรมประเภท ROA (สถาปัตยกรรมเชิงทรัพยากร) ) [คำแนะนำ: ส่วนหน้าของเว็บ]
สาระสำคัญของ RESTful คือรูปแบบสถาปัตยกรรมซอฟต์แวร์ แกนหลักคือเน้นทรัพยากรและแก้ไขปัญหาต่อไปนี้:
ลดความซับซ้อนในการพัฒนา
ปรับปรุงความสามารถในการปรับขนาดของระบบ
2.ความแตกต่างระหว่าง SOAP และ REST:
SOAP (Simple Object Access Protocol): ข้อกำหนดโปรโตคอลสำหรับการแลกเปลี่ยนข้อมูล เป็นโปรโตคอลที่ใช้ XML น้ำหนักเบาและเรียบง่าย
REST (Representational State Transfer): รูปแบบสถาปัตยกรรมซอฟต์แวร์ที่สามารถลดความซับซ้อนของการพัฒนาและปรับปรุงความสามารถในการปรับขนาดของระบบ
ประสิทธิภาพและความสะดวกในการใช้งาน :
SOAP : เนื่องจากการขยายตัวอย่างต่อเนื่องของเนื้อหาในโปรโตคอลของตัวเองเนื่องจากความต้องการที่หลากหลาย ประสิทธิภาพของการประมวลผล SOAP จึงลดลง ในขณะเดียวกัน ความสะดวกในการใช้งานและค่าใช้จ่ายในการเรียนรู้ก็เพิ่มขึ้นเช่นกัน
RESTful : เนื่องจากการออกแบบอินเทอร์เฟซที่เน้นทรัพยากรและการดำเนินการที่เป็นนามธรรม ทำให้การออกแบบที่ไม่ดีของนักพัฒนาง่ายขึ้น และยังใช้ประโยชน์จากแนวคิดการออกแบบโปรโตคอลแอปพลิเคชันดั้งเดิมของ HTTP ให้เกิดประโยชน์สูงสุด
ความปลอดภัย :
RESTful เหมาะมากสำหรับอินเทอร์เฟซบริการตามทรัพยากร และเหมาะอย่างยิ่งสำหรับสถานการณ์ที่ต้องการประสิทธิภาพสูงแต่มีข้อกำหนดด้านความปลอดภัยต่ำ
การครบกำหนดของ SOAP สามารถนำความสะดวกสบายมาสู่การออกแบบอินเทอร์เฟซที่จำเป็นสำหรับภาษาการพัฒนาหลายภาษาและมีข้อกำหนดด้านความปลอดภัยที่สูงขึ้น
โดยสรุป:
ความปลอดภัย : SOAP จะดีกว่า REST
ประสิทธิภาพและความสะดวกในการใช้งาน : REST ดีกว่า
วุฒิภาวะ : โดยทั่วไปแล้ว SOAP นั้นเหนือกว่า REST ในแง่ของวุฒิภาวะ
3. วิธีการออกแบบ RESTful API :
เส้นทางทรัพยากร : ในสถาปัตยกรรม RESTful แต่ละ URL แสดงถึงทรัพยากร ดังนั้น URL จะไม่มีคำกริยา มีเพียงคำนามเท่านั้น โดยทั่วไปแล้ว คำนามใน API ควรเป็นพหูพจน์
กริยา HTTP : การทำงานของทรัพยากร (CURD) แสดงโดยกริยา HTTP (เพรดิเคต)
GET: ดึงทรัพยากร (หนึ่งรายการขึ้นไป) จากเซิร์ฟเวอร์
POST: สร้างทรัพยากรใหม่บนเซิร์ฟเวอร์
PUT: อัปเดตทรัพยากรบนเซิร์ฟเวอร์ (ไคลเอนต์จัดเตรียมทรัพยากรที่เปลี่ยนแปลงทั้งหมด)
ลบ: ลบทรัพยากรออกจากเซิร์ฟเวอร์
มาดูสวนสัตว์เป็นตัวอย่าง (รวมถึงข้อมูลเกี่ยวกับสัตว์และพนักงานต่างๆ):
https://api.example.com/v1/zoos //ทรัพยากรของสวนสัตว์ https://api.example.com/v1/animals //ทรัพยากรสัตว์ https://api.example.com/v1/employees //พนักงาน ทรัพยากร
POST /zoos: สร้างสวนสัตว์ใหม่
GET /zoos/ID: รับข้อมูลเกี่ยวกับสวนสัตว์ที่ระบุ
PUT /zoos/ID: อัพเดตข้อมูลของสวนสัตว์ที่ระบุ
DELETE /zoos/D: ลบสวนสัตว์
ข้อมูลตัวกรอง :
?limit=10: ระบุจำนวนระเบียนที่ส่งคืน
?offset=10: ระบุตำแหน่งเริ่มต้นของเรกคอร์ดที่ส่งคืน
?page=2&per_page=100: ระบุหน้าและจำนวนบันทึกต่อหน้า
?sortby=name&order=asc: ระบุแอตทริบิวต์ที่ผลลัพธ์ที่ส่งคืนจะถูกจัดเรียงตาม และลำดับการเรียงลำดับ
?animal_type_id=1: ระบุเงื่อนไขตัวกรอง
รหัสสถานะ :
200 (ตกลง) - หากทรัพยากรที่มีอยู่มีการเปลี่ยนแปลง
201 (สร้างแล้ว) - หากมีการสร้างทรัพยากรใหม่
202 (ยอมรับแล้ว) - คำขอประมวลผลได้รับการยอมรับแล้ว แต่ยังไม่เสร็จสมบูรณ์ (การประมวลผลแบบอะซิงโครนัส)
301 (ย้ายอย่างถาวร) - URI ของทรัพยากรได้รับการอัปเดต
303 (ดูอื่นๆ)-อื่นๆ (เช่น การทำสมดุลโหลด)
400 (คำขอไม่ถูกต้อง) - หมายถึงคำขอที่ไม่ถูกต้อง
404 (ไม่พบ)-ไม่มีทรัพยากรอยู่
406 (ไม่ยอมรับ) - เซิร์ฟเวอร์ไม่รองรับการแสดงที่จำเป็น
409 (ข้อขัดแย้ง) - ข้อขัดแย้งทั่วไป
412 (เงื่อนไขเบื้องต้นล้มเหลว)-เงื่อนไขเบื้องต้นล้มเหลว (เช่นข้อขัดแย้งเมื่อดำเนินการอัปเดตเงื่อนไข)
415 (ประเภทสื่อที่ไม่รองรับ) - ไม่รองรับการแสดงที่ได้รับ
500 (ข้อผิดพลาดเซิร์ฟเวอร์ภายใน) - การตอบสนองข้อผิดพลาดทั่วไป
503 (บริการไม่พร้อมใช้งาน) - ขณะนี้บริการไม่สามารถจัดการคำขอได้
การจัดการข้อผิดพลาด :
ข้อมูลที่ส่งคืนใช้ข้อผิดพลาดเป็นชื่อคีย์ และข้อมูลข้อผิดพลาดเป็นค่าคีย์
- ข้อผิดพลาด: “คีย์ API ไม่ถูกต้อง” -
ผลลัพธ์การส่งคืน :
GET /collection: ส่งคืนรายการ (อาร์เรย์) ของวัตถุทรัพยากร
GET /collection/resource: ส่งคืนวัตถุทรัพยากรเดียว
POST /collection: ส่งคืนวัตถุทรัพยากรที่สร้างขึ้นใหม่
PUT /collection/resource: ส่งคืนวัตถุทรัพยากรที่สมบูรณ์
PATCH /collection/resource: ส่งคืนวัตถุทรัพยากรที่สมบูรณ์
DELETE /collection/resource: ส่งคืนเอกสารเปล่า
4.กระบวนการทดสอบอินเทอร์เฟซสไตล์ REST :
มาแนะนำโดยตรงด้วยรูปภาพ
5. การเขียนโค้ดและการทดสอบบุรุษไปรษณีย์ :
เครื่องมือ: ไอเดีย, ฐานข้อมูล mysql, บุรุษไปรษณีย์
ข้อมูลตารางฐานข้อมูล:
คลาสเอนทิตี:
การเข้าสู่ Front-end (vue) สู่หลักสูตรการเรียนรู้: เข้าสู่การเรียนรู้
@ข้อมูล @ApiModel("คลาสเอนทิตีผู้ใช้") ผู้ใช้คลาสสาธารณะขยายรุ่น <ผู้ใช้> ใช้งาน Serializable { @ApiModelProperty("รหัสผู้ใช้") @NotNull(message = "รหัสผู้ใช้ไม่สามารถเว้นว่างได้") รหัสจำนวนเต็มส่วนตัว @NotBlank(message = "ชื่อผู้ใช้ไม่สามารถเว้นว่างได้") @ApiModelProperty("ชื่อผู้ใช้") ชื่อสตริงส่วนตัว @มิน(1) @แม็กซ์(100) @ApiModelProperty("อายุผู้ใช้") อายุจำนวนเต็มส่วนตัว @NotEmpty(message = "กล่องจดหมายไม่สามารถเว้นว่างได้") @ApiModelProperty("อีเมลผู้ใช้") @อีเมล อีเมลสตริงส่วนตัว @ApiModelProperty("0: ไม่ถูกลบ 1: ถูกลบ") @เทเบิลลอจิก ลบจำนวนเต็มส่วนตัวแล้ว @NotBlank(message = "รหัสผ่านไม่สามารถเว้นว่างได้") @ApiModelProperty("รหัสผ่านผู้ใช้") รหัสผ่านสตริงส่วนตัว -
รหัสเลเยอร์ตัวควบคุม (ละเว้นเลเยอร์บริการ):
@Api(tags = "การจัดการผู้ใช้") @RestController @RequestMapping("/เว็บไซต์ของฉัน/ผู้ใช้") UserController ระดับสาธารณะ { @สายอัตโนมัติ UserServiceImpl ส่วนตัว userServiceimpl; @ApiOperation(value = "ผู้ใช้ใหม่") @โพสต์แมป int สาธารณะ insertUser (ผู้ใช้ผู้ใช้) { System.out.println("เพิ่มสำเร็จ"); ส่งคืน userServiceimpl.insertUser (ผู้ใช้); - @ApiOperation(value = "แก้ไขข้อมูลผู้ใช้") @PutMapping โมฆะสาธารณะ updateUser(@RequestBody @ผู้ใช้ผู้ใช้ที่ถูกต้อง) { userServiceimpl.updateUser (ผู้ใช้); System.out.println("แก้ไขสำเร็จ"); - @ApiOperation(value = "ลบผู้ใช้", หมายเหตุ = "ลบผู้ใช้ตามรหัส") @DeleteMapping("/{id}") int สาธารณะ DeleteUser(@ApiParam("รหัสผู้ใช้") @PathVariable @Valid Integer id) { System.out.println("การลบสำเร็จ"); ส่งคืน userServiceimpl.deleteUser (id); - @ApiOperation(value = "สอบถามผู้ใช้ทั้งหมด") @GetMapping รายการสาธารณะ <ผู้ใช้> allUser() { System.out.println("แบบสอบถามสำเร็จ"); กลับ userServiceimpl.allUser(); - @ApiOperation(value = "ผู้ใช้แบบสอบถาม id") @GetMapping("/{id}") ผู้ใช้สาธารณะ selectById(@PathVariable("id") String id) { ส่งคืน userServiceimpl.selectById(id); - -
ใช้บุรุษไปรษณีย์เพื่อทดสอบ (เส้นทาง URL ต้องสอดคล้อง):
ค้นหาผู้ใช้ทั้งหมด : http://localhost:8081/MyWebsite/user
ส่วนหัว: Content-Type=application/json
ร่างกาย: ว่างเปล่า
แบบสอบถามสำเร็จ!
แบบสอบถามตามรหัส:
แบบสอบถามสำเร็จ!
เพิ่มผู้ใช้ใหม่ :
ตรวจสอบว่าเพิ่มฐานข้อมูลสำเร็จแล้ว!
แก้ไขข้อมูลผู้ใช้ (แก้ไขชื่อและอายุด้วย ID 7):
ตรวจสอบว่าการแก้ไขฐานข้อมูลสำเร็จ!
ลบผู้ใช้ตาม id :
ตรวจสอบว่าลบฐานข้อมูลสำเร็จแล้ว! (ลบ=1)
บางทีคุณอาจลบข้อมูลทั้งหมดโดยตรง
เมื่อสอบถามหรืออัปเดตหรือลบข้อมูลที่ไม่มีอยู่ (หรือข้อมูลผิดกฎหมาย) การดำเนินการล้มเหลว มีอินเทอร์เฟซอื่น ๆ เช่นการลบอินเทอร์เฟซทั้งหมด ฉันยังไม่ได้ทดสอบทีละรายการที่นี่ ชี้ให้พวกเขาเห็น
ข้างต้นเป็นการแนะนำโดยละเอียดเกี่ยวกับข้อกำหนดอินเทอร์เฟซแบบสงบและเครื่องมือแก้ไขจุดบกพร่องบุรุษไปรษณีย์!