AXIOS API

V systému lze pro volání API třetích stran používat knihovnu curl, a nově od verze TAS 5.7 také knihovnu axios.

Výhody použití AXIOS oproti CURL

  1. Přehlednější zápis
    Axios používá jednoduchý a čitelný zápis (např. axios.get(url) místo několika setOpt volání).
  2. Méně kódu
    Pro běžné operace (GET, POST, PATCH…) není třeba ručně nastavovat typ požadavku, hlavičky nebo formátování těla.
  3. Lepší práce s odpovědí
    Axios automaticky převádí odpovědi na JSON (pokud Content-Type odpovídá) a poskytuje přístup k res.data, res.status, atd.
  4. Snazší údržba a čitelnost pro ostatní
    Konzultanti a vývojáři rychleji pochopí, co kód dělá, protože struktura odpovídá běžnému zápisu v moderním JavaScriptu.

❗ Kdy nelze použít AXIOS

  1. Axios funguje pouze pro HTTP/HTTPS požadavky. Nelze jej použít pro jiné protokoly jako např.:
    1. SMTP (např. odesílání e-mailů)
    2. FTP
    3. IMAP/POP3

V těchto případech je třeba nadále používat knihovnu curl.

🔧 Možnosti použití axios

Axios podporuje všechny běžné HTTP metody:

GET

Slouží k načtení dat z API (např. seznam položek).

axios.getAxios().get('https://api.example.com/items');

POST

Slouží k odeslání dat na server (např. vytvoření nové položky).

axios.getAxios().post('https://api.example.com/items', {
name: 'Nová položka'
});

PUT

Slouží k plné aktualizaci existující položky.

axios.getAxios().put('https://api.example.com/items/123', {
name: 'Aktualizovaná položka'
});

PATCH

Slouží k částečné aktualizaci položky (např. jen jedno pole).

axios.getAxios().patch('https://api.example.com/items/123', {
status: 'aktivní'
});

DELETE

Slouží ke smazání položky.

axios.getAxios().delete('https://api.example.com/items/123');

request – obecné volání (např. pro PATCH, když potřebuješ vlastní metodu)

axios.getAxios().request({
method: 'patch',
url: 'https://api.example.com/items/123',
data: { status: 'hotovo' }
});

📤 Odeslání jednoho souboru (sendFile)

const file = lib.getFileContents('/cesta/k/souboru.txt');

axios.getAxios().post('https://api.example.com/upload', file, {
headers: {
'Content-Type': 'application/octet-stream'
}
});

📤 Odeslání více souborů (sendFiles) přes FormData

const FormData = require('form-data');
const form = new FormData();

form.append('file1', lib.getFileContents('/cesta/k/soubor1.jpg'));
form.append('file2', lib.getFileContents('/cesta/k/soubor2.jpg'));

axios.getAxios().post('https://api.example.com/upload', form, {
headers: form.getHeaders()
});

📝 Odeslání formulářových dat (sendFormData)

const FormData = require('form-data');
const form = new FormData();

form.append('name', 'Test');
form.append('email', 'test@example.com');

axios.getAxios().post('https://api.example.com/form', form, {
headers: form.getHeaders()
});

➕ Přidání souboru do FormData (addFileToFormData)

form.append('file', lib.getFileContents('/cesta/k/souboru.pdf'));

➕ Přidání textového pole do FormData (addFieldToFormData)

form.append('description', 'Nahrávám soubor k článku');

🔄 Zpracování odpovědi

Axios vrací odpověď jako objekt, např.:

const response = axios.getAxios().get(url);
proc.warn(response.data); // data z API

Vlastnosti AXIOS

  • Timeout - default timeout je 0, v tomto případě pak přichází na řadu timeout calculations (default 120 s)
  • Throw error - v případě jiného response status než 200 se throwne odpovídající error.
  • Buffer.from
AXIOS používá nativně JSON jako formát pro předávání dat, pokud je potřeba poslat např. XML, plainText apod., je potřeba říct aby AXIOS netransformoval data, používá se k tomu Buffer.from

Tato funkce převádí běžný textový řetězec (string) na binární data (Buffer) v kódování UTF-8. Používá se pro správné odesílání XML nebo jiných textových dat přes AXIOS.

Příklad:

const xml = '<soap>...</soap>';
const payload = Buffer.from(xml, 'utf-8');

Příklady použití AXIOS

Použití GET pro získání dat z ČNB
const url = `https://www.cnb.cz/cs/financni-trhy/devizovy-trh/kurzy-devizoveho-trhu/kurzy-devizoveho-trhu/denni_kurz.txt?date=${formatDate}`;
const body = axios.getAxios().get(url);
proc.warn(body);

Použití PATCH pro update dat na docs.teamassistant.app
function patchMainBody(articleId, newBody) {
const url = `https://api.helpdocs.io/v1/article/${articleId}`;
const payload = { body: newBody };

const requester = axios.getAxios({
timeout: 10000,
headers: {
'Authorization': 'Bearer xxxxxxxx'
}
});

return requester.patch(url, payload);
}

🔍Rozdíly mezi použitím CURL a AXIOS - příklady

Volání kurzů ČNB

CURL

function rateCNB(exchangeRateDate, currency, reportingCurrency) {    
let formatDate = lib.format(exchangeRateDate, "d.m.Y");

curl.start();
curl.setOpt('CUSTOMREQUEST', 'GET');
curl.setOpt('FOLLOWLOCATION', true);
curl.setOpt('FAILONERROR', false);
curl.setOpt('SSL_VERIFYPEER', false);
curl.setOpt('SSL_VERIFYHOST', false);
curl.setOpt('TIMEOUT', 30);
curl.setOpt('HTTPHEADER', [
'Content-Type: application/json',
'Accept: application/json'
]);

curl.setOpt('URL', `https://www.cnb.cz/cs/financni-trhy/devizovy-trh/kurzy-devizoveho-trhu/kurzy-devizoveho-trhu/denni_kurz.txt?date=${formatDate}`);
var crossRate = curl.perform();
//search for specific currency
try {
const body = crossRate.data;
...

AXIOS

function rateCNB(exchangeRateDate, currency, reportingCurrency) {
let formatDate = lib.format(exchangeRateDate, "d.m.Y");

const url = `https://www.cnb.cz/cs/financni-trhy/devizovy-trh/kurzy-devizoveho-trhu/kurzy-devizoveho-trhu/denni_kurz.txt?date=${formatDate}`;

const body = axios.getAxios().get(url);
//search for specific currency
try {
const rows = body.split('\n');
...

Frantisek Brych Updated by Frantisek Brych

DB View

Contact

Team assistant (opens in a new tab)

Powered by HelpDocs (opens in a new tab)