Pisanie aplikacji internetowej platformy Azure w celu odczytywania danych FHIR w interfejsie API platformy Azure for FHIR

Teraz, gdy możesz nawiązać połączenie z serwerem FHIR i danymi POST, możesz przystąpić do pisania aplikacji internetowej, która odczytuje dane FHIR. W tym ostatnim kroku samouczka omówimy pisanie i uzyskiwanie dostępu do aplikacji internetowej.

Tworzenie aplikacji internetowej

Na platformie Azure wybierz pozycję Utwórz zasób i wybierz pozycję Aplikacja internetowa. Pamiętaj, aby nazwać aplikację internetową niezależnie od tego, co określono w identyfikatorze URI przekierowania dla aplikacji klienckiej, lub wróć i zaktualizuj identyfikator URI przekierowania przy użyciu nowej nazwy.

Tworzenie aplikacji internetowej

Po udostępnieniu aplikacji internetowej przejdź do zasobu. Wybierz pozycję App Service Editor (wersja zapoznawcza) w obszarze Narzędzia programistyczne po prawej stronie, a następnie wybierz pozycję Przejdź. Wybranie pozycji Przejdź spowoduje otwarcie edytora App Service. Zaznacz prawym przyciskiem w szarej przestrzeni w obszarze Eksploruj i utwórz nowy plik o nazwie index.html.

Uwzględniony jest kod, który można wprowadzić w index.html. Należy zaktualizować następujące elementy:

  • clientId — zaktualizuj przy użyciu identyfikatora aplikacji klienckiej. Ten identyfikator będzie ten sam identyfikator, który został pobrany podczas pobierania tokenu
  • authority — zaktualizuj przy użyciu identyfikatora dzierżawy Azure AD
  • FHIRendpoint — zaktualizuj punkt FHIRendpoint , aby mieć nazwę usługi FHIR
  • scopes — aktualizacja w celu odzwierciedlenia pełnego adresu URL dla odbiorców

<!DOCTYPE html>
<html>

<head>
    <title>FHIR Patient browser sample app</title>
    <script src="https://secure.aadcdn.microsoftonline-p.com/lib/1.0.0/js/msal.js"></script>
</head>

<body>
    <div class="leftContainer">
        <p id="WelcomeMessage">Welcome to the FHIR Patient browsing sample Application</p>
        <button id="SignIn" onclick="signIn()">Sign In</button>
    </div>

    <div id="patientTable">
    </div>

    <script>
        var msalConfig = {
            auth: {
                clientId: '<CLIENT-ID>',
                authority: "https://login.microsoftonline.com/<AZURE-AD-TENANT-ID>"
            },
            cache: {
                cacheLocation: "localStorage",
                storeAuthStateInCookie: true
            }
        }

        var FHIRConfig = {
            FHIRendpoint: "https://<FHIR-SERVER-NAME>.azurehealthcareapis.com"
        }
        var requestObj = {
            scopes: ["https://<FHIR-SERVER-NAME>.azurehealthcareapis.com/user_impersonation"]
        }

        function authRedirectCallBack(error, response) {
            if (error) {
                console.log(error);
            } else {
                if (response.tokenType === "access_token") {
                    callFHIRServer(FHIRConfig.FHIRendpoint + '/Patient', 'GET', null, response.accessToken, FHIRCallback);
                }
            }
        }

        var myMSALObj = new Msal.UserAgentApplication(msalConfig);
        myMSALObj.handleRedirectCallback(authRedirectCallBack);

        function signIn() {
            myMSALObj.loginPopup(requestObj).then(function (loginResponse) {
                showWelcomeMessage();
                acquireTokenPopupAndCallFHIRServer();
            }).catch(function (error) {
                console.log(error);
            })
        }

        function showWelcomeMessage() {
            var divWelcome = document.getElementById('WelcomeMessage');
            divWelcome.innerHTML = "Welcome " + myMSALObj.getAccount().userName + " to FHIR Patient Browsing App";
            var loginbutton = document.getElementById('SignIn');
            loginbutton.innerHTML = 'Sign Out';
            loginbutton.setAttribute('onclick', 'signOut()')
        }

        function signOut() {
            myMSALObj.logout();
        }

        function acquireTokenPopupAndCallFHIRServer() {
            myMSALObj.acquireTokenSilent(requestObj).then(function (tokenResponse) {
                callFHIRServer(FHIRConfig.FHIRendpoint + '/Patient', 'GET', null, tokenResponse.accessToken, FHIRCallback);
            }).catch(function (error) {
                console.log(error);
                if (requiresInteraction(error.errorCode)) {
                    myMSALObj.acquireTokenPopup(requestObj).then(function (tokenResponse) {
                        callFHIRServer(FHIRConfig.FHIRendpoint + '/Patient', 'GET', null, tokenResponse.accessToken, FHIRCallback);
                    }).catch(function (error) {
                        console.log(error);
                    })
                }
            });
        }

        function callFHIRServer(theUrl, method, message, accessToken, callBack) {
            var xmlHttp = new XMLHttpRequest();
            xmlHttp.onreadystatechange = function () {
                if (this.readyState == 4 && this.status == 200)
                    callBack(JSON.parse(this.responseText));
            }
            xmlHttp.open(method, theUrl, true);
            xmlHttp.setRequestHeader("Content-Type", "application/json;charset=UTF-8");
            xmlHttp.setRequestHeader('Authorization', 'Bearer ' + accessToken);
            xmlHttp.send(message);
        }

        function FHIRCallback(data) {
            patientListHtml = '<ol>';
            data.entry.forEach(function(e) {
                patientListHtml += '<li>' + e.resource.name[0].family + ', ' + e.resource.name[0].given + ' (' + e.resource.id + ')';
            });
            patientListHtml += '</ol>';
            document.getElementById("patientTable").innerHTML = patientListHtml;
        }
    </script>
</body>

</html>

W tym miejscu możesz wrócić do zasobu aplikacji internetowej i otworzyć adres URL znaleziony na stronie Przegląd. Zaloguj się, aby zobaczyć pacjenta James Tiberious Kirk, który został wcześniej utworzony.

Następne kroki

Pomyślnie wdrożono interfejs API platformy Azure for FHIR, zarejestrowano publiczną aplikację kliencką, przetestowano dostęp i utworzono małą aplikację internetową. Zapoznaj się z obsługiwanymi funkcjami interfejsu API platformy Azure for FHIR w następnym kroku.

FHIR® jest zastrzeżonym znakiem towarowym HL7 i jest używany z uprawnieniem HL7 .