APi Gateway Platform Apigee (1)  XMLからJSONへのデータ変換

APigeeの調査をすることになったのですが、あまり日本語での資料がなかったので、2016年10月時点で調べたことをまとめておきます。

**※2016年11月にリニューアルが行われたようですが、画面遷移時にバグるみたいで、いきなりサインアウトするなどします。旧デザインを選択できるので、そちらで操作を行った方が良さそうです。** 

※本記事においては簡単なAPi Gatewayの作成をしますが、アクティベーションに時間がかかるので、初めての方は先にアカウント作成とアクティベーションをしてから記事を読まれた方が良いかも知れません。


# 前段の説明

## そもそも APi Gatewayとは

- Web APi：httpの通信を利用してサーバ機能を利用・データをやり取りする  
クライアントはサーバにリクエストし、サーバはクライアントにレスポンスを返す。

`例：ブラウザ(クライアント)から、connpassという勉強会管理サイトのAPiエンドポイントにアクセスする。すると、connpass(サーバサイド)はキーワードを含む勉強会一覧データを返す。`
　　  http://connpass.com/api/v1/event/?keyword=python    

- Web APi Gateway：上のクライアント〓サーバの間に入って仲介する  
つまり、クライアントはGatewayにリクエストし、Gatewayはサーバにリクエストをする。サーバはGatewayにレスポンスを返し、Gatewayはクライアントにレスポンスを返す。ということになります。

＜気が向いたら図を入れます＞

## Gatewayを挟むメリット
データ変換、セキュリティ向上、エンドポイントの集約、アクセス分析などなどをGatewayに持たせることができる。
一方で、何でもかんでも無理に集約するとドツボにはまる・・・らしい。


## APi Gatewayサービスのリスト
いろんなIT企業がAPi Gatewayサービスを提供しています。
数年前から"APi経済圏"なる単語があったと思うので、現状に至る過程を知りたい方はbingって下さい。
 http://www.bing.com/search?q=API%E7%B5%8C%E6%B8%88%E5%9C%8F

- IBM : http://ibm.com/software/products/ja/api-connect
- Microsoft : https://azure.microsoft.com/ja-jp/services/api-management/
- Amazon : https://aws.amazon.com/jp/api-gateway/
- Google : https://apigee.com/api-management/#/homepage

「なんでGoogleのAPi Gatewayが"Apigee"なんだ？」とお思いかも知れませんが、2016年9月に買収を発表しました。
https://cloudplatform.googleblog.com/2016/09/Google-to-acquire-apigee.html

本記事ではこのApigeeを少し、ねじってみようと思います。


# Apigeeの基本情報

- Apigee：会社名
- Apigee Edge：メインサービス名?

他にApigee senseなどのプロダクトがある模様です。。

## 値段
従量課金制ではないので他社サービスとの比較が難しく、単純にあるがままのプランを抜粋して転記します。
2016年11月時点での情報となりますので、必ず最新情報を参照するようにして下さい！
https://apigee.com/about/pricing/apigee-edge-pricing-features

| プラン名 | Start | Pro (for small and medium-sized businesses ) | Enterprise |
|:-:|:-:|:-:|:-:|
| Price  | $300／月  | $2250／月  |  要問合わせ |
|  API Calls Limit |  200万call／月 | 800万call／月  | ーーー  |
|  Number of API Proxies |  5 | 25  | ーーー  |

使いたい機能がEnterpriseでしか提供されていない場合は、もはやEnterprise一択ですね。

# ApigeeでAPi Gatewayを作ってみる

フリートライアルがある模様です。特にクレジットカード登録など不要でした。

## アカウント作成

![apigee_n1.png](https://qiita-image-store.s3.amazonaws.com/0/147747/d2a4acf0-e343-71cf-6dc4-d8c2772ddba2.png)

- アカウント情報の入力
Usernameが組織名として使われるので注意。Company Nameは適当なもので大丈夫でした。（というか、古い会社名が入っていたりします。。）
![apigee_n2.png](https://qiita-image-store.s3.amazonaws.com/0/147747/f749cad1-b0ae-ddfa-1032-20afe1bc7285.png)

- 「Create account」ボタンを押すと登録メールアドレスにアクティベーションURLが送られてくるので、そのURLをクリックしてアカウントをアクティベートしてください。

- ダッシュボード？的な画面が表示されるので、"Create & Manage APIs "  をクリック。
<img width="420" alt="apigee1.png" src="https://qiita-image-store.s3.amazonaws.com/0/147747/4f483d51-2e58-978a-380d-ef165f5a1113.png">


- ここで、 "*Free Apigee accounts are limited to one organization on the API Platform.*" という意味深な文が出てきますが、それ以上の無料プランの詳しい情報は得られません。「Activate」をクリックして下さい。  

![apigee_n3.png](https://qiita-image-store.s3.amazonaws.com/0/147747/209d9db6-18b2-4012-4003-18bf5e54bdc9.png)


**数分待つことになります。もしくは強制的にトップに飛ばされます**  
 

- サービスのアクティベーションが終わったら、もう一度"Create & Manage APIs "をクリックしてください。サービスのダッシュボードページが開きます。

※わかりにくい表現で恐縮です。まずアカウント自体のアクティベーション、すぐ上のステップでAPi管理機能のアクティベーションをしたことになります。
**登録したメアドのメールボックスを確認していただくと、先ほど自分で指定したOrganizationについてのメールが届いていると思うので、内容を確認し、メール内のURLをクリックしてください。**




## APi Gatewayの作成
- 旧デザインで試します。サービスのダッシュボードページに表示されてるバーの"Get Started"をクリックして下さい。
![apigee_n5.png](https://qiita-image-store.s3.amazonaws.com/0/147747/249cd17b-2b31-1cba-fc0c-c902170a2ae9.png)


- "Build a Proxy"ページにて、 most commonが選択されたままの状態で「Next」ボタンをクリック。
このNextボタン、というかページデザインが変なところで切れており、画面サイズによっては上手く表示されないようです。表示されない場合はスクロールしたり、ブラウザの表示領域をズームアウトしてみてください。
![apigee_n6.png](https://qiita-image-store.s3.amazonaws.com/0/147747/c1341c1c-6e52-6554-c6f4-59ecc52fd84e.png)


- 作成するApiの設定を入力します。ひとまずversionなどのことは置いておきます。
    - Proxy Name: ApigeeのエンドポイントURLを設定します。hogehogeなど入れましょう。Pathも同じです。
    - Existing APi: ターゲットとなるAPiのエンドポイントを指定します。
        - RSSもいけるようです。今回は野球のニュース↓でも見ましょう。Firefox推奨で、ブラウザから開いてみてください。
        - http://rss.rssad.jp/rss/nikkansports/baseball/atom.xml
        - コピーして、Existing APiに貼り付けます。
        - 注意：あくまで、10回程度アクセスするだけです。負荷をかけるようなことをしませんし、してはいけません。

![apigee_n7.png](https://qiita-image-store.s3.amazonaws.com/0/147747/ba2b1dea-dfab-0c0f-73ad-c8cefe393883.png)

- アクセスについては制限なし（none）で、CORS headerは今回は取り敢えずチェックいれておきます。
![apigee_n8.png](https://qiita-image-store.s3.amazonaws.com/0/147747/86f08432-49d2-a455-9436-a70f5a3a1ac3.png)


- また、Production環境、test環境の両方を作成します。あとは特に詰まらずにAPiを公開出来るかと思います。

- 上部バー「Dashboard」の隣の「APIs」から、自分が作成した**APiのサマリーページ**を開くことが出来ます。API Proxiesというリストに表示されるはずです。（何もしなくても、自動遷移するかも？）
エンドポイントに設定したURLをブラウザ(Firefox推奨)からアクセスしてみて、自分が設定したターゲットの情報が出て来れば作成成功です。表示されているURLをクリックするだけです。
![apigee_n9.png](https://qiita-image-store.s3.amazonaws.com/0/147747/f23d0e6b-a300-16a7-9320-94b9ed3abf33.png)


- これで、ブラウザ(クライアント)とニュースサイト(サーバ)の間にAPi Gatewayを挟むことが出来ました。
上部バーの「Analytics」から、APiのアクセス状況などを見ることが出来ます。時間の単位が大きいと、いまアクセスした分が表示されないかも知れません。その場合は、DayをHourに変えたり刻んでみてください。
右上にあるプルダウンから「test」を選ぶと、test環境のAPiの情報を見ることが出来ます。
Production環境の場合は「prod」です。
![apigee_n10.png](https://qiita-image-store.s3.amazonaws.com/0/147747/d0822478-b617-9067-b65f-4697889e52ad.png)


## APi Gatewayでデータ編集
- APiのサマリーページの上の方に「OVERVIEW / DEVELOP/ TRACE/ PERFORMANCE」というタブがあるので、「DEVELOP」をクリックします。
- 2つの矢印図がド真ん中にあるのですが、右に向かっているのがクライアントからのリクエストで、左に向かっているのがサーバからのレスポンスを意味しています。
RSSから返ってきているレスポンスはXML形式なので、これをJSON形式に変更します。左に向かってる矢印の端に「+STEP」と描かれている四角がありますが、それをクリックすると様々な選択肢が出てきます。そこから「XML to JSON」を選択します。画面左上の青い「Save」ボタンを押すと、今やった操作が保存・反映されます。
![apigee_n11.png](https://qiita-image-store.s3.amazonaws.com/0/147747/7f422a09-faa5-e1ec-a292-66b5a1c205d1.png)

- 改めて、自分が作ったAPiのURLをブラウザ(Firefox推奨)からアクセスしてみてください。XMLだったデータが、JSON形式に変換されているのが分かると思います。

このような形で、簡単にXMLからJSONへの変換をすることが出来ました。
RSSのデータをいじるということで、何となく Yahoo! Pipesを思い出しました…

本記事ではここまで。また最新の情報を調べて色々とねじってみる予定です。