OpenAPI JSON objektumok, mint lekérdezési paraméterek

1. Áttekintés

Ebben az oktatóanyagban megtanuljuk, hogyan kell működni A JSON objektumok lekérdezési paraméterként az OpenAPI használatával.

2. Lekérdezési paraméterek az OpenAPI 2-ben

Az OpenAPI 2 nem támogatja az objektumokat lekérdezési paraméterként; csak a primitív értékek és a primitív tömbök támogatottak.

Emiatt inkább JSON paraméterünket akarjuk definiálni a-ként húr.

Ahhoz, hogy ezt működés közben lássuk, definiáljunk egy paramétert params mint a húr, annak ellenére, hogy háttérképünkben JSON néven elemezzük:

swagger: "2.0" ... elérési utak: / jegyek: get: címkék: - "jegyek" összefoglaló: "JSON objektum küldése lekérdezési paraméternek" paraméterek: - név: "params" itt: "útvonal" leírás: "{ \ "type \": \ "foo \", \ "color \": \ "green \"} "kötelező: true type:" string " 

Így ahelyett, hogy:

GET // localhost: 8080 / api / jegyek? Type = foo & color = green

jól csinál:

GET // localhost: 8080 / api / tickets? Params = {"type": "foo", "color": "green"}

3. Lekérdezési paraméterek az OpenAPI 3-ban

Az OpenAPI 3 az objektumok támogatását vezeti be lekérdezési paraméterként.

A JSON paraméter megadásához hozzá kell adnunk a tartalom szakasz a definíciónkhoz, amely tartalmazza a MIME típust és sémát:

openapi: 3.0.1 ... elérési utak: / jegyek: get: címkék: - jegyek összefoglalása: JSON objektum küldése lekérdezés param paramétereként: - név: paraméterek: lekérdezés leírás: '{"type": "foo", "color": "green"} 'kötelező: true schema: type: object properties: type: type: "string" color: type: "string" 

Kérésünk most úgy nézhet ki:

GET // localhost: 8080 / api / jegyek? Params [type] = foo¶ms [color] = zöld

És valójában még mindig így nézhet ki:

GET // localhost: 8080 / api / tickets? Params = {"type": "foo", "color": "green"}

Az első lehetőség lehetővé teszi számunkra a paraméter-ellenőrzések használatát, amelyek a kérés benyújtása előtt értesítenek bennünket, ha valami nincs rendben.

A második opcióval ezzel kereskedünk, hogy nagyobb legyen a háttérellenőrzés, valamint az OpenAPI 2 kompatibilitás.

4. URL kódolás

Fontos megjegyezni, hogy a kérésparaméterek JSON-objektumként történő továbbításakor dönteni kell a paraméter URL-kódolásáról a biztonságos szállítás érdekében.

Tehát a következő URL elküldéséhez:

GET / jegyek? Params = {"type": "foo", "color": "green"}

Valójában tennénk:

GET / jegyek? Paramek =% 7B% 22type% 22% 3A% 22foo% 22% 2C% 22color% 22% 3A% 22green% 22% 7D

5. Korlátozások

Tartsuk szem előtt a JSON objektum lekérdezési paraméterek halmazaként történő továbbításának korlátait is:

  • csökkentett biztonság
  • a paraméterek korlátozott hossza

Például, minél több adatot helyezünk el egy lekérdezési paraméterben, annál több jelenik meg a kiszolgáló naplóiban és annál nagyobb az érzékeny adatok expozíciójának lehetősége.

Ezenkívül egyetlen lekérdezési paraméter nem lehet hosszabb 2048 karakternél. Természetesen mindannyian el tudunk képzelni olyan forgatókönyveket, ahol a JSON-objektumaink ennél nagyobbak. Gyakorlatilag a JSON karakterláncunk URL-kódolása valójában körülbelül 1000 karakterre korlátoz minket a hasznos terhelésre.

Az egyik megoldás nagyobb JSON objektumok küldése a testbe. Ily módon kijavítjuk a biztonsági problémát és a JSON hosszkorlátozását is.

Tulajdonképpen, A GET vagy a POST egyaránt támogatja ezt. A GET-en keresztüli testküldés egyik oka az API RESTful szemantikájának fenntartása.

Természetesen ez egy kicsit szokatlan és nem általánosan támogatott. Például egyes JavaScript HTTP könyvtárak nem engedik meg, hogy a GET kérések kérelem törzset kapjanak.

Röviden, ez a választás kompromisszumot jelent a szemantika és az egyetemes kompatibilitás között.

6. Következtetés

Összefoglalva, ebben a cikkben megtanultuk, hogyan adhatunk meg JSON objektumokat lekérdezési paraméterként az OpenAPI használatával. Ezután megfigyeltük a háttérrendszer néhány következményét.

E példák teljes OpenAPI-definíciói a GitHub oldalon érhetők el.