ちなみにこれを書いているのは12月9日月曜日。何を隠そう、登録したことも登録した日付もすっかり忘れて、ツッコミが入って慌てて書いております。自分で登録しておいて非常に申し訳ない。MTのAPIをGraphQL化してみた(途中)みなさんはGraphQLというものをご存知ですか??2015年くらいから公開されたりして、色々世間ではRestAPIに変わる手法として開発したFaceBookや、その他にもGitHub、Airbnb、Netflixなどの大きな企業が採用したことでも話題となっているらしいです。ちなみに私はへぇ〜便利なものができたのね〜くらいの知識しかなくて、いつか触ってみたいなと思っていたので、今回のAdventCalendarのテーマとしてMTのAPIをGraphQL化してみながら勉強してみました。途中と書いてあるのは、そもそもGraphQL自体の理解が浅いのと、MTのAPI全てをカバーするにはとんでもない時間がかかるため、まだまだ入り口のあたりまでとなります。今後も開発は続けていきますので今回は導入編として生暖かい目でみていただければと思います。ためにまとめてみました。GraphQLというのはAPIの一種です。(ざっくり)MTのAPIもそうですが、今まではREST(RESTful)と呼ばれる方式で実装されていることが多い(はず)です。)は全てHTTPメソッド(GET、POST、PUT、DELETE)MTのDataAPIでコンテンツデータを取得する場合、以下のようになります。http://example.com/mt/mt-data-api.cgi/v4/sites/{site_id}/contentTypes/{content_type_id}/dataそして得られる結果は下記のような形になります。]}管理画面から更新しない限り、上記のURLにアクセスした場合は同じ結果が返ってきます。特徴としてリソースごとにURLがあるので、上記URLで取得できるのはContentDataの情報のみです。サイトの名前やコンテンツタイプの名前などを取得したい場合はまた別のURLで取得することになります。画面がContentDataのみの情報で足りるのであれば問題にはなりません。どのサイトのコンテンツデータなのかや、どのコンテンツタイプのコンテンツデータなのかという情報が必要になる場合が多いと思います。その場合は、RestAPIでは複数回に分けてアクセスする必要がありました。開発側は取得したい結果が変わるとその都度エンドポイントを増やす必要があります。今までのエンドポイントで得られる結果は保証するというのも特徴の一つです。極端な話、返ってくる結果でフィールドが一つ増減した場合にはバージョン番号を更新します。した理由でエンドポイントがどんどん増えていって、その度にマニュアルを作り直したり、リリースが必要になったり、すごく手間がかかる作業になってきます。GraphQLGraphQLでは上記Restの問題を解決するために下記のような特徴があります。)はbodyないで書く(Query、Mutation)GraphQLの勉強のため、MTのAPIの一部をGraphQL化してみました。}}その結果得られるjsonは下記になります。}}結果の部分でdataの中に「contentdata」と「sites」があります。「contentdata」がコンテンツデータの情報、「sites」がサイトの情報となっており、コンテンツデータとサイトの情報が1つのリクエストで取得することができます。次はサイト全てとそのサイトに含まれているコンテンツデータを取得してみます。}}その結果得られるjsonは下記になります。}}このjsonを使えばサイトごとのコンテンツデータの一覧を表示するなどができそうです。お気づきかもしれませんが、実は返ってくる結果の中で、1つめのサンプルでコンテンツデータはidとlabelが、2つめはlabelのみが返ってきます。特徴の2つめにある取得したいデータをアクセス時にbodyに送るという部分がここです。}}contentdataの中にidとlabelを書いているので、結果もidとlabelが返ってきます。}}contentdataの中にlabelだけを書いているので、結果もlabelだけが返ってきます。Restではエンドポイントごとに決められた結果が返ってくるので、ユーザ側(番う側)は不必要なデータも受け取る必要がありました。MTの場合、コンテンツデータ一覧取得APIでfieldsを追加することで必要なフィールドのみに絞り込むことができますが、そういった便利実装をしていない限りは実装側が決めたフィールド全てが返ってきます。***GraphQLの場合はユーザ側が必要なフィールドを書くことで自分が必要なデータのみを受け取ることができます。私の勉強不足で人に説明できるほど理解が追いついていないため、ここまでとなります。プラグインを作った時に使用したモジュールの話や詰まったポイントとかも書きたかったのですが、自分の中でもまとめきれていないので、またいつか書きたいと思います。MTのAPIは使ったことがあるけど、GraphQLって何かは知らないという方に少しでもそういうものか、ふ〜んと思ってもらえれば、嬉しいです。upLoginユーザーは見つかりませんでした。