บทความนี้แนะนำแนวทางปฏิบัติที่ดีที่สุดสำหรับ Spring Boot เพื่อพัฒนาส่วนต่อประสานที่เหลือและแบ่งปันกับคุณดังนี้:
คำกริยา http สอดคล้องกับคำสั่ง SQL
รับ
รับทรัพยากรจากเซิร์ฟเวอร์คุณสามารถรับทรัพยากรอย่างน้อยหนึ่งทรัพยากรและรับข้อมูลผู้ใช้ทั้งหมดบนเซิร์ฟเวอร์รับ /ผู้ใช้ /ID, ID ที่ระบุและรับข้อมูลผู้ใช้ของ ID ที่ระบุ
โพสต์
สร้างทรัพยากรใหม่บนเซิร์ฟเวอร์ที่สอดคล้องกับ createPost /ผู้ใช้ในคำสั่ง SQL เพื่อสร้างผู้ใช้ใหม่
ใส่
อัปเดตทรัพยากรบนเซิร์ฟเวอร์และไคลเอน
ลบ
ลบทรัพยากรออกจากเซิร์ฟเวอร์และลบข้อมูลผู้ใช้ของ ID ที่ระบุที่สอดคล้องกับ deletedelete /users /id ในคำสั่ง SQL
แพทช์
อัปเดตแอตทริบิวต์บางอย่างของทรัพยากรบนเซิร์ฟเวอร์ซึ่งสอดคล้องกับ UpdatePatch /Users /ID ในคำสั่ง SQL เพื่ออัปเดตแอตทริบิวต์ที่แน่นอนของผู้ใช้ด้วย ID ที่ระบุ
อนุสัญญาใน URL
คำนามใน url ใช้รูปแบบพหูพจน์
คำถามที่ว่าชื่อใน URL ใช้เอกพจน์หรือพหูพจน์เป็นที่ถกเถียงกัน คำนามใน URL โดยทั่วไปจะสอดคล้องกับตารางในฐานข้อมูลและตารางเก็บข้อมูลที่คล้ายกัน ในทางปฏิบัติฉันบังคับให้ใช้รูปแบบพหูพจน์ซึ่งดูสบายขึ้น
/ผู้ใช้/ผู้ใช้/1/บทบาท/บทบาท/บทบาท/1
สำหรับคำนามที่ผิดปกติและไม่สามารถนับได้นั้นขึ้นอยู่กับความคิดเห็นของคุณ
/ฮีโร่/ฮีโร่/1/คน/คน/1/ฟุต/ฟุต/1/ฟุต/ฟุต/1/ฟุต/1
รุ่น
พูดหมายเลขเวอร์ชันที่จะเพิ่มลงใน URL เพื่อจัดการกับการเปลี่ยนแปลงที่เข้ากันไม่ได้และทำลายล้าง เมื่อปล่อย API ใหม่ลูกค้าสามารถย้ายไปยัง API ใหม่ได้อย่างอิสระและจะไม่เดือดร้อนเนื่องจากการเรียก API ใหม่ที่แตกต่างอย่างสิ้นเชิง ใช้คำนำหน้า "V" ที่ใช้งานง่ายเพื่อระบุว่าหมายเลขต่อไปนี้คือหมายเลขเวอร์ชันไม่จำเป็นต้องใช้หมายเลขรุ่นรองและไม่ควรเปิดตัวเวอร์ชัน API บ่อยครั้ง
/edu/v1/users/edu/v1/บทบาท
ใช้สตริงแบบสอบถามสำหรับพารามิเตอร์ที่เป็นตัวเลือกและซับซ้อน
เพื่อให้ URL มีขนาดเล็กลงและกระชับยิ่งขึ้นตั้งค่า URL พื้นฐานสำหรับทรัพยากรและพารามิเตอร์ที่เป็นตัวเลือกและซับซ้อนจะถูกแทนด้วยสตริงแบบสอบถาม
/edu/v1/ผู้ใช้? enabled = 1 & roleid = 1
ให้ข้อมูลการเพจ
ไม่ใช่ความคิดที่ดีที่จะส่งคืนทรัพยากรทั้งหมดในฐานข้อมูลพร้อมกันดังนั้นจึงจำเป็นต้องใช้กลไกการเพจ โดยปกติแล้วพารามิเตอร์ที่รู้จักกันดีในฐานข้อมูลจะใช้เพื่อชดเชยและ จำกัด
/edu/v1/ผู้ใช้? enabled = 1 & Offset = 1 & limit = 15
หากไคลเอนต์ไม่ผ่านพารามิเตอร์เหล่านี้ควรใช้ค่าเริ่มต้นโดยปกติชดเชย = 0 จำกัด = 10
ใช้คำกริยาสำหรับคำขอที่ไม่ใช่ทรัพยากร
บางครั้งการโทร API ไม่เกี่ยวข้องกับทรัพยากรซึ่งในกรณีนี้เซิร์ฟเวอร์ดำเนินการและส่งคืนผลลัพธ์ไปยังไคลเอนต์
/edu/v1/calc? p = 100
พิจารณาทรัพยากรเฉพาะและการค้นหาข้ามทรัพยากร
เป็นเรื่องง่ายที่จะค้นหาการเข้าพักที่เฉพาะเจาะจง คุณเพียงแค่ต้องใช้การรวบรวมทรัพยากรที่เกี่ยวข้องและผนวกสตริงการค้นหาเข้ากับพารามิเตอร์การสืบค้น
/edu/v1/ผู้ใช้? ชื่อผู้ใช้ = Li Qinghai
หากคุณต้องการให้การค้นหาทั่วโลกสำหรับทรัพยากรทั้งหมดคุณต้องใช้วิธีอื่น
/edu/v1/search? key = li qinghai
ผลการตอบสนอง
ใช้ระบบการตั้งชื่ออูฐขนาดเล็กเป็นตัวระบุแอตทริบิวต์
โดยทั่วไปแล้วบริการเว็บ RESTFUL จะถูกใช้โดยลูกค้าที่เขียนใน JavaScript ลูกค้าแปลงการตอบสนอง JSON เป็นวัตถุ JavaScript จากนั้นเรียกคุณสมบัติของมัน ดังนั้นจึงเป็นการดีที่สุดที่จะทำตามข้อกำหนดทั่วไปของรหัส JavaScript
person.year_of_birth // ไม่แนะนำให้ละเมิดรหัสจาวาสคริปต์ข้อมูลจำเพาะทั่วไปบุคคลที่ไม่แนะนำ // ไม่แนะนำตัวสร้าง JavaScript ชื่อ person.yearofbirth // แนะนำ
ให้ข้อมูลการเพจ
เมื่อมีการส่งคืนผลลัพธ์จำนวนมากควรให้ข้อมูลการเพจ
{"หน้า": 0, "ขนาด": 10, "ทั้งหมด": 3465, "obj": []}อินเทอร์เฟซสปริงพัฒนา MVC
คำอธิบายประกอบร่วมกัน
@RestController
@RestController เป็นคำอธิบายประกอบการรวมกันของ @ResponseBody และ @Controller
@requestmapping
คำอธิบายประกอบนี้สามารถนำไปใช้กับวิธีการของคอนโทรลเลอร์หรือคลาสคอนโทรลเลอร์นี้ เมื่อคอนโทรลเลอร์เพิ่มคำอธิบายประกอบ @requestmapping ที่ระดับคลาสคำอธิบายประกอบนี้จะถูกนำไปใช้กับวิธีการประมวลผลทั้งหมดของคอนโทรลเลอร์ @requestmapping คำอธิบายประกอบในวิธีการประมวลผลจะเสริมการประกาศ @requestmapping ในระดับคลาส
@postmapping
คำอธิบายประกอบการรวมกันคือตัวย่อของ @requestmapping (วิธีการ = requestMethod.post)
@putMapping
คำอธิบายประกอบการรวมกันคือตัวย่อของ @requestmapping (method = requestmethod.put)
@patchmapping
คำอธิบายประกอบการรวมกันคือตัวย่อของ @requestmapping (method = requestmethod.patch)
@deletemapping
คำอธิบายประกอบการรวมกันคือตัวย่อของ @requestmapping (วิธีการ = requestmethod.delete)
@getMapping
คำอธิบายประกอบการรวมกันคือตัวย่อของ @requestmapping (วิธีการ = requestMethod.get)
@PathVariable
รับข้อมูลใน URL
@requestparam
รับค่าของพารามิเตอร์ที่ร้องขอ
REST Interface และ Swagger API ตัวอย่างเอกสาร
สำหรับการใช้ Swagger โปรดดูการใช้ Swagger2 ในโครงการ Spring Boot รหัสในวิธีการไม่สำคัญสิ่งที่สำคัญคือลายเซ็นของวิธีการและการแมปด้วยคำกริยา HTTP
นำเข้า java.util.date; นำเข้า Javax.persistence.entityNotFoundException; นำเข้า org.springframework.beans.factory.annotation.autowired; นำเข้า org.springframework.data.domain.page; org.springframework.web.bind.annotation.patchmapping; นำเข้า org.springframework.web.bind.annotation.pathvariable; นำเข้า org.springframework.web.bind.annotation.postmapping; org.springframework.web.bind.annotation.requestmapping; นำเข้า org.springframework.web.bind.annotation.requestparam; นำเข้า org.springframework.web.bind.annotation.restcontroller; cn.com.infcn.jianshu.exception.bizexception; นำเข้า cn.com.infcn.jianshu.exception.loginnameorpassworderRorexception; นำเข้า cn.com.infcn.jianshu.exception.resourceExistsexception; cn.com.infcn.jianshu.util.jsonresult; นำเข้า io.swagger.annotations.api; นำเข้า io.swagger.annotations.apiparam;/** * ตัวควบคุมผู้ใช้ระบบ * * @author Li Qinghai * */ @api การจัดการ ")@restcontroller@requestmapping ("/v3/edu/ผู้ใช้ ") คลาสสาธารณะ userController {@AutoWired Userservice Userservice; /** * เพิ่มผู้ใช้, ลงทะเบียน * * @param loginName * บัญชีล็อกอิน * @param ชื่อผู้ใช้ * ชื่อผู้ใช้ * @param รหัสผ่าน * รหัสผ่านเข้าสู่ระบบ * @param roleid * บทบาทผู้ใช้ * @return * @throws ResourceExistsexception */@apioperation บัญชี "จำเป็น = true) @requestparam (ต้องการ = true) @requestbody สตริง loginName, @apiparam (name =" ชื่อผู้ใช้ ", value =" ชื่อผู้ใช้ ", ต้องการ = true) @requestparam (จำเป็น = true) @requestbody สตริงสตริง @apiparam รหัสผ่าน, @apiparam (name = "roleid", value = "หมายเลขบทบาทผู้ใช้", จำเป็น = true) @requestparam (จำเป็น = true) @requestbody string roleid) โยน ResourceExistsexception {บูลีนอยู่ = this.userService.exists (ชื่อเข้าสู่ระบบ); if (มีอยู่) {โยน ResourceExistsexception ใหม่ (LoginName); } user user = userservice.create (loginName, รหัสผ่าน, ชื่อผู้ใช้, roleid); ส่งคืน jsonresult.success (ผู้ใช้); }/** * ผู้ใช้เข้าสู่ระบบด้วยบัญชีเข้าสู่ระบบและรหัสผ่านเข้าสู่ระบบ * * @param loginName * บัญชีเข้าสู่ระบบ * @param รหัสผ่าน * รหัสผ่านเข้าสู่ระบบ * @THROWS EntityNotFoundException */@ApiOperation (value = "ข้อมูลผู้ใช้แบบสอบถามตามหมายเลขผู้ใช้") @GetMapping ("/ล็อกอิน") @RequestParam (จำเป็น = จริง) สตริงล็อกอินชื่อ @ApipAram (name = "รหัสผ่าน", value = "รหัสผ่านเข้าสู่ระบบ", จำเป็น = true) @RequestParam (จำเป็น = = จริง) รหัสผ่านสตริง) โยน loginNameorPassWorderRorexception if (null == ผู้ใช้) {โยน loginNameOrpassWorderRorexception ใหม่ (); } return jsonResult.success (ผู้ใช้); }/** * ข้อมูลผู้ใช้แบบสอบถามตามหมายเลขผู้ใช้ * * @Param ID * หมายเลขผู้ใช้ * @THROWS EntityNotFoundException */@ApiOperation (value = "ข้อมูลผู้ใช้แบบสอบถามตามหมายเลขผู้ใช้") @getMapping ("/{id}") jsonResult public EntityNotFoundException {user user = this.userService.getone (id); ส่งคืน jsonresult.success (ผู้ใช้); }/** * บัญชีถูกยกเลิกและข้อมูลของผู้ใช้จะไม่ถูกลบ * * @param userId * หมายเลขผู้ใช้ * @return */@apioperation (value = "carded out account") @patchmapping ("/{id}") jsonResult cancel (@APIPARAM โยน EntityNotFoundException {this.userService.cancel (id); ส่งคืน jsonresult.success (); }/** * รีเซ็ตรหัสผ่าน * * @param id * หมายเลขผู้ใช้ * @param รหัสผ่าน * รหัสผ่านเข้าสู่ระบบใหม่ * @return */@apioperation (value = "รหัสผ่านรีเซ็ต") @patchmapping ("/") public jsonResult updatePassword (@apiparam (name = "id", value = "หมายเลขผู้ใช้ "รหัสผ่าน", value = "รหัสผ่านเข้าสู่ระบบใหม่", จำเป็น = true) @requestparam (จำเป็น = จริง) รหัสผ่านสตริง) {this.userService.updatePassword (รหัส, รหัสผ่าน); ส่งคืน jsonresult.success (); }/** * แบบสอบถามชุดค่าผสมหลายเงื่อนไข * * @param ชื่อผู้ใช้ * ชื่อผู้ใช้ * @param roleid * บทบาทผู้ใช้ * @param เริ่มต้น * วันที่เริ่มต้น * @param end * วันที่สิ้นสุด * @param หน้า * pagination เริ่มต้นจาก 0 * @param ขนาด * jsonResult query (@apiparam (name = "username", value = "ชื่อผู้ใช้, คีย์เวิร์ดแบบสอบถาม", จำเป็น = false) @requestparam (จำเป็น = false) สตริงชื่อผู้ใช้ @apiparam (name = "roleid", value = "หมายเลขบทบาทผู้ใช้" @RequestParam (จำเป็น = false) วันที่เริ่มต้น, @Apiparam (name = "end", value = "หมายเลขบทบาทผู้ใช้", จำเป็น = false) @requestParam (จำเป็น = false) วันที่สิ้นสุด @Apiparam (name = "page", value = "pagination ซึ่งเริ่มต้นจาก 1" @Apiparam (name = "size", value = "จำนวนแถวต่อหน้า, จำนวนเต็มบวก", defaultValue = "10", ต้องการ = true) @requestparam (defaultValue = "10", จำเป็น = จริง) if (null == data || null == dataS.getContent () || dataS.getContent (). isEmpty ()) {โยน bizexception ใหม่ ("ผู้ใช้ไม่มีอยู่"); } return jsonResult.success (data); -Swagger2 Interface Document การแสดงผล
ข้างต้นเป็นเนื้อหาทั้งหมดของบทความนี้ ฉันหวังว่ามันจะเป็นประโยชน์ต่อการเรียนรู้ของทุกคนและฉันหวังว่าทุกคนจะสนับสนุน wulin.com มากขึ้น