MulesoftでAPI開発～最初のAPI開発～

# はじめに
会社の業務にてMulesoftのAnypointStudio、AnypointPlatformを利用した
API開発に携わることになったため、開発メモをここに残しておこうかと思います。

# 開発環境の構築
[公式のページ](https://docs.mulesoft.com/jp/connector-devkit/3.9/setting-up-your-dev-environment)を見ながら
- Java
- Maven
- AnypointStudio
をインストールする。

現在の私のパソコン(Windows10 Pro)でのバージョンは、
- Java　1.8.0
- Maven　3.8.7
- AnypointStudio　7.12.1
となっています。

# AnypointStudioで最初のプロジェクトを作る
## 今回作るもの
APIにリクエストを投げると
```
{
	"Hello":"World"
}
```
と返してくれるAPIをローカルで作成して動かします。


## 1. [File] -> [New] -> [Mule Project] から新規プロジェクトの作成
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256200/a4506f7a-5048-4bc1-ccaf-ff24a02a93bd.png)

## 2. プロジェクト名を決める -> [Finish]
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256200/7fb33460-3f27-2441-557c-15b6a88d8132.png)

## 3. プロジェクトのテンプレートを見てみる
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256200/90ec0b69-6147-14e4-580a-a674cec8c23e.png)

#### Package Explorer
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256200/23b73e1f-6cd7-723d-7121-8f5bd3ad265c.png)
自動生成されたファイルが並びます。
今日は「helloworld.xml」のみを使用します。

#### helloworld(xml) & Mule Palette
基本的にAPIの処理は 
- MulePalette にあるオブジェクトを xmlファイル にドラッグ＆ドロップで配置
- オブジェクトのコンフィグを設定

で構築していきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256200/51012085-549d-d2fb-5fc4-964c2810433a.png)

構築されたものを**フロー**といいます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256200/a24dc145-5850-9579-1560-1fc5eb326e8b.png)


## 4. APIの処理を構築していく

#### HTTPリスナーの配置
APIのトリガとなるHTTPリスナーをまずは配置していきます。
HTTPリスナーを配置すると、その名の通りHTTPリクエストを受け付けることができるようになります。
MulePaletteからListner(HTTP)を配置すると以下のような画面になると思います。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256200/b9ca51f1-00b4-f3bc-df92-8b12239db4ff.png)

#### HTTPリスナーのコンフィグ設定
次にHTTPリスナーオブジェクトのプロパティを設定していきます。
[Basic Settings] の [Connector configuration]の横の[+]ボタンを押す。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256200/57196b3d-983a-3503-cfd8-66f7c0220b3c.png)

以下の設定を行って [OK]を押す
- **Port**：他のアプリケーションが使用していなければデフォルトの「8081」でOK（私の端末はマカフィーが「8081」を使っていたので「8084」に設定した）
- **Base path**：特にこだわりが無ければそのままでOK

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256200/66b6a959-bdda-6aae-33c3-38ca442a1787.png)

- **Path**：今回は「/hello」と設定しました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256200/a50ed485-bbe3-2075-1a79-27266ac0a320.png)


#### TransformMessageオブジェクトの配置
APIが
```
{"Hello":"World"}
```
と返すようにTransformMessageオブジェクトというものを配置します。
TransformMessageはAPIのフロー内で処理される主となるメッセージ（ペイロード）を設定するオブジェクトで、
APIのレスポンス時にメッセージ（ペイロード）に設定されている内容が
最終的なレスポンスとして返されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256200/4f1c81b8-573a-83c0-f8a2-830094ff024f.png)

#### TransformMessageオブジェクトのコンフィグ設定
TransformMessageにはDataweaveというMulesoft独自のスクリプト言語で処理を記述できます。
初期状態が
```
%dw 2.0
output application/java
---
{
}
```
となっているので
```
%dw 2.0
output application/json
---
{
	"Hello":"World"
}
```
にします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256200/9c0cb8cd-5c8e-d7e3-1308-a3d60f70e6ea.png)

これでAPIの構築は終了です。

## 5. APIをローカルで起動して動作確認する
[プロジェクトを右クリック] -> [Run As] -> [Mule Apprication]
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256200/1be353d9-a5bc-63f5-2aca-4fc25bbc21b7.png)

[Console]のメッセージが止まるまで待ちます・・・
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256200/ff10d21a-4d6b-41d5-87a3-5344a21b8154.png)

お好きなブラウザ等で以下にアクセスします。
```
localhost:{ポート番号}{ベースパス}{パス}
```
私の場合、
- ポート番号：8084
- ベースPath：未設定
- パス：/hello
なので
```
http://localhost:8084/hello
```
にアクセスします。
その結果、

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256200/145ed7f8-9529-b574-c709-7a65f51dfa89.png)

とjson形式でのレスポンスを得られたかと思います。
これで今回の **「MulesoftでAPI開発～最初のAPI開発～」** は終了です。

間違っている箇所などあれば、どしどしご指摘ください。
また「こういう事知りたい」などあればわかる範囲で作成したいと思います。