A Spring REST API dokumentálása az OpenAPI 3.0 használatával
Most jelentettem be az újat Tanulj tavaszt tanfolyam, amelynek középpontjában az 5. tavasz és a tavaszi bakancs 2 alapjai állnak:
>> ELLENŐRIZZE A FOLYAMATOT1. Áttekintés
A dokumentáció elengedhetetlen része a REST API-k kiépítésének. Ebben az oktatóanyagban megnézzük a SpringDoc-ot - egy eszközt, amely leegyszerűsíti az API-dokumentumok előállítását és karbantartását az OpenAPI 3 specifikáció alapján a Spring Boot 1.x és 2.x alkalmazásokhoz.
2. A springdoc-openapi beállítása
Ahhoz, hogy a springdoc-openapi automatikusan létrehozza az API-ra vonatkozó OpenAPI 3 specifikációs dokumentumokat, egyszerűen hozzáadjuk a springdoc-openapi-ui függőség a mi pom.xml:
org.springdoc springdoc-openapi-ui 1.5.2
Ezután, amikor futtatjuk az alkalmazásunkat, az elérési útvonalon elérhetők lesznek az OpenAPI leírások / v3 / api-docs alapértelmezés szerint - például:
// localhost: 8080 / v3 / api-docs /
Egyéni elérési út használatához a alkalmazás.tulajdonságok fájl:
springdoc.api-docs.path = / api-docs
Most a következő címen férhetünk hozzá a dokumentumokhoz:
// localhost: 8080 / api-docs /
Az OpenAPI definíciók JSON-ban vannakformátum alapértelmezés szerint. Mert yaml formátumban a definíciókat a következő címen szerezhetjük be:
//localhost:8080/api-docs.yaml
3. A springdoc-openapi beállítása Swagger felhasználói felületen
Magának az OpenAPI 3 specifikációnak a létrehozása mellett integrálhatjuk a springdoc-openapit a Swagger felhasználói felületbe, hogy kölcsönhatásba léphessünk API specifikációnkkal és gyakorolhassuk a végpontokat.
3.1. Maven-függőség
A springdoc-openapi Swagger felhasználói felületen történő beállításához csak a függőség hozzáadása szükséges springdoc-openapi-ui a projekté pom.xml:
org.springdoc springdoc-openapi-ui 1.5.2
Most már elérhetjük az API dokumentációt:
//localhost:8080/swagger-ui.html
3.2. Támogatás a swagger-ui Tulajdonságok
A Springdoc-openapi támogatja a swagger-ui tulajdonságokat is. Ezek Spring Boot tulajdonságként használhatók, előtaggal springdoc.swagger-ui.
Például testre szabhatjuk az API dokumentációnk útvonalát. Megtehetjük ezt a sajátunk módosításával alkalmazás.tulajdonságok tartalmazza:
springdoc.swagger-ui.path = / swagger-ui-custom.html
Tehát most API dokumentációnk elérhető lesz a címen //localhost:8080/swagger-ui-custom.html.
Másik példa: az API elérési útjainak rendezése a HTTP módszerük szerint hozzáadhatjuk:
springdoc.swagger-ui.operationsSorter = módszer
3.3. Minta API
Tegyük fel, hogy alkalmazásunk rendelkezik vezérlővel a kezeléshez Könyvs:
@RestController @RequestMapping ("/ api / book") public class BookController {@Autowired private BookRepository repository; @GetMapping ("/ {id}") public Book findById (@PathVariable long id) {return repository.findById (id) .orElseThrow (() -> new BookNotFoundException ()); } @GetMapping ("/") nyilvános gyűjtemény findBooks () {return repository.getBooks (); } @PutMapping ("/ {id}") @ResponseStatus (HttpStatus.OK) nyilvános könyvfrissítési könyv (@PathVariable ("id") végleges karakterlánc azonosító, @RequestBody végleges könyvkönyv) {visszatérési könyv; }}
Ezután az alkalmazás futtatásakor megtekinthetjük a dokumentációt:
//localhost:8080/swagger-ui-custom.html
Fúrjuk le a / api / könyv végpont, és tekintse meg a kérés és válasz részleteit:
4. A springdoc-openapi integrálása a Spring WebFlux szolgáltatással
A Springdoc-openapi és a Swagger kezelőfelületet hozzáadással integrálhatjuk egy Spring WebFlux projektbe springdoc-openapi-webflux-ui:
org.springdoc springdoc-openapi-webflux-ui 1.5.2
És, mint korábban, a dokumentumok a következő címen lesznek elérhetők:
//localhost:8080/swagger-ui.html
Az útvonal testreszabása érdekében itt is hozzáadhatjuk a springdoc.swagger-ui.path ingatlan a mi alkalmazás.tulajdonságok.
5. A lapszámozási információk feltárása
A Spring Data JPA meglehetősen zökkenőmentesen integrálódik a Spring MVC-be. Az ilyen integrációk egyik példája Lapozható támogatás:
@GetMapping ("/ filter") nyilvános oldal filterBooks (lapozható lapozható) {return repository.getBooks (lapozható); }
Először arra számíthatunk, hogy a SpringDoc hozzáad oldalt, méret, és fajta lekérdezési paramétereket a létrehozott dokumentációhoz. Alapértelmezés szerint azonban a SpringDoc nem teljesíti ezt az elvárást. A funkció feloldásához hozzá kell adnunk a springdoc-openapi-data-rest függőség:
org.springdoc springdoc-openapi-data-rest 1.5.2
Most hozzáadja a várható lekérdezési paramétereket a dokumentációhoz:
6. A springdoc-openapi Maven plugin használata
A springdoc-openapi könyvtár Maven plugint biztosít springdoc-openapi-maven-plugin OpenAPI leírások generálásához json és yaml formátumok.
A springdoc-openapi-maven-plugin plugin működik a rugós-bakancsos-maven csatlakoztat. Maven fut a openapi bővítmény a integrációs teszt fázis.
Nézzük meg, hogyan konfigurálhatjuk a bővítményt a mi pom.xml:
org.springframework.boot spring-boot-maven-plugin 2.3.3. KÖZLEMÉNY integráció előtti teszt indítás integráció utáni teszt megállás org.springdoc springdoc-openapi-maven-plugin 0.2 integráció-teszt generálás
Beállíthatjuk a beépülő modult az egyéni értékek használatára is:
......... // localhost: 8080 / v3 / api-docs openapi.json $ {project.build.directory}
Vizsgáljuk meg közelebbről azokat a paramétereket, amelyeket konfigurálhatunk a beépülő modulhoz:
- apiDocsUrl - URL, ahol a dokumentumok JSON formátumban érhetők el, alapértelmezettként // localhost: 8080 / v3 / api-docs
- kimeneti fájl név - A fájl neve, ahol a definíciókat tárolják, alapértelmezés szerint openapi.json
- outputDir - Abszolút elérési út annak a könyvtárnak, ahol a dokumentumok vannak tárolva - alapértelmezés szerint, $ {project.build.directory}
7. Automatikus dokumentumgenerálás a JSR-303 babellenőrzéssel
Amikor a modellünk JSR-303 babellenőrzési jegyzeteket tartalmaz, mint pl @Nem nulla, @NotBlank, @Méret, @Min, és @Max, a springdoc-openapi könyvtár felhasználja őket további séma-dokumentumok létrehozására a megfelelő korlátozásokhoz.
Lássunk egy példát a mi használatunkkal Könyv bab:
public class Book {private long id; @NotBlank @Size (min = 0, max = 20) privát karakterlánc címe; @NotBlank @Size (min = 0, max = 30) privát karakterlánc szerző; }
Most a Könyv bab egy kicsit informatívabb:
8. Dokumentáció előállítása a @ControllerAdvice és @ResponseStatus
Használata @ResponseStatus a módszerekről a @RestControllerAdvice osztály automatikusan elkészíti a válaszkódok dokumentációját. Ebben @RestControllerAdvice osztályban a két módszert feljegyzik @ResponseStatus:
@RestControllerAdvice nyilvános osztály GlobalControllerExceptionHandler {@ExceptionHandler (ConversionFailedException.class) @ResponseStatus (HttpStatus.BAD_REQUEST) public ResponseEntity handleConnversion (RuntimeException ex) {return new ResponseEttage (ReturnStesture.ttp; } @ExceptionHandler (BookNotFoundException.class) @ResponseStatus (HttpStatus.NOT_FOUND) public ResponseEntity handleBookNotFound (RuntimeException ex) {return new ResponseEntity (ex.getMessage (), HttpStatus.NOT_FOUND; }}
Ennek eredményeként láthatjuk a 400 és 404 válaszkódok dokumentációját:
9. Dokumentáció előállítása a @Művelet és @ApiResponses
Ezután nézzük meg, hogyan adhatunk hozzá néhány leírást az API-hoz néhány OpenAPI-specifikus kommentár segítségével.
Ennek érdekében jegyzetekkel ellátjuk kontrollerünket / api / book / {id} végpont a @Művelet és @ApiResponses:
@Operation (összefoglaló = "Könyv beszerzése az azonosító alapján") @ApiResponses (érték = {@ApiResponse (responseCode = "200", description = "Megtaláltam a könyvet", content = {@Content (mediaType = "application / json") , schema = @Schema (implementáció = Book.class))}), @ApiResponse (responseCode = "400", description = "Érvénytelen azonosító van megadva, content = @Content), @ApiResponse (responseCode =" 404 ", description = "A könyv nem található", content = @Content)}) @GetMapping ("/ {id}") public Book findById (@Parameter (description = "a keresendő könyv azonosítója") @PathVariable long id) {visszatérési adattár. findById (id) .orElseThrow (() -> new BookNotFoundException ()); }
És itt van a hatás:
Mint láthatjuk, a szöveg, amelyhez hozzáadtuk @Művelet az API működési szintjén van elhelyezve. Hasonlóképpen, a leírás kiegészült különféle @ApiResponse elemei a @ApiResponses a konténer kommentár itt is látható, jelentést adva az API-válaszainknak.
Nyilvánvalóan nem kapunk sémát a fenti 400 és 404 válaszokhoz. Mert definiáltunk egy üreset @Tartalom számukra csak a leírásuk jelenik meg.
10. Kotlin támogatás
Mivel a Spring Boot 2.x első osztályú támogatást nyújt a Kotlin számára, a SpringDoc támogatja a JVM nyelvet a dobozból a Boot 2.x alkalmazásokhoz.
Ahhoz, hogy ezt működés közben lássuk, létrehozunk egy egyszerűt Foo API Kotlinban.
A kezdeti beállítás után hozzáadunk egy adatosztályt és egy vezérlőt. Felvesszük őket a Boot alkalmazásunk egyik alcsomagjába, hogy futtatásakor válasszon minket FooController fel a korábbival együtt BookController:
@Entity adatosztály Foo (@Id val id: Long = 0, @NotBlank @Size (min = 0, max = 50) val name: String = "") @RestController @RequestMapping ("/") class FooController () { val fooList: List = listOf (Foo (1, "one"), Foo (2, "two")) @Operation (összefoglaló = "Get all foos") @ApiResponses (value = [ApiResponse (responseCode = "200"), description = "Talált Foos", content = [(Content (mediaType = "application / json", array = (ArraySchema (schema = Schema (implementáció = Foo :: class)))))]]]), ApiResponse (responseCode = "400 ", description =" Rossz kérés ", content = [Content ()]), ApiResponse (responseCode =" 404 ", description =" Nem találtam Foos ", content = [Content ()])]] @GetMapping (" / foo ") fun getAllFoos (): List = fooList}
Most, amikor elérjük az API dokumentáció URL-jünket, látni fogjuk a Foo API is:
A Kotlin típusok támogatásának fokozása érdekében felvehetjük ezt a függőséget:
org.springdoc springdoc-openapi-kotlin
Ezt követően a Foo sémánk informatívabbnak tűnik. Hasonló, mint akkor, amikor hozzáadtuk a JSR-303 babellenőrzést:
11. Következtetés
Ebben a cikkben megtanultuk a springdoc-openapi beállítását projektjeinkben. Aztán láttuk, hogyan lehet integrálni a springdoc-openapi programot a Swagger felhasználói felületbe. Azt is láttuk, hogyan lehet ezt megtenni a Spring Webflux projektekkel.
Ezután a springdoc-openapi Maven beépülő modult használtuk az API-k OpenAPI-definícióinak előállításához, és láttuk, hogyan lehet kitenni a lapozási és rendezési információkat a Spring Data-ból. Ezt követően megvizsgáltuk, hogy a springdoc-openapi hogyan generálja a dokumentációt automatikusan a JSR 303 bab validációs kommentárok és a @ResponseStatus annotációk @ControllerAdvice osztály.
Ezután megtanultuk, hogyan lehet leírást hozzáadni az API-hoz néhány OpenAPI-specifikus kommentár segítségével. Végül egy pillantást vetettünk az OpenAPI Kotlin támogatására.
A springdoc-openapi az API dokumentációt állítja elő az OpenAPI 3 specifikáció szerint. Ezenkívül kezeli számunkra a Swagger felhasználói felület konfigurációját is, így az API-dokumentumok létrehozása meglehetősen egyszerű feladat.
Mint mindig, a kód elérhető a GitHubon.
REST alsó