Jdi na navigaci předmětu

Nástroje pro vývoj - volání API

  • curl: CLI rozhraní +knihovna libcurl
  • Postman: GUI (nainstalován i v učebnách)
  • GuzzleHttp: PHP knihovna
  • a mnoho dalších nástrojů

curl

  • Soubor nástrojů pro stahování dat skrz počítačovou síť
    • Rozhraní pro příkazovou řádku curl
    • Knihovna libcurl
  • Zahrnuje podporu pro HTTP(S), ale i další protokoly

Příkazová řádka

  • Možné použít pro ladění jednotlivých HTTP požadavků
  • Vyvaruji se rizika, že prohlížeč nevědomky přidá nebo nepoužije nějakou hlavičku
  • Nejjednodušší použití: curl URL (vypíše obsah stažený z URL na standardní výstup)

Příklad použití:

$ curl 'https://cs.wikipedia.org/w/api.php?action=query&meta=siteinfo&siprop=statistics&format=json&formatversion=2' | jq .
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100   227  100   227    0     0    806      0 --:--:-- --:--:-- --:--:--   807
{
  "batchcomplete": true,
  "query": {
    "statistics": {
      "pages": 1607098,
      "articles": 576412,
      "edits": 25155019,
      "images": 1,
      "users": 718162,
      "activeusers": 4413,
      "admins": 33,
      "jobs": 0,
      "cirrussearch-article-words": 279411484,
      "queued-massmessages": 0
    }
  }
}
$

curl umí i vypsat podrobné informace o průběhu požadavku pro účely debugování:

Příklad podrobného výpisu z nástroje curl
$ curl -v -s 'https://cs.wikipedia.org/w/api.php?action=query&meta=siteinfo&siprop=statistics&format=json&formatversion=2' | jq .
* Host cs.wikipedia.org:443 was resolved.
* IPv6: (none)
* IPv4: 185.15.58.224
*   Trying 185.15.58.224:443...
* Connected to cs.wikipedia.org (185.15.58.224) port 443
* ALPN: curl offers h2,http/1.1
* (304) (OUT), TLS handshake, Client hello (1):
} [321 bytes data]
*  CAfile: /etc/ssl/cert.pem
*  CApath: none
* (304) (IN), TLS handshake, Server hello (2):
{ [122 bytes data]
* (304) (IN), TLS handshake, Unknown (8):
{ [19 bytes data]
* (304) (IN), TLS handshake, Certificate (11):
{ [2768 bytes data]
* (304) (IN), TLS handshake, CERT verify (15):
{ [79 bytes data]
* (304) (IN), TLS handshake, Finished (20):
{ [36 bytes data]
* (304) (OUT), TLS handshake, Finished (20):
} [36 bytes data]
* SSL connection using TLSv1.3 / AEAD-CHACHA20-POLY1305-SHA256 / [blank] / UNDEF
* ALPN: server accepted h2
* Server certificate: 1
*  subject: CN=*.wikipedia.org
*  start date: Aug 10 23:56:29 2025 GMT
*  expire date: Nov  8 23:56:28 2025 GMT
*  subjectAltName: host "cs.wikipedia.org" matched cert's "*.wikipedia.org"
*  issuer: C=US; O=Let's Encrypt; CN=E6
*  SSL certificate verify ok.
* using HTTP/2
* [HTTP/2] [1] OPENED stream for https://cs.wikipedia.org/w/api.php?action=query&meta=siteinfo&siprop=statistics&format=json&formatversion=2
* [HTTP/2] [1] [:method: GET]
* [HTTP/2] [1] [:scheme: https]
* [HTTP/2] [1] [:authority: cs.wikipedia.org]
* [HTTP/2] [1] [:path: /w/api.php?action=query&meta=siteinfo&siprop=statistics&format=json&formatversion=2]
* [HTTP/2] [1] [user-agent: curl/8.7.1]
* [HTTP/2] [1] [accept: */*]
> GET /w/api.php?action=query&meta=siteinfo&siprop=statistics&format=json&formatversion=2 HTTP/2 2
> Host: cs.wikipedia.org
> User-Agent: curl/8.7.1
> Accept: */*
>
* Request completely sent off
< HTTP/2 200 3
< date: Fri, 05 Sep 2025 16:11:07 GMT
< server: mw-api-ext.eqiad.canary-784b55bbb-grr4d
< x-content-type-options: nosniff
< x-search-id: brspv0aw0ummbqyo5jlup71bn
< content-security-policy: default-src 'self'; script-src 'none'; object-src 'none'
< x-frame-options: DENY
< content-disposition: inline; filename=api-result.json
< cache-control: private, must-revalidate, max-age=0
< content-type: application/json; charset=utf-8
< age: 0
< vary: Accept-Encoding,X-Subdomain,Treat-as-Untrusted,X-Forwarded-Proto,Cookie,Authorization
< x-cache: cp6013 miss, cp6011 pass
< x-cache-status: pass
< server-timing: cache;desc="pass", host;desc="cp6011"
< strict-transport-security: max-age=106384710; includeSubDomains; preload
< report-to: { "group": "wm_nel", "max_age": 604800, "endpoints": [{ "url": "https://intake-logging.wikimedia.org/v1/events?stream=w3c.reportingapi.network_error&schema_uri=/w3c/reportingapi/network_error/1.0.0" }] }
< nel: { "report_to": "wm_nel", "max_age": 604800, "failure_fraction": 0.05, "success_fraction": 0.0}
< set-cookie: WMF-Last-Access=05-Sep-2025;Path=/;HttpOnly;secure;Expires=Tue, 07 Oct 2025 12:00:00 GMT
< set-cookie: WMF-Last-Access-Global=05-Sep-2025;Path=/;Domain=.wikipedia.org;HttpOnly;secure;Expires=Tue, 07 Oct 2025 12:00:00 GMT
< x-client-ip: 147.32.232.150
< set-cookie: GeoIP=CZ:10:Prague:50.11:14.41:v4; Path=/; secure; Domain=.wikipedia.org
< set-cookie: NetworkProbeLimit=0.001;Path=/;Secure;SameSite=None;Max-Age=3600
< set-cookie: WMF-Uniq=2b8TUQasB3AaeKgF3XzQTwJlAAAAAFvd5jqHmoUoLECm3Rqmo7oBdVKgzaEe0bof;Domain=.wikipedia.org;Path=/;HttpOnly;secure;SameSite=None;Expires=Sat, 05 Sep 2026 00:00:00 GMT
< content-length: 227
<
{ [227 bytes data]
* Connection #0 to host cs.wikipedia.org left intact
{ 4
  "batchcomplete": true,
  "query": {
    "statistics": {
      "pages": 1607110,
      "articles": 576412,
      "edits": 25155040,
      "images": 1,
      "users": 718164,
      "activeusers": 4413,
      "admins": 33,
      "jobs": 0,
      "cirrussearch-article-words": 279411484,
      "queued-massmessages": 0
    }
  }
}
$
  1. Výpis certifikátu serveru
  2. Textová podoba zaslaného HTTP požadavku, vč. všech hlaviček
  3. Kompletní HTTP odpověď, vč. všech hlaviček zaslaných serverem
  4. Začátek těla HTTP odpovědi

Užitečné parametry (výběr)

Níže uvedený seznam parametrů zahrnuje parametry často používané autory materiálů a neklade si nárok na úplnost[1]. Úplný seznam naleznete v manuálové stránce příkazu curl, případně pomocí parametru --help.

  • --request / -X: volba HTTP metody
  • --data / -d: pro předání dat
  • --silent / -s: potlačení statistiky o rychlosti stahování
  • --output / -o: název souboru, kam se zapíše stažený obsah (výchozí je stdin)
  • --verbose / -v: zobrazí detailní informace o navazování spojení
  • --help: Zobrazí nápovědu

Knihovna libcurl

TODO: doplnit

Postman

Oficiální stránky

Zprovoznění bez účtu

V Postmanu si lze vytvořit účet a ukládat si tak oblíbená API volání či přihlašovací údaje. Není to ale nutné, službu jednoduchého API klienta Postman umí zastat i bez přihlášení, viz obrázkový návod níže.

postman 01 highlighted
Obrázek 1. Volba Continue without an account
postman 02 highlighted
Obrázek 2. Potvrdit, že nám skutečně stačí Lightweight API client

Použití

Postman umožňuje nastavit:

  • HTTP metodu,
  • cílovou URL adresu,
  • query požadavky,
  • data (v různých formátech)
    • form-data: pro simulaci vyplněného HTTP formuláře
    • raw: surová textová data, možné vyplnit JSON, XML či jiná textová data
    • binary: surová binární data
postman usage
Obrázek 3. Příklad použití nástroje Postman

Knihovna GuzzleHttp

TODO: doplnit


  1. Nástroj curl obsahuje více než 250 různých dokumentovaných parametrů, kterými je jeho funkčnost možné pozměnit.