なぜ REST なのか?
API やアプリケーション プラグインにはさまざまな種類と標準がありますが、ここでは私のお気に入りの REST サービスについて説明します。「なぜ REST なのか」と疑問に思うかもしれません。答えは簡単です。SOAP よりも簡単だからです。他にも理由があります。REST は XML のみをサポートする SOAP よりも多くのデータ形式をサポートします。REST がベストであると考えるもう 1 つの大きな理由は、JSON と密接に連携していることです。
JSON(JavaScript Object Notation)は一般的にデータの解析が速いため、この軽量なデータ形式はブラウザでよりよくサポートされます。最後に、REST APIを Mendix アプリを動作させるためにクライアント ライブラリやファイルをインストールする必要はありません。
使用している API は何ですか?
Google Cloud APIには、Googleの最高のサービスがすべて消費可能なメソッドに分割されており、その多くは完全に無料で使用できます。ただし、これらのAPIのいずれかを操作する前に、リクエストをOAuthトークンで認証する必要があります。Googleは、ほとんどのAPIでOAuth 2.0を事実上の認証方法として使用しています。つまり、ユーザーがGoogle APIを使用するには、まず Google アイデンティティ API (サーバー側アプリの場合)、Google のサービスへの後続の呼び出しを行うためです。
つまり、トークンを取得することは、Google の API の多くを実装するための最初のステップであり、API 開発に着手しようとしている人にとっては良い出発点となります。
前提条件
始める前に、このブログでは、Google Cloud Platform上のプロジェクトでGoogle APIを有効にし、 OAuth 認証情報ページ の三脚と OAuth 同意画面 その Google プロジェクト用です。特に、アプリのリダイレクト URL をローカルホストまたはデプロイされた Web アプリケーションを指すように構成する必要があり、アプリの OAuth クライアントを構成した後、Google から提供されるクライアント ID とクライアント シークレットの両方が必要になります。
RESTメソッドについて
この例では、POST メソッドを使用して Google の Identity API を呼び出していますが、これは何を意味するのでしょうか。REST では、知っておく必要がある 5 つのメソッドがあります。
- POST — これは新しいレコードを作成するために使用されます
- GET — レコードまたはレコードのリストを返します
- PUT — レコードを更新または置換するために使用されます
- PATCH — レコードを更新または変更するために使用されます
- DELETE — 記録を削除または緩和する
私が知っている他の方法がいくつかありますが、仕事でそれらに遭遇したことはありませんが、興味があれば、方法の良い要約があります。 こちらをクリックしてください。
RESTサービスの統合に関する一般的な計画
使用している方法と使用しているAPIに応じて、統合を完了するための実際の手順は異なる場合があります。たとえば、GETリクエストにはリクエストボディがなく、代わりにクエリ文字列が使用されます。ただし、一般的には、RESTサービスを使用する手順は次のとおりです。 Mendix スタジオプロ:
- 場所を設定する
- エンドポイントまたはURIとも呼ばれ、サービスがホストされる場所です。
2. HTTPメソッドを選択する
- 上記の方法の中から選択しますが、通常、API ドキュメントにはどの方法を選択するかが記載されています。
3.認証
- OAUTH、API キーのいずれか、またはまったく必要なし。
4. HTTP ヘッダー
- ヘッダーはさまざまな役割を果たすことができ、各サービスは固有のヘッダーを持つことができるため、使用しようとしている API のドキュメントを参照する必要があります。
レスポンスのフォーマットを設定するには、ヘッダー「コンテンツタイプ” に値を与える “アプリケーション/JSONJSON形式の場合は「」、アプリケーション/XML” は XML 用です。他にも次のようなオプションがあります。アプリケーション/x-www-form-urlencoded'、このチュートリアルで使用します(このStack Overflowの投稿で、 すべてのコンテンツタイプ).
5. リクエストを作成する
- ほとんどのメソッドでは、リクエスト本文(通常は JSON 形式)を提供する必要があります。GET メソッドでは、通常、場所の末尾に追加されたクエリ文字列を使用してパラメータを渡します。これは通常、場所の末尾の「?」で識別され、URI とも呼ばれます。
6. 応答を処理する
- ここでは、応答を文字列変数に保存するか、データをドメイン モデルにマップするインポート マッピングを適用するかといういくつかのオプションがあります。ここでの最適なオプションはケースごとに異なりますが、ほとんどの場合、インポート マッピングを適用することを選択する必要があります。
Google Identity はどのように機能しますか?
始める前に、Google がサーバー側アプリに OAuth 2.0 を実装する方法を簡単に説明します。
Googleのドキュメント 5 つのステップで説明しているので、ここで要約します。 ウェブサーバー アプリケーションでの OAuth 2.0 の使用 | Google Identity | Google Developers.
ステップ1: 認証パラメータを設定する
つまり、URLを作成する必要があります Mendix アプリには、Google のサービスからユーザーに代わってアプリケーションがアクセスしたい内容の詳細が記載されています。
ステップ2では、ユーザーはこのGoogle URLにアクセスして、ユーザーのGoogleアカウントへのアクセスを承認し、その後、あなたのサイトにリダイレクトされます。 Mendix アプリには、トークン要求を承認するために使用するアクセス コードも含まれています。
ここで重要な値は次のとおりです。
- リダイレクトされた URI (アプリのURLにリダイレクトする必要があります)、
- スコープ (メール/ドライブ/翻訳などのGoogle APIの権限については、 こちら Google API のすべてのスコープのリストについては、
- 顧客ID (OAuth でアプリを登録すると Google からクライアント ID が提供されます)
- 州/地域 (アプリが状態を維持するために使用する値。後で正しいリクエストを取得するために使用できる識別子)
この URL の例を以下に示します。
https://accounts.google.com/o/oauth2/v2/auth?スコープ=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fcloud-platform+https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fcloud-translation&アクセスタイプ=オフライン&許可されたスコープを含める=真&レスポンスタイプ=コード&状態= 123&リダイレクト URI=https://localhost:8080/link/googleredirect?コード=&client_id=281413935351-jh5hs5chgf9n84eeqhpodrfq6oir2qnk.apps.googleusercontent.com
ステップ2: GoogleのOAuth 2.0サーバーにリダイレクトする
ステップ 1 で作成した URL にユーザーをリダイレクトします (Nanoflows で利用可能な Open URL Javascript アクションを使用しました)

ステップ3: Googleがユーザーに同意を求める

Google はユーザーに対して、サインイン/アカウントの選択を求め、アプリから要求されたアクセスを承認するよう求めます。

ステップ4: OAuth 2.0サーバーの応答を処理する
ユーザーが自分のアカウントへのリクエストを確認した後、Googleはユーザーをステップ1で指定したリダイレクトURIパラメータにリダイレクトします。これはアプリのURLですが、私の場合は ディープリンク リダイレクトを処理するモジュール。この方法で、Google がリンクに含める認証コードにアクセスできるようになりました。これは、これを処理するために作成されたディープ リンクの例です。
https://localhost:8080/link/googleredirect?code=
ステップ5: 認証コードをリフレッシュトークンとアクセストークンと交換する
Googleがあなたに アクセスコード、これでREST呼び出しを行って公式トークンと交換できます。これが私の例のリクエストとレスポンスです。
Google でプロジェクトを削除しました。これを公開すると、これらのリクエストはそのままでは機能しなくなります (独自のクライアントIDとクライアントシークレットを使用する必要があります)
POSTリクエストのリクエスト内容 https://oauth2.googleapis.com/token?grant_type=authorization_code&client_id=281413935351-jh5hs5chgf9n84eeqhpodrfq6oir2qnk.apps.googleusercontent.com&client_secret=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&redirect_uri=http%3A%2F%2Flocalhost%3A8080%2Flink%2Fgoogleredirect%3FCode%3D HTTP/1.1 コンテンツタイプ: application/x-www-form-urlencoded
code=4%2F0AdQt8qiGaCaJYgKgRpHKqXj8265JL72PfsKpusgctqYXhVwPxg5qn4EHU9iUGnMxMiHiqA
POSTリクエストに対する応答内容 https://oauth2.googleapis.com/token?grant_type=authorization_code&client_id=281413935351-jh5hs5chgf9n84eeqhpodrfq6oir2qnk.apps.googleusercontent.com&client_secret=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&redirect_uri=http%3A%2F%2Flocalhost%3A8080%2Flink%2Fgoogleredirect%3FCode%3D HTTP/1.1 200 OK Cache-Control: no-cache、no-store、max-age=0、must-revalidate Pragma: no-cache Date: Mon, 01 Aug 2022 12:53:44 GMT Expires: Mon, 01 Jan 1990 00:00:00 GMT Content-Type: application/json; charset=utf-8 Vary: Origin Vary: X-Origin Vary: Referer Server: scaffolding on HTTPServer2 X-XSS-Protection: 0 X-Frame-Options: SAMEORIGIN X-Content-Type-Options: nosniff Alt-Svc: h3=”:443"; ma=2592000,h3–29=”:443"; ma=2592000,h3-Q050=”:443”; ma=2592000,h3-Q046=”:443”; ma=2592000,h3-Q043=”:443”; ma=2592000,quic=”:443”; ma=2592000; v=”46,43” 転送エンコーディング: チャンク化
{
“access_token”: “ya29.A0AVA9y1tawnqK-42beGFAomiTqx8Zg0UUiedmIIPaAIraSas6VEO2D7NH5rInBPCUQK_7aghDiiTVrD_SnnQzOAtGq3XP2GQfWbpuZmDFjWfL0FSAw6JQU37mthQnRFsJvvqlgzTcryTdruKiOtcc63YrI8DvYUNnWUtBVEFTQVRBU0ZRRTY1ZHI4NjVOQUxhR2ppS0kyOVpINVZoYTJ4Zw0163”,
“expires_in”: 3599,
“scope”: “https://www.googleapis.com/auth/cloud-platform https://www.googleapis.com/auth/cloud-translation", “token_type”: “ベアラー” }
これで、この背後にあるアーキテクチャを理解できたと思いますので、Token API の呼び出しの詳細について説明します。
APIの呼び出し Mendix
場所を設定する
場所を設定するには、呼び出しRESTアクション(マイクロフロー内)のプロパティに移動し、編集をクリックします。APIが配置されているURIを引用符で囲んで指定することで、場所を設定できます。 文字列値.
ただし、これを保存するためのアプリケーション定数を作成するのがベストプラクティスです。そうすれば、入力ミスやコピー アンド ペーストの間違いを心配する必要がありません。
場所は https://oauth2.googleapis.com/token場所の末尾にクエリを追加することに注意してください。

HTTP メソッドの選択
前述の通り、私たちは POSTメソッド この統合では、Google のドキュメントの例でそうすべきであると示されているため、これを選択しました。
次は認証
登録ユーザーであることを確認するために、リクエストでGoogleにいくつかの詳細を送信する必要があります。 クライアントIDとクライアントシークレット 私たちのアプリはGoogleによって発行されており(クエリフィールドとして)、 アクセスコード リクエスト本文でユーザーに付与されます。
どのようなヘッダーが必要ですか?
このリクエストでは、ヘッダー「コンテンツタイプ' そしてそれに価値を与える 'application / x-www-form-urlencoded'。これは、リクエストが使用している形式を Google に伝えるために渡されます。
必要なヘッダーが含まれていない場合、通常は 401 応答 (不正なリクエスト) が返されるため、存在しないと想定する前に、提供されているドキュメントを必ず確認してください。
クエリの構築
URI でリクエストのいくつかのパラメータを渡す必要があるため、クエリを API のベース ロケーションに追加する必要があります。
基地の場所:
https://oauth2.googleapis.com/token
追加のクエリ文字列:
?許可の種類=認証コード&client_idの=281413935351-jh5hs5chgf9n84eeqhpodrfq6oir2qnk.apps.googleusercontent.com&client_secret=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&リダイレクト URI=http%3A%2F%2Flocalhost%3A8080%2Flink%2Fgoogleredirect%3FCode%3
Google から直接提供された各フィールドの意味の内訳は次のとおりです。

クエリをURLエンコードすることを忘れないでください リクエストを行う前に。
URL エンコーディング?それは何ですか?
クエリ文字列に特殊文字や空白が含まれている場合、401エラー(Bad Request)が発生します。これは、これらの特殊文字をブラウザで一般的に受け入れられるものに変換する方法です。URLエンコーディングは、 Mendix、任意のマイクロフローまたはナノフローで呼び出すことができます。
これで全てを追加することができ、最終的な文字列は次のようになります。
https://accounts.google.com/o/oauth2/v2/auth?スコープ=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fcloud-platform+https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fcloud-translation&アクセスタイプ=オフライン&許可されたスコープを含める=真&レスポンスタイプ=コード&状態= 1&リダイレクト URI=https://localhost:8080/link/googleredirect?code=&client_idの=281413935351-jh5hs5chgf9n84eeqhpodrfq6oir2qnk.apps.googleusercontent.com
実際のクエリ ステートメントには資格情報が含まれており、アプリ ユーザーのアクセス コードとリダイレクト URL が提供されることに注意してください。そのため、私のものとは異なることになります。
リクエスト本文の定義
これはPostメソッドなので、リクエストボディを提供する必要があります。リクエストで、 カスタムリクエストテンプレート 本文を提供します:
コード=あなたのユーザーアクセスコード

レスポンスを処理する
Mendix 私たちができるようにします インポートマッピングを適用する 応答データをドメイン モデルにマップします。
これを行うには、応答がどのようなものであるかを示す JSON サンプルが必要です。Google のドキュメントには、このサンプルが記載されています。
{ "access_token": "1/fFAGRNJru1FTz70BzhT3Zg", "expires_in": 3920, "token_type": "Bearer", "scope": "https://www.googleapis.com/auth/drive.metadata.readonly", "refresh_token": "1//xEoDL4iW3cxlI7yDbSRFYNG01kVKM2C-259HOF2aQbI" }
Studio Pro で、呼び出し REST アクティビティの [応答] タブの下にある [インポート マッピングを適用] を選択します。
表示されるウィンドウから新しいインポート マッピングを作成することを選択し、マッピングに名前を付けます。
インポートマッピングエディタに入ったら、「要素を選択画面の左上隅にある「JSON構造」をオプションとして選択します。
またはを選択します JSONマッピングを作成する、適切な名前を付けます。次に、上記の JSON をテキスト領域に貼り付けて、「更新」をクリックします。

「OK」をクリックしてこのウィンドウを閉じます。次に「要素の選択」画面に戻り、「すべて展開」をクリックしてすべてをチェックし、「OK」をクリックします。

次に、インポート マッピングで、[自動的にマップ] をクリックするだけです。Studio Pro は、必要なエンティティと関連付けを自動的に作成します。デフォルトでは、これらは非永続エンティティ (メモリ内に存在し、データベースにコミットされないエンティティ) として作成されます。必要に応じてこのマッピングを手動で変更できますが、ほとんどの場合、マッピングは存在しないため、そのままにしておくことができます。
これで、マイクロフロー内の API によって返されたデータにアクセスして取得できるようになりました。

アプリでデータにアクセスできるようになったら、そのデータをどう処理するかはあなた次第です。サービスごとに異なるため、実装は 2 つとして同じものはありません。

私の例では、トークンをデータベース内のユーザー アカウントにリンクされた永続的なエンティティに保存していますが、実際の実装では、暗号化の追加も検討する必要があります。
以上です
RESTサービスの実装方法についてさらに詳しく知りたい場合は、この記事がお役に立てば幸いです。 Mendix、私たちをチェックしてください ドキュメント 詳細については、 アカデミー 学習を始めましょう。