Bevezetés a tavaszi REST Docs-ba
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 tavaszi REST Docs pontos és olvasható dokumentációt generál a RESTful szolgáltatásokhoz. Kombinálja a kézzel írt dokumentációt a Spring tesztekkel készített, automatikusan létrehozott dokumentumrészletekkel.
2. Előnyök
A projekt egyik fő filozófiája a tesztek használata a dokumentáció elkészítéséhez. Ez biztosítja, hogy a létrehozott dokumentáció mindig pontosan megfeleljen az API tényleges viselkedésének. Ezenkívül a kimenetet készen áll az Asciidoctor, az AsciiDoc szintaxisa köré összpontosító kiadói eszközlánc feldolgozására. Ez ugyanaz az eszköz, amelyet a Spring Framework dokumentációjának létrehozásához használnak.
Ezek a megközelítések csökkentik az egyéb keretek által előírt korlátozásokat. A Spring REST Docs pontos, tömör és jól felépített dokumentációt készít. Ez a dokumentáció lehetővé teszi, hogy a webszolgáltatás fogyasztói minimális felhajtás mellett megszerezzék a szükséges információkat.
Az eszköznek van néhány egyéb előnye, például:
- göndör és http kérelem részleteket generál
- könnyen csomagolható dokumentáció a projektek jar fájljába
- könnyen hozzáadhat további információkat a kivonatokhoz
- támogatja a JSON-t és az XML-t is
A kivonatokat előállító tesztek a Spring MVC Test támogatás, a Spring Webflux segítségével írhatók WebTestClient vagy REST-biztosított.
Példáinkban a Spring MVC teszteket fogjuk használni, de a többi keretrendszer használata nagyon hasonló.
3. Függőségek
A Spring REST Docs projektben való használatának ideális módja egy függőségkezelő rendszer használata. Itt a Maven-t használjuk felépítési eszközként, így az alábbi függőség átmásolható és beilleszthető a POM-ba:
org.springframework.restdocs spring-restdocs-mockmvc 2.0.4. KÖZLEMÉNY
A függőség új verzióját itt is ellenőrizheti.
Példánkban szükségünk van a tavasz-restdocs-mockmvc függőség, mivel tesztjeink létrehozásához a Spring MVC teszt támogatást használjuk.
Ha teszteket akarunk írni a WebTestClient vagy a REST Assured használatával, akkor szükségünk lesz a tavaszi-restdocs-webtestclient és a rugó-restdocs-restassured függőségekre.
4. Konfiguráció
Mint említettük, a Spring MVC Test keretrendszert fogjuk használni a REST szolgáltatásokkal kapcsolatos kérések benyújtásához, amelyeket dokumentálni kell. A teszt futtatása dokumentációs részleteket állít elő a kéréshez és az ebből adódó válaszhoz.
A könyvtárat mind a JUnit 4, mind a JUnit 5 tesztekkel használhatjuk. Nézzük meg az egyes konfigurációkat.
4.1. JUnit 4 konfiguráció
A JUnit 4 tesztek dokumentációs kivonatainak előállításának legelső lépése a nyilvánosságot hirdet JUnitRestDocumentation mező, amelyet JUnit-ként jegyeznek fel @Szabály.
A JUnitRestDocumentation A szabály azzal a kimeneti könyvtárral van konfigurálva, amelybe a létrehozott kódrészleteket el kell menteni. Ez a könyvtár lehet például a Maven kiépítési könyvtár:
@Rule public JUnitRestDocumentation restDocumentation = new JUnitRestDocumentation ("target / generated-snippets");
Ezután beállítottuk a MockMvc kontextusban, hogy konfigurálva legyen dokumentáció készítésére:
@Autowired private WebApplicationContext kontextus; privát MockMvc mockMvc; @ Mielőtt nyilvános void setUp () {this.mockMvc = MockMvcBuilders.webAppContextSetup (this.context) .apply (dokumentációKonfiguráció (this.restDocumentation)) .build (); }
A MockMvc az objektum konfigurálása egy MockMvc használatávalRestDocumentationConfigurer. Ennek az osztálynak a példánya beszerezhető a statikusból dokumentáció: Konfiguráció () módszer be org.springframework.restdocs.mockmvc.MockMvcRestDocumentation.
4.2. 5. JUnit konfiguráció
A JUnit 5 teszt használatához ki kell terjesztenünk a tesztet a RestDocumentationExtension osztály:
@ExtendWith ({RestDocumentationExtension.class, SpringExtension.class}) @SpringBootTest nyilvános osztály ApiDocumentationJUnit5IntegrationTest {// ...}
Ez az osztály automatikusan a / target / generated-snippets kimeneti könyvtár a Maven használatakor, vagy / build / generál-kivonatok Gradle számára.
Ezután fel kell állítanunk a MockMvc például egy @BeforeEach módszer:
@BeforeEach public void setUp (WebApplicationContext webApplicationContext, RestDocumentationContextProvider restDocumentation) {this.mockMvc = MockMvcBuilders.webAppContextSetup (webApplicationContext) .apply (dokumentációConfiguration) (restDoc) }
Ha nem a JUnit-et használjuk a tesztekhez, akkor a ManualRestDocumentation osztály.
5. Pihenő szolgáltatás
Hozzunk létre egy CRUD RESTful szolgáltatást, amelyet dokumentálhatunk:
@RestController @RequestMapping ("/ crud") public class CRUDController {@GetMapping public List read (@RequestBody CrudInput crudInput) {List returnList = new ArrayList (); returnList.add (crudInput); return returnList; } @ResponseStatus (HttpStatus.CREATED) @PostMapping public HttpHeaders save (@RequestBody CrudInput crudInput) {HttpHeaders httpHeaders = new HttpHeaders (); httpHeaders.setLocation (linkTo (CRUDController.class) .slash (crudInput.getTitle ()). toUri ()); visszatér httpHeaders; } @DeleteMapping ("/ {id}") public void delete (@PathVariable ("id") long id) {// törlés}}
Ezután tegyünk hozzá egy IndexController amely egy oldalt ad vissza a linkre a CRUD vezérlő alapvégpont:
@RestController @RequestMapping ("/") public class IndexController {static class CustomRepresentationModel extends RepresentationModel {public CustomRepresentationModel (Link initialLink) {super (initialLink); }} @GetMapping public CustomRepresentationModel index () {return new CustomRepresentationModel (linkTo (CRUDController.class) .withRel ("crud")); }}
6. JUnit tesztek
Visszatérve a tesztekre, használhatjuk a MockMvc például, hogy felhívjuk szolgáltatásainkat, és dokumentáljuk a kérést és a választ.
Első, hogy megbizonyosodjon mindenről MockMvc a hívás automatikusan dokumentálódik minden további konfiguráció nélkül, használhatjuk a alwaysDo () módszer:
this.mockMvc = MockMvcBuilders // ... .alwaysDo (document ("{method-name}", preprocessRequest (prettyPrint ()), preprocessResponse (prettyPrint ()))) .build ();
Ez a beállítás biztosítja, hogy mindenki mindenkinek MockMvc hívás esetén az alapértelmezett kivonatok a tesztmódszer nevét tartalmazó mappában jönnek létre. Továbbá a prettyPrint () az előfeldolgozó könnyebben olvasható módon jeleníti meg a kivonatokat.
Folytassuk néhány hívásunk testreszabását.
A hivatkozást tartalmazó indexoldalunk dokumentálásához használhatjuk a statikusat linkek () módszer:
A @Test public void indexExample () dobja a Kivételt {this.mockMvc.perform (get ("/")). AndExpect (status (). IsOk ()) .andDo (document ("index", links (linkWithRel ("crud") ) .description ("A CRUD erőforrás")), responseFields (subsectionWithPath ("_ links") .description ("Linkek más forrásokhoz")) responseHeaders (headerWithName ("Content-Type") .description ("The Content-Type of a hasznos teher ")))); }
Itt használjuk a linkWithRel () módszer a hivatkozás dokumentálására / nyers.
Hozzáadni a Tartalom típus fejléc a válaszhoz, amelyet a headerWithName () metódus és hozzáadás a responseHeaders () módszer.
A válasz hasznos terhelését a responseFields () módszer. Ezt fel lehet használni a válasz bonyolultabb alszakaszának vagy egyetlen mező dokumentálásához az subsectionWithPath () vagy fieldWithPath () módszerekkel.
A válasz hasznos terheléséhez hasonlóan segítségével is dokumentálhatjuk a kérelem hasznos terhelését requestPayload ():
@Test public void crudCreateExample () dobja a Kivételt {Map crud = new HashMap (); crud.put ("cím", "Minta modell"); crud.put ("body", "//www.baeldung.com/"); this.mockMvc.perform (post ("/ crud"). contentType (MediaTypes.HAL_JSON) .content (this.objectMapper.writeValueAsString (crud))) .andExpect (status (). isCreated ()) .andDo (dokumentum (" create-crud-example ", requestFields (fieldWithPath (" id "). description (" A bemenet azonosítója "), fieldWithPath (" title "). leírás (" A bemenet címe "), fieldWithPath (" body " ) .leírás ("A bemenet törzse"),)))); }
Ebben a példában dokumentáltuk a POST kérelmünket, amely a CrudInput modell címsorral és törzsmezőkkel, és CREATED állapotot küld. Minden mezőt a fieldWithPath () módszer.
A kérelem és az elérési út paraméterének dokumentálásához használhatjuk a requestParameters () és pathParameters () mód. Mindkét módszer a paraméterWithName () módszer az egyes paraméterek leírására:
A @Test public void crudDeleteExample () dobja a Kivételt {this.mockMvc.perform (delete ("/ crud / {id}", 10)). AndExpect (status (). IsOk ()) .andDo (document ("crud-delete) -example ", pathParameters (paraméterWithName (" id "). leírás (" A törlendő bemenet azonosítója "))); }
Itt dokumentáltuk a törlés végpontunkat, amely egy id elérési út paraméter.
A tavaszi REST Docs projekt még erőteljesebb dokumentációs funkciókat tartalmaz, mint például a terepi korlátozások és a dokumentációban megtalálható kérési részek.
7. Kimenet
Amint a build sikeresen fut, a REST docs kivonatok kimenete létrejön, és a rendszer elmenti őket target / generált-kivonatok mappa:
A létrehozott kimenet tartalmazza a szolgáltatással kapcsolatos információkat, a REST szolgáltatás hívását, például a „curl” hívásokat, a HTTP kérést és a REST szolgáltatás válaszát, valamint a szolgáltatásra mutató linkeket / végpontokat:
CURL parancs
---- $ curl '// localhost: 8080 /' -i ----
HTTP - REST válasz
[forrás, http, options = "nowrap"] ---- HTTP / 1.1 200 OK Tartalom-típus: application / hal + json; charset = UTF-8 Tartalom-hossz: 93 {"_links": {"crud": {"href": "// localhost: 8080 / crud"}}} ----
8. Részletek használata dokumentáció készítéséhez
A töredékek nagyobb dokumentumban történő használatához hivatkozhat rájuk az Asciidoc segítségével magába foglalja. Esetünkben dokumentumot hoztunk létre src / docs hívott api-útmutató.adoc:
Abban a dokumentumban, ha hivatkozni akartunk a linkek kódrészletére, helyőrzővel felvehetjük {részletek} amelyet Maven váltja fel, amikor feldolgozza a dokumentumot:
==== A linkek tartalmazzák a következőt: :: {kivonatok} /index-example/linkek.adoc []
9. Asciidocs Maven beépülő modulok
Az Asciidoc API-útmutatójának olvasható formátumba konvertálásához hozzáadhatunk egy Maven plugint a build életciklusához. Ennek engedélyezéséhez több lépés van:
- Alkalmazza az Asciidoctor plugint a pom.xml
- Adjon hozzá egy függőséget tavasz-restdocs-mockmvc ban,-ben testCompile konfiguráció a függőségek szakaszban említett módon
- Konfiguráljon egy tulajdonságot a létrehozott kivonatok kimeneti helyének meghatározásához
- Konfigurálja a teszt feladat a kivonatok könyvtárának hozzáadásához kimenetként
- Konfigurálja a asciidoctor feladat
- Adjon meg egy nevű attribútumot részleteket amelyek akkor használhatók, ha a létrehozott részleteket felveszik a dokumentációba
- Tegye függővé a feladatot a teszt feladatot, hogy a tesztek a dokumentáció létrehozása előtt fussanak
- Konfigurálja a részleteket könyvtár bemenetként. Az összes létrehozott kivonat ebben a könyvtárban jön létre
Adja hozzá a kódrészlet könyvtárat tulajdonságként a pom.xml így az Asciidoctor beépülő modul ezt az elérési utat használhatja a kódrészletek létrehozásához ebben a mappában:
$ {project.build.directory} / generált kivonatok
A Maven plugin konfigurációja a pom.xml az Asciidoc kódrészletek létrehozása a buildből az alábbiak szerint történik:
org.asciidoctor asciidoctor-maven-plugin 1.5.6 generator-docs csomag process-asciidoc html könyv $ {snippetsDirectory} src / docs / asciidocs target / generált-docs
10. API Doc Generation folyamat
Amikor a Maven összeállítás fut és a tesztek végrehajtásra kerülnek, az összes kivonatot a konfigurált kódrészlet mappában generálja target / generált-kivonatok Könyvtár. A kivonatok létrehozása után a készítési folyamat HTML kimenetet generál.
A létrehozott HTML fájl formázott és olvasható, így a REST dokumentáció használatra kész. A Maven build futtatásakor a dokumentumok a legújabb frissítésekkel is elkészülnek.
11. Következtetés
A dokumentáció hiánya jobb, mint a hibás dokumentáció, de a Spring REST dokumentumok segítenek pontos dokumentáció készítésében a RESTful szolgáltatásokhoz.
Hivatalos tavaszi projektként három tesztkönyvtár használatával éri el céljait: Spring MVC Test, WebTestClient és Pihenés biztosított. A dokumentáció előállításának ez a módszere segíthet a RESTful API-k fejlesztésének és dokumentálásának tesztvezérelt megközelítésében.
A cikk alapján talál egy példaprojektet a hivatkozott GitHub-tárházban.
REST alsó