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 すれば良いとのこと。

ここまでの差分

以下に反映しています。


この記事が気に入ったらサポートをしてみませんか?