Symfonia eDokumenty udostępnia API (Application Programming Interface), dzięki któremu jesteśmy w stanie przeprowadzać podstawowe czynności. Usługa jest zabezpieczona tokenem autoryzującym (Bearer Token), który uzyskujemy przy logowaniu za pomocą nazwy użytkownika i hasła, a następnie dodajemy nagłówek wg dokumentacji, gdzie {{TOKEN}} zamieniamy na token otrzymany po zalogowaniu.
AUTHORIZATION: BEARER {{TOKEN}}
Ważną uwagą jest fakt że po zalogowaniu token można użyć zarówno do REST/v1 oraz REST/custom.
Lista metod
Pełna dokumentacja endpointów znajduje się w oddzielnym artykule.
Schemat interakcji z API
Logowanie
Na tym etapie należy zalogować się do systemu za pomocą tego endpointu.
cURL
curl --location --request POST 'https://localhost/api.php/REST/v1/login' \
--header 'Content-Type: application/json' \
--header 'Content-Type: text/plain' \
--data-raw '{
"username": "",
"password": "",
"edok_entity": ""
}'
PHP cURL
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => "https://localhost/api.php/REST/v1/login",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS =>"{\n \"username\": \"\",\n \"password\": \"\",\n \"edok_entity\": \"\"\n}",
CURLOPT_HTTPHEADER => array(
"Content-Type: application/json",
"Content-Type: text/plain"
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
HTTP
POST /login HTTP/1.1
Host: https://localhost/api.php/REST/v1
Content-Type: application/json
Content-Type: text/plain
{
"username": "",
"password": "",
"edok_entity": ""
}
Odpowiedź
{
"TOKEN": "DX_EXAMPLE_JVHYIZ3XJTYOTEZPK_EXAMPLE_1BXKM4IDTCGE1P8VE08_EXAMPLE_1DZTK97RXUITW15RNNUCQ==",
"REFRESHTOKEN": "V_EXAMPLE_ENQG9U_EXAMPLE_NVIJ9YVVM7EUANNTVKCNNFO_EXAMPLE_QHI3WHC1BPJDCXSETPVH_EXAMPLE_="
}
Token posłuży nam do dalszego autentykacji, natomiast refresh token służy do odświeżenia tego wcześniejszego tokenu jeżeli nam sesja wygasła. Token token jest ważny 1 dzień, natomiast refreshToken 6 miesięcy.
Wykonywanie dostępnych operacji
Sprawdzenie wersji systemu
cURL
CURL --LOCATION --REQUEST GET 'HTTP://LOCALHOST/API.PHP/REST/V1/SYSTEM/VERSION' \
--HEADER 'CONTENT-TYPE: APPLICATION/JSON' \
--HEADER 'AUTHORIZATION: BEARER DX_EXAMPLE_JVHYIZ3XJTYOTEZPK_EXAMPLE_1BXKM4IDTCGE1P8VE08_EXAMPLE_1DZTK97RXUITW15RNNUCQ=='
PHP cURL
$CURL = CURL_INIT();
CURL_SETOPT_ARRAY($CURL, ARRAY(
CURLOPT_URL => "HTTP://LOCALHOST/API.PHP/REST/V1/SYSTEM/VERSION",
CURLOPT_RETURNTRANSFER => TRUE,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => TRUE,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => ARRAY(
"CONTENT-TYPE: APPLICATION/JSON",
"AUTHORIZATION: BEARER DX_EXAMPLE_JVHYIZ3XJTYOTEZPK_EXAMPLE_1BXKM4IDTCGE1P8VE08_EXAMPLE_1DZTK97RXUITW15RNNUCQ=="
),
));
$RESPONSE = CURL_EXEC($CURL);
CURL_CLOSE($CURL);
ECHO $RESPONSE;
HTTP
GET /SYSTEM/VERSION HTTP/1.1
HOST: HTTP://LOCALHOST/API.PHP/REST/V1
CONTENT-TYPE: APPLICATION/JSON
AUTHORIZATION: BEARER DX_EXAMPLE_JVHYIZ3XJTYOTEZPK_EXAMPLE_1BXKM4IDTCGE1P8VE08_EXAMPLE_1DZTK97RXUITW15RNNUCQ==
Odpowiedź
{
"VERSION": "7.18.0"
}
Utworzenie dokumentu typu plik
cURL
CURL --LOCATION --REQUEST POST 'HTTP://LOCALHOST/API.PHP/REST/V1/DOCUMENTS' \
--HEADER 'CONTENT-TYPE: APPLICATION/JSON' \
--HEADER 'AUTHORIZATION: BEARER DX_EXAMPLE_JVHYIZ3XJTYOTEZPK_EXAMPLE_1BXKM4IDTCGE1P8VE08_EXAMPLE_1DZTK97RXUITW15RNNUCQ' \
--DATA-RAW '{
"DCTPTP": "OTHER",
"PRTPID": 6,
"PRC_ID": 1,
"DSCRPT":"NOWY DOKUMENT Z PLIKU",
"CONTID": 2
}'
PHP cURL
$CURL = CURL_INIT();
CURL_SETOPT_ARRAY($CURL, ARRAY(
CURLOPT_URL => 'HTTP://LOCALHOST/API.PHP/REST/V1/DOCUMENTS',
CURLOPT_RETURNTRANSFER => TRUE,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => TRUE,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS =>'{
"DCTPTP": "OTHER",
"PRTPID": 6,
"PRC_ID": 1,
"DSCRPT":"NOWY DOKUMENT Z PLIKU",
"CONTID": 2
}',
CURLOPT_HTTPHEADER => ARRAY(
'CONTENT-TYPE: APPLICATION/JSON',
'AUTHORIZATION: BEARER DX_EXAMPLE_JVHYIZ3XJTYOTEZPK_EXAMPLE_1BXKM4IDTCGE1P8VE08_EXAMPLE_1DZTK97RXUITW15RNNUCQ',
),
));
$RESPONSE = CURL_EXEC($CURL);
CURL_CLOSE($CURL);
ECHO $RESPONSE;
HTTP
POST /API.PHP/REST/V1/DOCUMENTS HTTP/1.1
HOST: LOCALHOST
CONTENT-TYPE: APPLICATION/JSON
AUTHORIZATION: BEARER DX_EXAMPLE_JVHYIZ3XJTYOTEZPK_EXAMPLE_1BXKM4IDTCGE1P8VE08_EXAMPLE_1DZTK97RXUITW15RNNUCQ
CONTENT-LENGTH: 114
{
"DCTPTP": "OTHER",
"PRTPID": 6,
"PRC_ID": 1,
"DSCRPT":"NOWY DOKUMENT Z PLIKU",
"CONTID": 2
}
Odpowiedź
{
"DATA": {
"DOC_ID": 68
}
}
Dodanie załącznika
Załącznik wyślemy w postaci JSON. Istnieją inne sposoby (np. binarnie) co omawiamy w dalszych rozdziałach.
cURL
CURL --LOCATION --REQUEST POST 'HTTP://LOCALHOST/API.PHP/REST/V1/DOCUMENTS/68/ATTACHMENTS' \
--HEADER 'CONTENT-TYPE: APPLICATION/JSON' \
--HEADER 'AUTHORIZATION: BEARER 360B396EDE057E63505A1AA09A912BDC0EE37EC60B01595EA8B2FB343D087177' \
--HEADER 'COOKIE: PHPSESSID=2UPI0AG93V3MMD8MBMRALO9B17' \
--DATA-RAW '{
"ATTACHMENTS": [
{
"FILENAME":"HACKER2.PNG",
"TRANSFERENCODING":"BASE64",
"FILECONTENT": ""
}
]
}'
PHP cURL
$CURL = CURL_INIT();
CURL_SETOPT_ARRAY($CURL, ARRAY(
CURLOPT_URL => 'HTTP://LOCALHOST/API.PHP/REST/V1/DOCUMENTS/68/ATTACHMENTS',
CURLOPT_RETURNTRANSFER => TRUE,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => TRUE,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS =>'{
"ATTACHMENTS": [
{
"FILENAME":"HACKER2.PNG",
"TRANSFERENCODING":"BASE64",
"FILECONTENT": ""
}
]
}',
CURLOPT_HTTPHEADER => ARRAY(
'CONTENT-TYPE: APPLICATION/JSON',
'AUTHORIZATION: BEARER 360B396EDE057E63505A1AA09A912BDC0EE37EC60B01595EA8B2FB343D087177',
'COOKIE: PHPSESSID=2UPI0AG93V3MMD8MBMRALO9B17'
),
));
$RESPONSE = CURL_EXEC($CURL);
CURL_CLOSE($CURL);
ECHO $RESPONSE;
HTTP
POST /API.PHP/REST/V1/DOCUMENTS/68/ATTACHMENTS HTTP/1.1
HOST: LOCALHOST
CONTENT-TYPE: APPLICATION/JSON
AUTHORIZATION: BEARER 360B396EDE057E63505A1AA09A912BDC0EE37EC60B01595EA8B2FB343D087177
COOKIE: PHPSESSID=2UPI0AG93V3MMD8MBMRALO9B17
CONTENT-LENGTH: 11710
{
"ATTACHMENTS": [
{
"FILENAME":"HACKER2.PNG",
"TRANSFERENCODING":"BASE64",
"FILECONTENT": ""
}
]
}
Odpowiedź
{
"DATA": {
"FILEID": [
71
]
}
}
Wylogowanie się
W celu zakończenia połączenia (sesji) należy się wylogować przez API za pomocą tego endpointu.
cURL
CURL --LOCATION --REQUEST GET 'HTTP://LOCALHOST/API.PHP/REST/V1/LOGOUT' \
--HEADER 'CONTENT-TYPE: APPLICATION/JSON' \
--HEADER 'AUTHORIZATION: BEARER DX_EXAMPLE_JVHYIZ3XJTYOTEZPK_EXAMPLE_1BXKM4IDTCGE1P8VE08_EXAMPLE_1DZTK97RXUITW15RNNUCQ=='
PHP cURL
$CURL = CURL_INIT();
CURL_SETOPT_ARRAY($CURL, ARRAY(
CURLOPT_URL => "HTTP://LOCALHOST/API.PHP/REST/V1/LOGOUT",
CURLOPT_RETURNTRANSFER => TRUE,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => TRUE,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => ARRAY(
"CONTENT-TYPE: APPLICATION/JSON",
"AUTHORIZATION: BEARER DX_EXAMPLE_JVHYIZ3XJTYOTEZPK_EXAMPLE_1BXKM4IDTCGE1P8VE08_EXAMPLE_1DZTK97RXUITW15RNNUCQ=="
),
));
$RESPONSE = CURL_EXEC($CURL);
CURL_CLOSE($CURL);
ECHO $RESPONSE;
HTTP
GET /LOGOUT HTTP/1.1
HOST: HTTP://LOCALHOST/API.PHP/REST/V1
CONTENT-TYPE: APPLICATION/JSON
AUTHORIZATION: BEARER DX_EXAMPLE_JVHYIZ3XJTYOTEZPK_EXAMPLE_1BXKM4IDTCGE1P8VE08_EXAMPLE_1DZTK97RXUITW15RNNUCQ==
Odpowiedź
{
"RESULT": TRUE
}
Załączniki
Wysyłanie załączników
Załączniki możemy wysyłać do REST API na dwa sposoby: BINARY lub JSON.
Dokumentacja przykładowego endpointu znajduje się w tym artykule.
BINARY
cURL
CURL --LOCATION --REQUEST POST 'HTTP://LOCALHOST/API.PHP/REST/V1/EVENTS/1/ATTACHMENTS' \
--HEADER 'CONTENT-TYPE: MULTIPART/FORM-DATA; BOUNDARY=' \
--HEADER 'AUTHORIZATION: BEARER DX_EXAMPLE_JVHYIZ3XJTYOTEZPK_EXAMPLE_1BXKM4IDTCGE1P8VE08_EXAMPLE_1DZTK97RXUITW15RNNUCQ==' \
--FORM '=@/HOME/USER/OBRAZY/BINGWALLPAPER/20200522-REICHENBACHFALLS_EN-US9352987746_1920X1080.JPG'
PHP cURL
$CURL = CURL_INIT();
CURL_SETOPT_ARRAY($CURL, ARRAY(
CURLOPT_URL => „HTTP://LOCALHOST/API.PHP/REST/V1/EVENTS/1/ATTACHMENTS”,
CURLOPT_RETURNTRANSFER => TRUE,
CURLOPT_ENCODING => „”,
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => TRUE,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => „POST”,
CURLOPT_POSTFIELDS => ARRAY(’PLIK1’=> NEW CURLFILE(’/HOME/PKUZNIK/POBRANE/OPEN_SANS.ZIP’)),
CURLOPT_HTTPHEADER => ARRAY(
„AUTHORIZATION: DX_EXAMPLE_JVHYIZ3XJTYOTEZPK_EXAMPLE_1BXKM4IDTCGE1P8VE08_EXAMPLE_1DZTK97RXUITW15RNNUCQ”
),
));
$RESPONSE = CURL_EXEC($CURL);
CURL_CLOSE($CURL);
ECHO $RESPONSE;
HTTP
POST /API.PHP/REST/V1/EVENTS/1/ATTACHMENTS HTTP/1.1
HOST: LOCALHOST
AUTHORIZATION: DX_EXAMPLE_JVHYIZ3XJTYOTEZPK_EXAMPLE_1BXKM4IDTCGE1P8VE08_EXAMPLE_1DZTK97RXUITW15RNNUCQCONTENT-TYPE: MULTIPART/FORM-DATA; BOUNDARY=----WEBKITFORMBOUNDARY7MA4YWXKTRZU0GW
----WEBKITFORMBOUNDARY7MA4YWXKTRZU0GW
CONTENT-DISPOSITION: FORM-DATA; NAME="PLIK1"; FILENAME="OPEN_SANS.ZIP"
CONTENT-TYPE: APPLICATION/ZIP
(DATA)
----WEBKITFORMBOUNDARY7MA4YWXKTRZU0GW
JSON
cURL
CURL --LOCATION --REQUEST POST 'HTTP://LOCALHOST/API.PHP/REST/V1/EVENTS/1/ATTACHMENTS' \
--HEADER 'CONTENT-TYPE: APPLICATION/JSON' \
--HEADER 'AUTHORIZATION: BEARER DX_EXAMPLE_JVHYIZ3XJTYOTEZPK_EXAMPLE_1BXKM4IDTCGE1P8VE08_EXAMPLE_1DZTK97RXUITW15RNNUCQ==' \
--DATA-RAW '[{
"FILENAME":"20200522-REICHENBACHFALLS_EN-US9352987746_1920X1080.JPG",
"TRANSFERENCODING":"BASE64",
"FILECONTENT":""
}]'
PHP cURL
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => "http://localhost/api.php/REST/v1/events/1/attachments",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS =>"[{\n \"fileName\":\"20200522-ReichenbachFalls_EN-US9352987746_1920x1080.jpg\",\n \"transferEncoding\":\"base64\",\n \"fileContent\":\"<content file in encode base64>\"\n}]",
CURLOPT_HTTPHEADER => array(
"Authorization: dX_example_JVHYiZ3xJTyotezpk_example_1BxKm4idTcge1p8VE08_example_1dZTk97RXUiTW15RnNuCQ",
"Content-Type: text/plain"
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
HTTP
POST /API.PHP/REST/V1/EVENTS/1/ATTACHMENTS HTTP/1.1
HOST: LOCALHOST
AUTHORIZATION: DX_EXAMPLE_JVHYIZ3XJTYOTEZPK_EXAMPLE_1BXKM4IDTCGE1P8VE08_EXAMPLE_1DZTK97RXUITW15RNNUCQ
CONTENT-TYPE: TEXT/PLAIN
[
{
"FILENAME":"20200522-REICHENBACHFALLS_EN-US9352987746_1920X1080.JPG",
"TRANSFERENCODING":"BASE64",
"FILECONTENT":""
}
]
Pobieranie załączników
Załącznik możemy pobrać na dwa sposoby: Link do dokumentacji przykładowego endpointu.
BINARY
CURL –LOCATION –REQUEST GET 'HTTP://LOCALHOST/API.PHP/REST/V1/EVENTS/1/ATTACHMENTS/1′ \
–HEADER 'CONTENT-TYPE: APPLICATION/JSON’ \
–HEADER 'AUTHORIZATION: BEARER DX_EXAMPLE_JVHYIZ3XJTYOTEZPK_EXAMPLE_1BXKM4IDTCGE1P8VE08_EXAMPLE_1DZTK97RXUITW15RNNUCQ==’ \
–HEADER 'ACCEPT: APPLICATION/OCTET-STREAM’
JSON
CURL --LOCATION --REQUEST GET 'HTTP://LOCALHOST/API.PHP/REST/V1/EVENTS/1/ATTACHMENTS/1' \
--HEADER 'CONTENT-TYPE: APPLICATION/JSON' \
--HEADER 'AUTHORIZATION: BEARER DX_EXAMPLE_JVHYIZ3XJTYOTEZPK_EXAMPLE_1BXKM4IDTCGE1P8VE08_EXAMPLE_1DZTK97RXUITW15RNNUCQ==' \
--HEADER 'ACCEPT: APPLICATION/JSON'
Wyszukiwarki
W systemie udostępniono endpointy, za pomocą których można przeszukiwać, filtrować całe zbiory danych. Przykład wszyscy klienci z alarmem (GET \contacts): &alarm_=true.
Operatory tekstowe
W każdym endpoincie możliwe jest szukanie po każdej kolumnie, która jest zwracana w odpowiedzi. &pole1=fraza
Można wyszukiwać wyłącznie po kolumnach, które zwracane są w głównej encji.
/contacts?symbol=CAD
W przypadku kiedy chcemy wyszukać po frazie składającej się z dwóch słów np. „sąd rejonowy”, wtedy słowa oddzielamy znakiem plusa.
/contacts?name_1-ilike[]=sąd+rejonowy
Aby wyszukać klientów o konkretnych statusach, wtedy na końcu nazwy klucza dodajemy nawiasy kwadratowe. Całość zostanie potraktowana jako tablicę w SQLu.
/contacts?tpstid[]=23&tpstid[]=26&tpstid[]=30
Aby móc szukać po niepełnych frazach i słowach, należy użyć jednej ze specjalizowanych funkcji poprzez doklejenie do jej nazwy rozszerzenia:
-not – Negacja
- Przykład:
QUERY: &pole1-not=fraza
- Wynikowy SQL:
pole1 != 'fraza'
-like – Prosty like
- Przykład:
QUERY &pole1-like=fraza%
- Wynikowy SQL:
pole1 like 'fraza%'
-notlike – Negacja do powyższego like
- Przykład:
QUERY &pole1-notlike=fraza%
- Wynikowy SQL:
pole1 not like 'fraza%'
-ilike – Wyszukiwanie ciągu porównując go do początku każdego wyrazu (działa jak systemowe lookupy)
- Przykład:
QUERY &pole1-ilike=fraza
- Wynikowy SQL:
pole1 ~* E'(^| |-|\\'|")fraza'
-notilike – negacja do powyższego
- Przykład:
QUERY &pole1-ilike=fraza
- Wynikowy SQL:
pole1 !~* E'(^| |-|\\'|")fraza'
Jeżeli z jedną kolumną chcemy zrobić kilka porównań, wtedy należy użyć typu tablicowego tzw. do nazwy zmiennej dodać kwadratowe nawiasy [].
&pole1-ilike[]=fraza1&pole1-ilike[]=fraza2
Przykład:
/contacts?name_1-ilike[]=szpital&name_1-ilike[]=kliniczny
Powyższe funkcje działają tylko dla kolumn typu string.
Operacje daty
Możemy również dodać filtr, który zwróci nam rekordy z odpowiedniego okresu, do tego należy wykorzystać następujące funkcje:
-start – początek zakresu
-end – koniec zakresu
Powyższe funkcje można ze sobą łączyć:
Użycie -start Przykład: QUERY pole1-start=2020-11-01
Wynikowy SQL: pole1 >= '2020-11-01'
Użycie -end Przykład: QUERY pole1-end=2020-11-01
Wynikowy SQL: pole1 <= '2020-11-01'
Użycie -start i -end Przykład: QUERY pole1-start=2020-11-01&pole1-end=2020-11-30
Wynikowy SQL: pole1 BETWEEN '2020-11-01' AND '2020-11-30'
Operatory matematyczne
System udostępnia także zbiór funkcji, które możemy wykorzystać do porównania liczb. Wywołanie bez funkcji &pole1=1 jest jednoznaczne z zapisem SQL pole1 = 1.
-not – Negacja
- Przykład:
QUERY: &pole1-not=1
- Wynikowy SQL:
pole1 != 1
-gt – jednoznaczne z pole1 > 2
- Przykład:
QUERY: &pole1-gt=2 SQL: pole1 > 2
-gte – jednoznaczne z pole1 >= 2
- Przykład:
QUERY: &pole1-gte=2 SQL: pole1 >= 2
-lt – jednoznaczne z pole1 < 2
- Przykład:
QUERY: &pole1-lt=2 SQL: pole1 < 2
-lte – jednoznaczne z pole1 <= 2
- Przykład:
QUERY: &pole1-lte=2 SQL: pole1 <= 2
Dodatkowe operatory
W dokumentacjach tych endpointów udostępniono następujące parametry QUERY:
_fields (string) – Nazwy pól rozdzielone przecinkiem, które mają zostać zwrócone w odpowiedzi.
Przykład: _fields=pole1,pole2,pole3
/contacts?_fields=contid,name_1,email_
_filter (string) – Modyfikator opcjonalny złożenia warunków, które zostały przekazane w sekcji query. Jeśli tego parametru nie podasz, to wszystkie warunki zostaną złożone ANDem. W tym parametrze możesz używać następujących wartości: () OR AND <nazwy pól, których używasz w query>
Przykład 1: &_filter=pole1-OR-pole2
Lista klientów zawierających w nazwie (name_1 lub name_2) słowo poznań
/contacts?_filter=name_1-or-name_2&name_1-ilike=poznań&name_2-ilike=poznań
Przykład 2: &_filter=(pole1-OR-pole2)AND-pole3
Lista klientów zawierających w nazwie (name_1 lub name_2) słowo poznań oraz utworzonych od stycznia 2020 roku
/contacts?_filter=(name_1-or-name_2)and-adddat&name_1-ilike=poznań&name_2-ilike=poznań&adddat-start=2020-01-01
_sort (string) – Nazwy pól, po których ma odbyć się sortowanie ASC, Dla DESC do nazwy pola doklejamy prefix ‚-‚
Przykład 1: &_sort=pole1
– sortowanie rosnące
/contacts?_sort=name_1
Przykład 2: &_sort=-pole1
– sortowanie malejące
/contacts?_sort=-name_1
_limit (int) – Ile rekordów ma zostać zwróconych.
/contacts?_limit=100
_offset (int) – Od którego rekordu mają zostać zwracane wyniki.
/contacts?_offset=100