Zarábaj až 6 000 € mesačne! Akreditované rekvalifikačné kurzy od 0 €. Viac informácií.

3. diel - Webová API - SOAP, GraphQL, REST a formát JSON Nové

V minulej lekcii, Úvod do REST API a moderných webových aplikácií, sme si vysvetlili, prečo sa moderné aplikácie vytvárajú pomocou API servera a ako taký server funguje.

V dnešnom tutoriále praktického testovania projektov si predstavíme rôzne druhy API, konkrétne REST API, SOAP, GraphQL a formát JSON. Tým sa pripravíme na projekt databázy faktúr, ktorý budeme v tomto kurze testovať.

Druhy webových API

Na webe existuje niekoľko rozšírených spôsobov komunikácie. Sú to:

  • jednoduchá API,
  • API pomocou protokolu SOAP,
  • API pomocou architektúry REST,
  • GraphQL od Facebooku.

Jednoduchá API

CSV API sme si už predstavili na ukážke s kurzami ČNB:

27.12.2024 #250
country|currency|amount|code|exchange_rate
Australia|dollar|1|AUD|15,027
Brazil|real|1|BRL|3,900
Bulgaria|lev|1|BGN|12,886
China|renminbi|1|CNY|3,309
Denmark|krone|1|DKK|3,379
EMU|euro|1|EUR|25,205
Philippines|peso|100|PHP|41,595
Hong Kong|dollar|1|HKD|3,112
India|rupee|100|INR|28,256
Indonesia|rupiah|1000|IDR|1,488
Iceland|krone|100|ISK|17,371
Israel|new shekel|1|ILS|6,570
Japan|yen|100|JPY|15,307
South Africa|rand|1|ZAR|1,291
Canada|dollar|1|CAD|16,802
South Korea|won|100|KRW|1,639
Hungary|forint|100|HUF|6,127
Malaysia|ringgit|1|MYR|5,402
Mexico|peso|1|MXN|1,192
IMF|SDR|1|XDR|31,503
Norway|krone|1|NOK|2,128
New Zealand|dollar|1|NZD|13,622
Poland|zloty|1|PLN|5,895
Romania|leu|1|RON|5,063
Singapore|dollar|1|SGD|17,783
Sweden|krone|1|SEK|2,196
Switzerland|franc|1|CHF|26,821
Thailand|baht|100|THB|71,045
Turkey|lira|100|TRY|68,723
USA|dollar|1|USD|24,157
United Kingdom|pound|1|GBP|30,337

Položky sú na jednotlivých riadkoch a hodnoty sú oddelené nejakým špeciálnym znakom (v CSV s menami kurzu to sú zvislítka - |, na klávesnici sa píšu pomocou AltGr + W). Častejšie sa ale používajú bodkočiarky ;. Na jednoduché API je možné použiť aj formát XML alebo JSON.

Jednoduchá API typicky ponúka len nejaký zoznam dát na stiahnutie, napríklad počasie podľa mesta. Neumožňujú zložitejšiu manipuláciu s dátami.

SOAP

Skratka SOAP znamená Simple Object Access Protocol. Správy posielané pomocou protokolu SOAP sú obvykle založené na XML (čo je značkovací jazyk podobný HTML). Oproti architektúre REST (viď ďalej) je SOAP skôr procedurálna (REST je orientovaný na dáta). To sa prejavuje aj v spôsobe volania API. URL pri používaní SOAP bude typicky obsahovať nejaké sloveso, na rozdiel od REST, kde bude typicky nejaké podstatné meno (v našom prípade to budú podstatné mená persons a invoices, ale o tom neskôr). Jedným z najznámejších použití protokolu SOAP u nás je odosielanie tržieb pri Elektronickej evidencii tržieb (EET).

SOAP požiadavka na zaevidovanie EET tržby bez dlhej hlavičky, ktorú vypustíme, vyzerá takto:

<soap:Body wsu:Id="id-16FE2A6FC1AFE42BE9146412186273614">
    <Sales>
        <Header send_date="2016-09-19T19:06:37+01:00" first_submission="false" message_uuid="9edeb22b-4234-4047-869c-3a76f86c20d3"/><Data total_sales="34113.00" deducted_settlement="679.00" travel_service="5460.00" tax1="-172.39" tax2="-530.73" tax3="975.65" sales_date="2016-01-05T00:30:12+01:00" taxpayer_vat_id="CZ00000019" cash_register_id="/5546/RO24" establishment_id="273" serial_number="0/6460/ZQ42" used_goods1="784.00" used_goods2="967.00" used_goods3="189.00" mode="0" intended_deducted_settlement="324.00" tax_base1="-820.92" tax_base2="-3538.20" tax_base3="9756.46" non_vat_base="3036.00"/>
        <ControlCodes>
            <pkp cipher="RSA2048" digest="SHA256" encoding="base64">W7UlA4hXNsDLvCj/eeRAYeOAsNsgMSdltcJNIW98KQRsfspTMW0Lr/OGQgRHZfO5KjolZgzN3k9mgzrVoX2+N90fCNEnOri2kjrW5vzTgMK6OZ9IryAEg0xFZjjjCQ0qKsQsVi8OLQOn3ZnN/BUGG2SIduER+iIOrhfOmes7OXaa5/2jQSfPTHZHZ/Bxhqld3gL4PHvd7sevZYUupHpE1fM7Uw1+lu8i1YOdghZoMyOfKw7FcqvRJpHrW/JZL5Dr5iCgu5ClmhZrb3hZavsxlDG7P2cUhSQgmEVTxJ2n38q/Cf91KE8e52SODN4Q8BfncXpmtkQ7Go3KsRsY3xN7xg==
            </pkp>
            <bkp digest="SHA1" encoding="base16">1F1A2D90-4EAD34A8-411CFB0B-EB17616E-B2CE8114</bkp>
        </ControlCodes>
    </Sales>
</soap:Body>

SOAP API bohužiaľ nie sú príliš jednoduché a to aj napriek tomu, že majú v názve slovo Simple. Používajú sa skôr v štátnej sfére a finančníctve na robustné projekty a nie sú častou voľbou pre klasické aplikácie.

GraphQL

Pre predstavu, že existujú aj iné aplikačné rozhrania na komunikáciu na webe, si ukážeme ešte GraphQL. To vytvoril a spopularizoval Facebook. GraphQL používa na reprezentáciu informácií koncept sociálnych grafov s vrcholmi a hranami (ako v teórii grafov). Vrcholy sú objekty ako používateľ, fotka, stránka alebo komentár. Hrany sú potom spojenie medzi objektmi ako napríklad komentáre pod fotkou.

Ukážkový dotaz nižšie získa užívateľa s id: "10", jeho meno, email a priateľov, pre ktorých získa ich mená:

{
  user(id: "10") {
    name
    email
    friends {
      name
    }
  }
}

GraphQL využijeme v prípade, keď je otázky zložité formalizovať a treba si pri každej otázke povedať, čo presne nás zaujíma.

REST

REST je v súčasnej dobe veľmi obľúbená architektúra rozhrania. Je to skratka z REpresentational State Transfer – pojmu, ktorý zaviedol vo svojej dizertačnej práci Roy Fielding. To je jeden zo spoluautorov protokolu HTTP, preto neprekvapí, že REST tento protokol používa. REST implementuje štyri základné CRUD operácie. Tieto operácie sú vytvoriť (Create), čítať (Read), zmeniť (Update) a zmazať (Delete). V HTTP protokole im zodpovedajú metódy:

  • GET (prečítať),
  • POST (vytvoriť),
  • PUT (upraviť),
  • DELETE (zmazať).

Práve používanie rôznych HTTP metód je základným princípom REST API. Napríklad by sme nemali odstraňovať dáta cez klasickú GET požiadavku, ktorú používame, keď sa snažíme otvoriť nejakú stránku.

Vďaka štyrom spomínaným metódam je REST rozhranie jednoduché na pochopenie a na používanie. Oproti SOAP je oveľa stručnejšie a teda efektívnejšie. Aj napriek svojej stručnosti každá požiadavka obsahuje všetky informácie potrebné na jeho vybavenie, a server teda nemusí držať žiadny stav (je stateless). Z toho okrem iného vyplýva, že pokiaľ aplikácia potrebuje nejaký stav, musí ho držať klient.

API, ktoré používa rozhranie REST, sa označuje ako RESTful.

API našej aplikácie

V našej databázovej aplikácii budeme testovať funkčnosť práve RESTful API. V aplikácii je použité z vyššie uvedených dôvodov (jednoduchosť, stručnosť) a tiež preto, že potrebujeme nad faktúrami testovať operácie, pre ktoré je REST navrhnuté. Ďalším dôvodom je, že aj keď REST podporuje mnoho formátov, prevláda používanie formátu JSON.

Formát JSON

JSON (skratka odvodená z JavaScript Object Notation) je formát používaný na uchovávanie dát aj na komunikáciu na webe. Pokiaľ poznáte jazyk JavaScript, bude vám syntax JSON povedomá, pretože z neho vychádza. Pre definíciu objektov používame zložené zátvorky {}, pre pole hranaté zátvorky []. Mená vlastností objektov musia byť vždy v dvojitých úvodzovkách a sú povolené iba jednoduché dáta – žiadne výpočty ani volanie funkcií. JSON tiež nesmie obsahovať žiadne komentáre.

Tu je krátka ukážka formátu JSON reprezentujúca faktúru v našej aplikácii databázy faktúr:

{
  "invoiceNumber": 2023001,
  "seller": {
    "name": "John Snow",
    "identificationNumber": "123456789",
    "taxNumber": "EU123456789",
    "accountNumber": "123456700",
    "bankCode": "0100",
    "iban": "EU000123456700",
    "telephone": "111 222 333",
    "mail": "snow@gmail.com",
    "street": "7 Wall Street",
    "zip": "16000",
    "city": "Northern Kingdom",
    "country": "CZECHIA",
    "note": "Wolf",
    "_id": 1
  },
  "buyer": {
    "name": "ICTdemy",
    "identificationNumber": "05861381",
    "taxNumber": "EU05861381",
    "accountNumber": "123456789",
    "bankCode": "5500",
    "iban": "EU000123456789",
    "telephone": "123 123 123",
    "mail": "redaction@ictdemy.com",
    "street": "290/16 Charles Square",
    "zip": "12000",
    "city": "Prague",
    "country": "CZECHIA",
    "note": "The largest IT academy in the Czech Republic.",
    "_id": 3
  },
  "issued": "2023-07-23",
  "dueDate": "2023-07-30",
  "product": "Article",
  "price": 100,
  "vat": 21,
  "note": "Creating educational articles",
  "_id": 4
}

Vidíme tu jeden hlavný objekt definovaný pomocou {}, ktorý reprezentuje faktúru a obsahuje množstvo vlastností. Reťazce sú v úvodzovkách, čísla píšeme bez nich. Hlavný objekt obsahuje ďalšie objekty (odberateľ buyer a dodávateľ seller) zapísaný opäť pomocou {}.

JSON je vhodný pre webové prehliadače, ale je ľahko čitateľný aj človekom.

Dokumentácia k API

Náš server v Python Django musí poskytovať presne to API, s ktorým vie pracovať daný klient. V našom prípade je to API z kurzu Node.js, ktorého rozhranie je kompletne popísané v lekcii API dokumentácie k databáze faktúr. Na túto dokumentáciu sa teraz môžete pozrieť. Naša práca sa bude neustále točiť okolo tohto dokumentu, aby naše endpointy mali správne adresy a prijímali a odosielali JSON v správnom formáte.

Endpointy sú vyústenia nášho API, s ktorými sa dá zvonku komunikovať.

Pri odosielaní požiadavky pomocou RESTful API nám k tomu, aby bola požiadavka spracovaná, tak ako potrebujeme, napomáha správne použitie URL adresy. Napríklad pre prácu s osobami budeme podľa danej dokumentácie neskôr používať adresy popísané v nasledujúcich kapitolách.

POST

Pre vytvorenie novej osoby nám klient pošle POST požiadavku (vytvorenie, zodpovedá CREATE metóde CRUD) na adresu:

/api/persons

Nie je potrebné zadávať id osoby, ide o vytvorenie položky v databáze, databáza si vytvorí id sama.

GET

Pre zoznam všetkých osôb bude klient posielať na náš server GET požiadavky (čítanie, zodpovedá READ metóde CRUD) na adresu:

/api/persons

A pre jednu konkrétnu osobu:

/api/persons/(id)

Výraz (id) vždy nahradíme identifikátorom daného filmu.

PUT

Pre PUT požiadavku upravujúcu danú osobu (editácia, zodpovedá UPDATE metóde CRUD) bude adresa nasledujúca:

/api/persons/(id)

DELETE

A pre DELETE požiadavku (zmazanie, zodpovedá DELETE metóde CRUD) pristúpi klient na adresu:

/api/persons/(id)

To je pre dnešnú lekciu všetko.

V nasledujúcom kvíze, Kvíz - Úvod do testovania, REST API, webová API, si vyskúšame nadobudnuté skúsenosti z predchádzajúcich lekcií.


 

Ako sa ti páči článok?
Pred uložením hodnotenia, popíš prosím autorovi, čo je zleZnakov 0 z 50-500
Predchádzajúci článok
Úvod do REST API a moderných webových aplikácií
Všetky články v sekcii
Praktické testovanie projektov - Manuálne testovanie
Preskočiť článok
(neodporúčame)
Kvíz - Úvod do testovania, REST API, webová API
Článok pre vás napísal David Novák
Avatar
Užívateľské hodnotenie:
Ešte nikto nehodnotil, buď prvý!
Autor se věnuje vývoji webových aplikací v ASP.NET Core MVC
Aktivity