Phoenix Frameworkでお手軽にAPI作成
環境
- Elixir 1.7.4
- Phoenix v1.4.0
プロジェクト作成
表示関連はいらないのでオプションで指定する。
$ mix phx.new api_project --no-html --no-webpack
DBでMySQLを使いたいときは --database=mysql
も必要。
その後は表示に従って、
$ cd api_project $ mix ecto.create
を実行する。
データモデル作成
今回はjsonを返すAPIを作るので、そのためのデータモデルを作成する。
$ mix phx.gen.json Blog Article articles title:string body:text
表示に従って、ルーティングの追加とマイグレーションをする。
defmodule ApiProject,Router do use ApiProjectWeb, :router pipeline :api do plug :accepts, ["json"] end scope "/api", ApiProjectWeb do pipe_through :api # 以下を追加 resources "/articles", ArticleController, except: [:new, :edit] end end
上記を変更したらマイグレーション。
$ mix exto.migrate
実行
$ iex -S mix phx.server
http://localhost:4000/api/articles
へ以下のようにPOSTするとデータが登録できる。
{ "article": { "title": "記事のタイトル", "body": "記事の本文" } }
レスポンスで以下のようなものが帰ってきたら成功。
{ "data": { "title": "記事のタイトル", "id": 1 "body": "記事の本文" } }
http://localhost:4000/api/articles
をGETすると一覧が見れる。(データは上のレスポンスの内容と一致してるはず)
tips
resources "/articles", ArticleController, except: [:new, :edit]
上記の except: [:new, edit]
の箇所でHTTPメソッドの制限ができる。
例えば表示だけにしたければ
resources "/articles", ArticleController, only: [:index, :show]
とかやるとGETだけ受け付けるようになる。
ルーティングがどうなってるのか知りたければ、
$ mix phx.routes
で一覧を見れるので、そこを見ながらやると良さそう。