Przeczytasz w 15 min.
Korzystanie z interfejsu nAxiom PublicAPI
(Wersja nAxiom 1.14.0.3)
Spis treści
- Wprowadzenie
- Dokumentacja PublicAPI
- Konfiguracja klienta auth
- Konfiguracja profilu użytkownika
- Uzyskiwanie tokenu
- Przykłady żądań do PublicAPI
- Błędy braku uprawnień
- Znane problemy
Wprowadzenie
Na potrzeby integracji z systemami zewnętrznymi platforma nAxiom udostępnia interfejs PublicAPI z kilkudziesięcioma endpointami obsługującymi szereg operacji w zakresie pobierania, dodawania i aktualizowania danych przetwarzanych w witrynie nAxiom. Opis tych endpointów zawiera dokumentacja generowana automatycznie przez program Swagger, dostępna pod adresem witryny naxiom w katalogu publicapi ({adres_URL_witryny_naxiom}/publicapi/).
W tym artykule podano podstawowe informacje dotyczące korzystania z interfejsu PublicAPI za pomocą programu Postman i polecenia curl.
Dokumentacja PublicAPI
Dokumentacja interfejsu PublicAPI witryny nAxiom jest dostępna pod adresem witryny w katalogu publicapi. Na przykład:
https://naxiom.mysite.com/publicapi/
W adresie należy wpisać końcowy ukośnik, w przeciwnym razie zostanie wyświetlona strona błędu 404.

W wersji nAxiom 1.14.1.0 zostanie opublikowana zmiana umożliwiająca autoryzację użytkownika z poziomu strony dokumentacji Swagger (przyciskiem Authorize
) i testowanie żądań.
Konfiguracja klienta auth
Do uzyskania tokenu z serwisu auth można także użyć predefiniowanego klienta openjs, jednak nie można wprowadzać żadnych zmian w jego konfiguracji, ponieważ jest on używany m.in. przez wtyczki nAxiom do programów Outlook i Word.
Aby użytkownik mógł uzyskać token potrzebny do uwierzytelniania żądań do PublicAPI, wymagane jest skonfigurowanie klienta w pliku appsettings.json serwisu auth. W tym celu, w sekcji Clients tego pliku należy dodać wpis:
{
"ClientId": "publicApiClient",
"ClientName": "PublicAPI Client",
"AllowedGrantTypes": "ResourceOwnerPassword",
"SecretKeySha256": "secret",
"AllowAccessTokensViaBrowser": true,
"RequireConsent": false,
"AlwaysIncludeUserClaimsInIdToken": true,
"AllowedScopes": [
"public-api"
]
}
Jeśli żądanie /connect/token będzie wysyłane bez pośrednictwa przeglądarki (Postman, curl), parametr AllowAccessTokensViaBrowser może mieć wartość false.
Jeśli zachodzi konieczność dodatkowego zabezpieczenia klienta używanego do uzyskania tokenu, można użyć parametru RequireClientSecret z wartością true. W takim przypadku w pliku appsettings-protected.json należy dodać wpis z zaszyfrowanym hasłem klienta:
"AppConfiguration": {
"Secrets": {
...,
"Client-publicApiClient": "DVqipgOwCBz9D3JSi9nd9qJGiWzuhI1VZ6+wPH5Hn6sT+lCGONMismjywy/sHWxI"
}
}
Informacje dotyczące szyfrowania hasła można uzyskać u producenta nAxiom.
Taka konfiguracja spowoduje, że w żądaniu tokenu konieczne będzie podanie hasła klienta jako wartości klucza client_secret.
Po zmianie pliku appsettings.json konieczne jest ponowne uruchomienie witryny w programie Menedżer IIS lub w oprogramowaniu do zarządzania implementacją kontenerową (Kubernetes, OpenShift, Docker Desktop).
Konfiguracja profilu użytkownika
Użytkownik, który będzie zdalnie logował się do witryny nAxiom i następnie wysyłał żądania API musi mieć w swoim profilu w nAxiom włączony przełącznik Dostęp do Public API
.

Dodatkowo, korzystanie z endpointów /User/Save, /User/AddNewUser oraz endpointów w węzłach /PermissionDelegation i /Permission wymaga, aby użytkownik miał przypisaną predefiniowaną rolę biznesową Administrator użytkowników PublicAPI.

nAxiom zezwoli na administrowanie profilami użytkowników pod warunkiem, że dany użytkownik będzie miał przypisaną rolę biznesową o kodzie USER_ADMIN_PUBLICAPI. To oznacza, że nazwę predefiniowanej roli i jej przypisanie do aplikacji można zmienić.

Podczas wykonywania żądań do PublicAPI sprawdzane są także odpowiednie uprawnienia użytkowników w nAxiom: uprawnienia ACL w przypadku operacji na dokumentach oraz uprawnienia PBA, np. do edycji profili użytkowników. Brak odpowiednich uprawnień będzie skutkował odmową wykonania żądania z błędem HTTP 403.
Uzyskiwanie tokenu
Do autoryzowania żądań wysyłanych do PublicAPI konieczny jest token przypisywany podczas logowania użytkownika. Aby go uzyskać, należy wysłać do serwisu auth danej witryny nAxiom żądanie {url}/connect/token. Konfiguracja żądania jest następująca:
- Typ żądania: POST
- Sekcja Body, parametry typu x-www-from-urlencoded:
-
grant_type
: password -
username
: nazwa użytkownika -
password
: hasło użytkownika -
scope
: public-api -
client_secret
: hasło klienta używanego do wysłania żądania; hasło jest wymagane tylko wtedy, gdy w konfiguracji klienta włączono atrybut RequireClientSecret. -
client_id
: identyfikator klienta zgodny z deklaracją w pliku appsettings.json serwisu auth; w tym przypadku publicApiClient
-
W programie Postman żądanie i odpowiedź mogą wyglądać jak na ilustracji poniżej.

Żądanie można także wysłać, korzystając z polecenia curl.
W przypadku witryny nAxiom na hoście z certyfikatem samopodpisanym polecenie
curl
wymaga użycia parametru-k
w celu wyłączenia sprawdzania certyfikatu.
curl -k --location 'https://localhost:1414/connect/token' \
--header 'Content-Type: application/x-www-form-urlencoded' \
--data-urlencode 'grant_type=password' \
--data-urlencode 'username=admin' \
--data-urlencode 'password=!Q2w3e4r' \
--data-urlencode 'scope=public-api' \
--data-urlencode 'client_secret=secret' \
--data-urlencode 'client_id=publicApiClient'
Uzyskaną w odpowiedzi wartość parametru access_token
należy używać w żądaniach wysyłanych do PublicAPI.
Postman:
- W definicji żądania na karcie
Authorization
rozwiń listęType
i wybierz wartośćBearer Token
. - Wklej wartość tokena w polu
Token
curl:
- Użyj wartości tokenu w parametrze
--header
jak w przykładzie poniżej:curl -k --location 'https://localhost:1414/publicapi/...' \ --header 'Authorization: Bearer eyJhbGciOiJSUzI1NiIsImtpZCI6IjUyMkM2MzE2REU5...'
Czas ważności tokenu wynosi 3600 s.
Przykłady żądań do PublicAPI
[GET]/PermissionDelegation/Get
Ten endpoint zwraca dane zastępstwa o podanym identyfikatorze. Odpowiedź zawiera pełne dane z profili użytkowników zastępowanego i zastępującego. Żądanie i fragment odpowiedzi przedstawiono na ilustracji.

curl:
curl -k --location 'https://localhost:1414/publicapi/PermissionDelegation/Get?id=10' \
--header 'Authorization: Bearer eyJhbGciOiJSUzI1NiIsImtpZCI...'
[GET]/Document/Get
Endpoint zwraca dane instancji dokumentu dla podanej definicji dokumentu. Wymaga podania identyfikatorów definicji dokumentu i instancji dokumentu.

curl:
curl - k --location \
--request GET 'https://localhost:1414/publicapi/Document/Get?documentDefinitionId=26&recordId=37' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer eyJhbGciOiJSUzI1NiIsImtpZCI6...' \
--data '"string"'
[POST]/Document/Save
Endpoint dodaje nowy dokument lub aktualizuje istniejący. Wymaga podania następujących parametrów:
- documentDefinitionId: identyfikator definicji dokumentu.
- recordId: identyfikator zmienianej instancji dokumentu lub 0 w przypadku dodawania nowego dokumentu.
-
skipWorkflowActionsForNewRecord: flaga pomijania akcji wykonywanych podczas tworzenia nowego dokumentu; domyślnie false.
Endpoint /Document/Save - parametry
W żądaniu należy określić nagłówki jak na ilustracji poniżej.

W sekcji body żądania można określić wartości pól dokumentu w formacie JSON jak na ilustracji poniżej.

W przypadku pomyślnego dodania nowego dokumentu w odpowiedzi zwracany jest jego identyfikator.
curl:
curl -k --location 'https://localhost:1414/publicapi/Document/Save?documentDefinitionId=19&
recordId=0&skipWorkflowActionsForNewRecord=false' \
--header 'Accept: text/plain' \
--header 'Content-Type: application/json-patch+json' \
--header 'Authorization: Bearer eyJhbGciOiJSUzI1NiIsImt...' \
--data '{
"Marka": "Syrena",
"Model": "105 de Luxe",
"RokProdukcji": "1964"
}'
[POST]/Attachment/UploadAttachment
Dodaje załącznik do wskazanej kategorii załączników określonego dokumentu. W zależności od wartości parametru overwrite nadpisuje istniejący plik lub dodaje nową wersję. Wymaga podania następujących parametrów:
- recordId: identyfikator zmienianej instancji dokumentu lub 0 w przypadku dodawania nowego dokumentu.
- businessDocumentId: identyfikator definicji dokumentu.
- attachmentCategoryId: identyfkator kategorii załączników; jeśli zostanie pominięty, załącznik zostanie dodany do kategorii domyślnej.
-
overwrite: decyduje, czy istniejący plik załącznika o takiej samej nazwie ma zostać nadpisany (true), czy załącznik ma zostać dodany jako nowa wersja (false).
Endpoint /Attachment/UploadAttachment - parametry
W sekcji nagłówków należy ustawić parametry jak na ilustracji poniżej.

Plik załącznika należy załączyć w sekcji body, wybierając typ form-data i dodając parametry file i type. Dla pierwszego należy wybrać z listy rozwijanej rodzaj File
, co umożliwi wybranie pliku załącznika z dysku w kolumnie wartości. W programie Postman plik musi znajdować się w katalogu roboczym definiowanym w ustawieniach. W przypadku polecenia curl plik musi znajdować się w bieżącym katalogu, w którym jest uruchamiane polecenie.

curl:
curl -k --location 'https://localhost:1414/publicapi/Attachment/UploadAttachment?
recordId=30&businessDocumentId=1&attachmentCategoryId=1023&overwrite=false' \
--header 'Accept: text/html' \
--header 'Content-Type: multipart/form-data' \
--header 'Authorization: Bearer eyJhbGciOiJSUzI1NiIsImtpZCI6...' \
--form 'file=@"cc1ea18c-5295-4b33-88d0-f248c23356fa.jpg"' \
--form 'type="image/jpg"'
Odpowiedź zwracana przez endpoint po pomyślnym wykonaniu przedstawiono na ilustracji poniżej.

Błędy braku uprawnień
Kiedy użytkownik wysyłający żądanie nie ma odpowiednich uprawnień, w odpowiedzi zostanie zwrócony błąd z komunikatem lub bez dodatkowego komunikatu. Poniżej przedstawiono kilka podstawowych przypadków.
-
Użytkownik nie ma włączonego dostępu do PublicAPI w profilu użytkownika.
Brak dostępu do PublicAPI -
Użytkownik nie ma roli Administrator użytkowników PublicAPI.
Brak roli administratora PublicAPI -
Użytkownik nie ma uprawnień ACL do modyfikowania dokumentu.
Brak uprawnień ACL do dokumentu -
Użytkownik nie ma uprawnień PBA do wykonania danej czynności.
Brak uprawnień PBA
Znane problemy
Obecnie (wersja nAxiom 1.14.0.3) znane są następujące problemy dotyczące endpointów PublicAPI.
- /Attachment/RemoveAttachment: usunięcie wersji załącznika powoduje całkowite usunięcie załącznika z dokumentu.
- /Attachment/UploadAttachment: nie jest walidowany identyfikator dokumentu, do którego ma zostać dodany załącznik; w przypadku podania id dokumentu, który nie istnieje, wykonanie żądania powiedzie się i informacje o załączniku trafią do tabeli core.Attachments, a sam załącznik do repozytorium danej kategorii. Jednak wobec braku dokumentu, zarządzanie załącznikiem i wyświetlanie jego podglądu na formularzu nie będzie możliwe.
- /Document/CreateNewSchema: endpoint działa nieprawidłowo, jest przeznaczony do wycofania.
- /Document/GetFormTransitions: endpoint za każdym razem zwraca status 400.
- /Document/GetTransitions: endpoint za każdym razem zwraca status 400.
- /Permission/GetAll: w zwracanej odpowiedzi brakuje niektórych atrybutów (nazwy modułu, id aplikacji, nazwy aplikacji, ról z dostępem do danej pozycji menu).
- /OrganizationStructure/GetOrganizationById: nie zwraca ról użytkownika w jednostce organizacyjnej.
- /OrganizationStructure/SaveOrganization: umożliwia zapisanie kodu jednostki organizacyjnej, który zawiera nieprawidłowe znaki; taki kod powoduje błędy w działaniu aplikacji nAxiom.
- /User/GetById: zwraca status 200 OK także wtedy, gdy użytkownik o podanym id nie istnieje.
- /User/Save: jeśli nie zostanie podana rola systemowa, żądanie zwraca status 400, ale użytkownik jest dodawany do tabeli auth.AspNetUSers.
- /User/Save: jeśli parametr recordId zostanie podany także w sekcji body żądania, wartość z body przesłania wartość podaną w parametrze.
Ponadto, ustawienia systemu są wczytywane do PublicAPI w momencie uruchamiania, dlatego ich zmiana wymaga restartowania puli publicapi