Rozwiązanie zakłada użycie HL7 FHIR R4. Rozwiązanie FHIR udostępnia interfejs RESTful API w ustandaryzowany sposób dla zapewnienia interoperacyjności w różnych systemach. Standard FHIR wprowadza model danych dla zapewnienia spójnej interpretacji informacji o procesach realizowanych w ramach opieki zdrowotnej pacjentów - pojęcia w dziedzinie opieki zdrowotnej zostały zdefiniowane i zmapowane na zasoby FHIR. Każdy zasób FHIR posiada profil podstawowy (wynikający ze standardu) z możliwością jego rozszerzania i profilowania na potrzeby konkretnego przypadku użycia. Na potrzeby obsługi sieci KSK wybrano i sprofilowano wybrane zasoby FHIR. Serwer FHIR udostępnia RESTful API do obsługi wybranych zasobów.
Uwierzytelnienie i autoryzacja dostępu do usług serwera FHIR bazuje na standardzie OAuth 2 (szczegóły).
Operacja rejestracji zasobu realizowana jest z wykorzystaniem metody POST protokołu HTTP:
POST https://{adres serwera FHIR}/{podsystem}}/fhir/{typ zasobu}
Zasób FHIR podanego typu (np. CarePlan) przekazywany jest w body. W wyniku operacji, w pozytywnym scenariuszu, serwer FHIR zwraca kod HTTP 201 oraz zarejestrowany zasób wraz z metadanymi, tj. identyfikator logiczny zasobu, wersja czy data rejestracji zasobu czy numer wersji systemu (jeżeli parametry te zostaną przekazane w żądaniu zostaną one zignorowane).
Choć specyfikacja FHIR dopuszcza możliwość nadawania własnego identyfikatora logicznego zasobu (Resource.id), serwer FHIR do obsługi KSK wyklucza taką możliwość - identyfikator logiczny zasobu nadawany jest przez system.
W przypadku niepowodzenia, serwer zwraca odpowiedni kod HTTP wraz z komunikatem o przyczynie niepowodzenia.
Operacja odczytu zasobu realizowana jest z wykorzystaniem metody GET protokołu HTTP:
GET https://{adres serwera FHIR}/{podsystem}/fhir/{typ zasobu}/{identyfikator logiczny zasobu (Resource.id)}
W przypadku gdy żądanie zostało zbudowane prawidłowo, serwer zwraca kod odpowiedzi HTTP 200 wraz z odpowiedzią zawierającą wskazany zasób.
W przypadku niepowodzenia, serwer zwraca odpowiedni kod HTTP wraz z komunikatem o przyczynie niepowodzenia.
Operacja wyszukania zasobu realizowana jest z wykorzystaniem metody GET protokołu HTTP:
GET https://{adres serwera FHIR}/{podsystem}/fhir/{typ zasobu}?{parametry_wyszukiwania}
Spowoduje to przeszukanie wszystkich zasobów określonego typu przy użyciu kryteriów przedstawionych w parametrach.
Jeśli wyszukiwanie powiedzie się, serwer zwraca kod HTTP 200, a w treści zwrócony jest zasób Bundle z typem = searchset zawierający wyniki wyszukiwania jako zbiór zero lub więcej zasobów w określonej kolejności.
W przypadku niepowodzenia, serwer zwraca odpowiedni kod HTTP wraz z komunikatem o przyczynie niepowodzenia.
Operacja aktualizacji zasobu realizowana jest z wykorzystaniem metody PUT protokołu HTTP:
PUT https://{adres serwera FHIR}/{podsystem}/fhir/{typ zasobu}/{identyfikator logiczny zasobu (Resource.id)}
W ramach aktualizacji, w body przekazywany jest kompletny, zaktualizowany zasób. Zasób musi posiadać id zgodny z id w adresie URL. Jeśli zasób posiada versionId i lastUpdated serwer je ignoruje i ustawia prawidłowe wartości. Zaktualizowany zasób FHIR podanego typu (np. CarePlan) przekazywany jest w body. W wyniku operacji, w pozytywnym scenariuszu, serwer FHIR zwraca kod HTTP 200 oraz zaktualizowany zasób wraz z metadanymi, tj. aktualny numer wersji czy datę rejestracji aktualnej wersji zasobu.
W przypadku niepowodzenia, serwer zwraca odpowiedni kod HTTP wraz z komunikatem o przyczynie niepowodzenia.
Niestandardowa operacja aktualizacji realizowana jest z wykorzystaniem metody POST protokołu HTTP:
POST https://{adres serwera FHIR}/{podsystem}/fhir/{typ zasobu}/{identyfikator logiczny zasobu (Resource.id)}${nazwa operacji}
Spowoduje to wykonanie operacji na zasobie FHIR o podanym identyfikatorze logicznym.
Jeśli wykonanie operacji powiedzie się, serwer powinien zwrócić kod HTTP 200 wraz z odpowiedzią zawierającą informację o pozytywnym wyniku operacji aktualizacji zasobu podanego typu.
W przypadku niepowodzenia, serwer zwraca odpowiedni kod HTTP wraz z komunikatem o przyczynie niepowodzenia.
| Kod błędu | Opis słowny | Znaczenie |
|---|---|---|
| 400 | Błędne żądanie | Podano nieprawidłowe parametry żądania. |
| 401 | Nieautoryzowany dostęp | Klient musi podać aktualne poświadczenia przed dostępem do zasobu lub podał je nieprawidłowe. |
| 403 | Zabroniony – serwer zrozumiał zapytanie, lecz konfiguracja bezpieczeństwa zabrania mu zwrócić żądany zasób. | Uwierzytelnienie zostało dostarczone przez klienta, ale uwierzytelniony użytkownik nie może wykonać żądanej operacji ze względu na brak uprawnienia. |
| 404 | Nie znaleziono – serwer nie odnalazł zasobu według podanego URL ani niczego co by wskazywało na istnienie takiego zasobu w przeszłości. | Klient wskazał zasób, który nie istnieje. |
| 405 | Niedozwolona metoda – metoda zawarta w żądaniu nie jest dozwolona dla wskazanego zasobu. | Klient wskazał nieprawidłową metodę przy wskazywaniu na zasób. Odpowiedź zawiera listę dozwolonych metod. |
| 409 | Konflikt – żądanie nie może być zrealizowane, ponieważ występuje konflikt z obecnym statusem zasobu, ten kod odpowiedzi jest zwracany tylko w przypadku podejrzewania przez serwer, że klient może znaleźć przyczyny błędu i przesłać ponownie prawidłowe zapytanie. Odpowiedź serwera powinna zawierać informację umożliwiające klientowi rozwiązanie problemu, jednak nie jest to obowiązkowe | Komunikat zostaje zwrócony w sytuacji nie jednoznacznej np. przesłanie 2 razy identycznego dokumentu, kiedy wymagana jest unikalność. |
| 412 | Warunek wstępny nie może być spełniony – serwer nie może spełnić przynajmniej jednego z warunków zawartych w zapytaniu | Niezgodność danych autoryzujących z danymi w dokumencie (np. niezgodność OID, numeru PESEL, daty urodzenia), nieunikalny identyfikator Usługobiorcy lub Zdarzenia Medycznego. |
| 415 | Niewspierany typ treści | Klient nie wskazał typu treści (Content Type) w żądaniu lub podał niewspierany format. |
| 422 | Żądanie było poprawnie sformułowane, ale nie było zgodne z profilem zasobu | Zasób został odrzucony przez serwer, ponieważ nie jest zgodny z profilem zasobu lub naruszył reguły biznesowe serwera. |
| 500 | Wewnętrzny błąd serwera – serwer napotkał niespodziewane trudności, które uniemożliwiły zrealizowanie żądania | Klient przekazał zasób jednak wystąpił nieoczekiwany błąd na serwerze. |
| 501 | Nie zaimplementowano – serwer nie dysponuje funkcjonalnością wymaganą w zapytaniu; ten kod jest zwracany, gdy serwer otrzymał nieznany typ zapytania | Dostawca zasobów nie ma obecnie możliwości spełnienia żądania. |