Synchronní razítkování souborů
Krok č. 1) Přihlášení
Pro přístup k API je nutné nejprve získat přístupový token pomocí koncového bodu pro přihlášení externího informačního systému.
Koncový bod: /api/sofa/v1/auth/extis/login
Metoda: POST
Hlavičky:
-
Accept: application/json
-
Content-Type: application/json
Parametry:
-
login … uživatelské jméno externího informačního systému.
-
password … heslo externího informačního systému.
Příklad:
POST /api/sofa/v1/auth/extis/login HTTP/1.1
Host: sofaws.602.cz
Accept: application/json
Content-Length: …
Content-Type: application/json
{
"login": "48a0ecdd540849f0af416307406467f0",
"password": "wau3S99vx2d_NW2P"
}
Výsledek:
{
"token": "eyJhbGciOiJBMjU2…"
}
Krok č. 2) Nahrání souborů
V dalším kroku je nutné nahrát dokumenty jeden po druhém do výchozího úložiště (default) pomocí koncového bodu File API. Výsledkem bude seznam identifikátorů souborů použitý v dalším kroku.
Koncový bod: /api/sofa/v2/file?storeId=default
Metoda: POST
Hlavičky:
-
Accept: application/json
-
Authorization: Bearer <token>
-
Content-Type: multipart/form-data
Parametry:
-
file … soubor dokumentu (ve verzi 2.0 se již nepoužívá hlavička FileId s parametry kódovanými ve formátu JSON, ale přenáší se standardní cestou pro upload souborů podle RFC 2854, tzn. že se název souboru uvádí v hlavičce Content-Disposition, velikost souboru v hlavičce Content-Length a typ souboru v hlavičce Content-Type).
Příklad:
POST /api/sofa/v2/file?storeId=default HTTP/1.1
Host: sofaws.602.cz
Accept: application/json
Authorization: Bearer eyJhbGciOiJBMjU2…
Content-Length: …
Content-Type: multipart/form-data; boundary="-----086735ab-f408-405e-9628-4eb525d56d71"
-------086735ab-f408-405e-9628-4eb525d56d71
Content-Disposition: form-data; name="file"; filename="Document.pdf"
Content-Length: …
Content-Type: application/pdf
…binary file content…
-------086735ab-f408-405e-9628-4eb525d56d71--
Výsledek:
{
"fileId": "eyJhbGciOiJIUzI1…"
}
Krok č. 3) Spuštění GraphQL mutace
Pro razítkování dokumentů je nutné zavolat koncový bod GraphQL API s mutací pro razítkování souborů, které předáme identifikátor dokumentu a parametry razítkování. Výsledkem je identifikátor dokumentu opatřeného časovým razítkem. Aktuálně jsou podporované následující parametry:
-
algorithmId … identifikátor algoritmu, např. SHA-256 nebo SHA-512 (výchozí hodnota: SHA-256).
Koncový bod: /api/sofa/v1/graphql
Metoda: POST
Hlavičky:
-
Accept: application/json
-
Authorization: Bearer <token>
-
Content-Type: application/json
GraphQL operace:
mutation timestampFile($file: TimestampOperationParameters!) {
signing {
timestampFile(file: $file)
}
}
Příklad:
POST /api/sofa/v1/graphql HTTP/1.1
Host: sofaws.602.cz
Accept: application/json
Authorization: Bearer eyJhbGciOiJBMjU2…
Content-Length: …
Content-Type: application/json
{
"operationName": "timestampFile",
"query": "mutation timestampFile(\n $file: …",
"variables": {
"file": {
"fileId": "eyJhbGciOiJIUzI1…",
"algorithmId": null
}
}
}
Výsledek:
{
"data": {
"signing": {
"timestampFile": "eyJhbGciOiJIUzI1…"
}
}
}
Krok č. 4) Stažení souborů
Posledním krokem je stažení podepsaných souborů jeden po druhém pomocí koncového bodu File API:
Koncový bod: /api/sofa/v2/file
Metoda: GET
Hlavičky:
-
Authorization: Bearer <token>
Parametry:
-
fileId … identifikátor stahovaného dokumentu.
Příklad:
GET /api/sofa/v2/file?fileId=eyJhbGciOiJIUzI1…
Host: sofaws.602.cz
Authorization: Bearer eyJhbGciOiJBMjU2…
Výsledek:
Výsledkem je stahovaný dokument.
Název souboru lze získat buď standardně z hlavičky Content-Disposition, nebo File API v2 nastavuje pro snazší zpracování hlavičku X-Sofa-FileName. |