Phoenix 動作検証メモ (4)
以下に沿って確認を。
プロジェクト作成など
mix phx.new . --app todo_phoenix --database mysql
dev.exs の設定修正
mix ecto.create
で、api を追加してみます。
mix phx.gen.json Tasks Task tasks content:string state:integer
以下な出力。
# mix phx.gen.json Tasks Task tasks content:string state:integer
* creating lib/todo_phoenix_web/controllers/task_controller.ex
* creating lib/todo_phoenix_web/controllers/task_json.ex
* creating lib/todo_phoenix_web/controllers/changeset_json.ex
* creating test/todo_phoenix_web/controllers/task_controller_test.exs
* creating lib/todo_phoenix_web/controllers/fallback_controller.ex
* creating lib/todo_phoenix/tasks/task.ex
* creating priv/repo/migrations/20240221053709_create_tasks.exs
* creating lib/todo_phoenix/tasks.ex
* injecting lib/todo_phoenix/tasks.ex
* creating test/todo_phoenix/tasks_test.exs
* injecting test/todo_phoenix/tasks_test.exs
* creating test/support/fixtures/tasks_fixtures.ex
* injecting test/support/fixtures/tasks_fixtures.ex
Add the resource to your :api scope in lib/todo_phoenix_web/router.ex:
resources "/tasks", TaskController, except: [:new, :edit]
Remember to update your repository by running migrations:
$ mix ecto.migrate
言われている通りに
ルーティング追加
ecto.migrate
してみます。で、外からアクセスしてみるに以下。
% curl -i http://localhost:4000/api/tasks
HTTP/1.1 200 OK
date: Wed, 21 Feb 2024 05:45:19 GMT
content-length: 11
vary: accept-encoding
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
x-request-id: F7XKiDOe4TsqKNAAAAEC
{"data":[]}%
この時点で修正差分とか確認してみたいです。とりあえず task_controller.ex と task_json.ex から。
なんとなくですが task 関連の render するものについては名前で判断しているように見えますね
views な何かがあるわけではなくて task_*.ex がそれを担う的なナニ
データ追加してみます。
# curl -v http://localhost:4000/api/tasks -H "Content-Type: application/json" -d '{"task":{"content": "foo"}}'
* Trying 127.0.0.1:4000...
* Connected to localhost (127.0.0.1) port 4000 (#0)
> POST /api/tasks HTTP/1.1
> Host: localhost:4000
> User-Agent: curl/8.1.2
> Accept: */*
> Content-Type: application/json
> Content-Length: 27
>
< HTTP/1.1 201 Created
< date: Wed, 21 Feb 2024 06:17:07 GMT
< content-length: 47
< vary: accept-encoding
< content-type: application/json; charset=utf-8
< cache-control: max-age=0, private, must-revalidate
< x-request-id: F7XMRKQfpzqncGAAAAKh
< location: /api/tasks/1
<
* Connection #0 to host localhost left intact
{"data":{"id":1,"state":"new","content":"foo"}}%
そして再度検索。
curl -i http://localhost:4000/api/tasks
HTTP/1.1 200 OK
date: Wed, 21 Feb 2024 06:17:40 GMT
content-length: 49
vary: accept-encoding
content-type: application/json; charset=utf-8
cache-control: max-age=0, private, must-revalidate
x-request-id: F7XMTCG35PY5W2kAAABk
{"data":[{"id":1,"state":"new","content":"foo"}]}%
某ドキュメントにはテストとか lint の記載もあるのでそのあたりも追い掛けてみます。
とりあえず fixture は自動作成されていた
test/todo_phoenix/tasks_test.exs も作成されている
テストですが state の確認の部分で修正必要でしたが基本的にデフォで通りました。
Credo?
rubocop のようなもの、とのこと。cop は基本使うヒト、になってしまっているのでこれも確認。導入は mix.exs に以下を追加。
{:credo, "~> 1.6", only: [:dev, :test], runtime: false},
で、mix deps.get して mix credo すれば良いとのこと。
ここまでの差分
以下に反映しています。
この記事が気に入ったらサポートをしてみませんか?