Flex Gateway新着情報
Governance新着情報
Monitoring API Managerこのワークフローは、REST API の設計、実装、テストのプロセスを示しています。
例として、このワークフローではモックユーザー情報を JSON 形式で提供する無料のオンライン REST サービス {JSON} Placeholder を使用します。
Design Center の API Designer、Anypoint Studio の API 仕様プロジェクトツール、または任意のテキストエディターを使用して、API 仕様を設計します。
サービスが返す内容の例として使用するユーザーのリストを含む JSON ファイルを作成します。
[
  {
    "id": 1,
    "name": "Leanne Graham",
    "username": "Bret",
    "email": "Sincere@april.biz",
    "address": {
      "street": "Kulas Light",
      "suite": "Apt. 556",
      "city": "Gwenborough",
      "zipcode": "92998-3874",
      "geo": {
        "lat": "-37.3159",
        "lng": "81.1496"
      }
    },
    "phone": "1-770-736-8031 x56442",
    "website": "hildegard.org",
    "company": {
      "name": "Romaguera-Crona",
      "catchPhrase": "Multi-layered client-server neural-net",
      "bs": "harness real-time e-markets"
    }
  }
]
user-example.json として保存します。
次の API 仕様を使用して新しい空のファイルを作成します。
#%RAML 1.0
title: placeholder
version: 1.0
/users:
  get:
    description: Retrieve a list of all the users
    responses:
      200:
        body:
          application/json:
            example: !include user-example.json
  /userbyid:
    get:
      description: Get information about a particular user
      queryParameters:
        id:
          description: Specify the id of the user you want to retrieve
          type: integer
          required: false
          example: 3
      responses:
        200:
          body:
            application/json:
              example: |
                [
                  {
                    "id": 3,
                    "name": "Clementine Bauch",
                    "username": "Samantha",
                    "email": "Nathan@yesenia.net",
                    "address":
                      {
                        "street": "Douglas Extension",
                        "suite": "Suite 847",
                        "city": "McKenziehaven",
                        "zipcode": "59590-4157",
                        "geo": { "lat": "-68.6102", "lng": "-47.0653" },
                      },
                    "phone": "1-463-123-4447",
                    "website": "ramiro.info",
                    "company":
                      {
                        "name": "Romaguera-Jacobson",
                        "catchPhrase": "Face to face bifurcated interface",
                        "bs": "e-enable strategic applications",
                      }
                  }
                ]
api.raml として保存します。
Studio で、[File (ファイル)] > [New (新規)] > [Mule Project (Mule プロジェクト)] を選択します。
[Project Name (プロジェクト名)] で、Mule プロジェクトの名前を入力します。
Exchange から API 仕様をインポートする場合、[Import a published API (パブリッシュ済みの API をインポート)] を選択し、プラスアイコンをクリックして [From Exchange (Exchange から)] を選択します。
ファイルシステムのローカルファイルから API 仕様をインポートする場合、[Import RAML from Local File (ローカルファイルから RAML をインポート)] を選択します。
Design Center から API 仕様をインポートする場合、[Download RAML from Design Center (Design Center から RAML をダウンロード)] を選択します。
まだ選択されていない場合は、[Scaffold Flows From These API Specifications (これらの API 仕様からフローをスキャフォールディングする)] を選択します。
[Finish (完了)] をクリックします。
APIkit は、インポートした API 仕様に基づいて必要なフローを生成します。
[Run (実行)] > [Run As (別のユーザーとして実行)] > [Mule Application (Mule アプリケーション)] をクリックして APIkit プロジェクトを実行します。
Anypoint Studio で、[APIkit Consoles (APIkit コンソール)] ビューを見つけ、ベースポイント URL http://localhost:8081/console/ の下にある [Open console (コンソールを開く)] をクリックします。
デフォルトのブラウザーが開きます。API Console に、API の概要と、タイトル、バージョン、サポートされるプロトコルなどのプロジェクトに関する情報が表示されます。
[API Summary (API の概要)] で、/users リソースの [GET] を選択します。
リソースの詳細ページが開き、HTTP 200 応答の予想される JSON 例などが表示されます。
[API Summary (API の概要)] で、/userbyid を展開します。
/usersbyid リソースの [GET] を選択します。
[Try it (試す)] をクリックして、要求を送信するためのビューを展開します。
API Console に、要求を試すためのパラメーターとヘッダーを追加するセクションが表示されます。
選択されていない場合は、[Show optional parameters (省略可能なパラメーターを表示)] を選択します。
id パラメーターのクエリパラメーター値として「3」と入力し、[Send (送信)] をクリックします。
HTTP 200 応答は、/usersbyid リソースに対する要求が成功したことを確認します。これには、ID 3 のユーザーのユーザー情報が含まれます。この応答には、JSON の例を含む本文も含まれます。
API からの例の代わりに、JSON Placeholder サービスの実際のデータを返すようにフローを変更します。
[Mule Palette (Mule パレット)] から新しい [Flow] コンポーネントをドラッグします。
新しいフローの名前を「user_request_flow」に変更します。
[HTTP Request] コンポーネントをフロープロセスにドラッグします。
[General (一般)] の [Request (要求)] のプロパティエディターで、次の HTTP 要求オプションを設定します。
[Method (メソッド)] で、デフォルトの [GET] をそのままにします。
[Path (パス)] で、「/users」に設定します。
[Query Parameters (クエリパラメーター)] で、[Switch to expression mode (式モードに切り替え)] を選択し、次の DataWeave スクリプトを貼り付けます。
output application/java
---
if (not isEmpty(attributes.queryParams))
{
	id : attributes.queryParams.id
}
else
{}
get:\users:api-config フローと get:\users\userbyid:api-config フローの [Transform Message] コンポーネントを削除します。
削除された [Transform Message] コンポーネントの代わりに、フローごとに 1 つの [Flow Reference] をドラッグします。
[Flow Reference] コンポーネントのプロパティエディターで、フロー名を「user_request_flow」として設定します。
変更を保存します。
Package Explorer で、プロジェクト名を右クリックし、[Run As (別のユーザーとして実行)] > [Mule Application (Mule アプリケーション)] を選択します。
ブラウザーを開き、http://localhost:8081/api/users に移動します。
JSON Placeholder サービスのユーザー情報が返されます。
[
   {
      "id": 1,
      "name": "Leanne Graham",
      "username": "Bret",
      "email": "Sincere@april.biz",
      "address": {
        "street": "Kulas Light",
        "suite": "Apt. 556",
        "city": "Gwenborough",
        "zipcode": "92998-3874",
        "geo": {
          "lat": "-37.3159",
          "lng": "81.1496"
    ...
    {
    "id": 10,
    "name": "Clementina DuBuque",
    "username": "Moriah.Stanton",
    "email": "Rey.Padberg@karina.biz",
    "address": {
      "street": "Kattie Turnpike",
      "suite": "Suite 198",
      "city": "Lebsackbury",
      "zipcode": "31428-2261",
      "geo": {
        "lat": "-38.2386",
        "lng": "57.2232"
      }
...
]
http://localhost:8081/api/users/userbyid?id=4 に移動して、ID = 4 のユーザーに関する情報を取得します。
[
  {
    "id": 4,
    "name": "Patricia Lebsack",
    "username": "Karianne",
    "email": "Julianne.OConner@kory.org",
    "address": {
      "street": "Hoeger Mall",
      "suite": "Apt. 692",
      "city": "South Elvis",
      "zipcode": "53919-4257",
      "geo": {
        "lat": "29.4572",
        "lng": "-164.2990"
      }
    },
    "phone": "493-170-9623 x156",
    "website": "kale.biz",
    "company": {
      "name": "Robel-Corkery",
      "catchPhrase": "Multi-tiered zero tolerance productivity",
      "bs": "transition cutting-edge web services"
    }
  }
]
REST API の作成、実装、テストが完了しました。