1. 安裝腳手架
2. 生成基本項目
mix phx.new hello
項目代碼結構以下:
├── README.md
├── brunch-config.js
├── config
│ ├── config.exs
│ ├── dev.exs
│ ├── prod.exs
│ ├── prod.secret.exs
│ └── test.exs
├── http
│ ├── get.http
│ ├── post.http
│ └── put.http
├── lib
│ ├── hello
│ │ ├── endpoint.ex
│ │ └── repo.ex
│ └── hello.ex
├── mix.exs
├── mix.lock
├── package.json
├── priv
│ ├── gettext
│ │ ├── en
│ │ │ └── LC_MESSAGES
│ │ │ └── errors.po
│ │ └── errors.pot
│ ├── repo
│ │ ├── migrations
│ │ │ └── 20180417133336_create_user.exs
│ │ └── seeds.exs
│ └── static
│ ├── css
│ │ ├── app.css
│ │ └── app.css.map
│ ├── favicon.ico
│ ├── images
│ │ └── phoenix.png
│ ├── js
│ │ ├── app.js
│ │ └── app.js.map
│ └── robots.txt
├── test
│ ├── channels
│ ├── controllers
│ │ └── page_controller_test.exs
│ ├── models
│ ├── support
│ │ ├── channel_case.ex
│ │ ├── conn_case.ex
│ │ └── model_case.ex
│ ├── test_helper.exs
│ └── views
│ ├── error_view_test.exs
│ ├── layout_view_test.exs
│ └── page_view_test.exs
├── web
│ ├── channels
│ │ └── user_socket.ex
│ ├── controllers
│ │ ├── democontroller.ex
│ │ ├── page_controller.ex
│ │ └── usercontroller.ex
│ ├── gettext.ex
│ ├── models
│ │ └── user.ex
│ ├── router.ex
│ ├── static
│ │ ├── assets
│ │ │ ├── favicon.ico
│ │ │ ├── images
│ │ │ │ └── phoenix.png
│ │ │ └── robots.txt
│ │ ├── css
│ │ │ ├── app.css
│ │ │ └── phoenix.css
│ │ ├── js
│ │ │ ├── app.js
│ │ │ └── socket.js
│ │ └── vendor
│ ├── templates
│ │ ├── layout
│ │ │ └── app.html.eex
│ │ ├── page
│ │ │ ├── appdemo.html.eex
│ │ │ └── index.html.eex
│ │ └── user
│ │ └── index.html.eex
│ ├── views
│ │ ├── demoview.ex
│ │ ├── error_helpers.ex
│ │ ├── error_view.ex
│ │ ├── layout_view.ex
│ │ ├── page_view.ex
│ │ └── userview.ex
│ └── web.ex
└── yarn.lock
3. 代碼說明
備註: 代碼添加了一個簡單的rest demo ,參考 web/controllers/democontroller.ex
a. 初始化項目處理:
a. mix deps.get
b. mix ecto.create && mix ecto.migrate
c. npm install
d. mix phoenix.server or mix phx.server
b. 代碼 controller
比較簡單
defmodule Hello.DemoController do
use Hello.Web, :controller
def show(conn,params) do
render conn, "index.json",params
end
def index(conn,params) do
render conn, "index.json",params
end
def app(conn,params) do
render conn, "app.json",params
end
def create(conn, params) do
render conn, "create.json",params
end
def update(conn,params) do
render conn, "update.json",params
end
end
c. 代碼 view (就是簡單的數據返回)
defmodule Hello.DemoView do
use Hello.Web, :view
def render("index.json", _params) do
%{
name: "dalong",
age: 444
}
end
def render("create.json", _params) do
[
%{
name: "update",
age: 333,
}
]
end
def render("update.json", _params) do
[
%{
name: "appdemo",
age: 444
},
%{
name: "aaaaaa",
age: 5
},
%{
name: "dalaaaong",
age: 44
},
%{
name: "dalong",
age: 2
}
]
end
def render("app.json",_params) do
[
%{
name: "appdemo",
age: 444
},
%{
name: "aaaaaa",
age: 5
},
%{
name: "dalaaaong",
age: 44
},
%{
name: "dalong",
age: 2
}
]
end
end
d. router (配置api 訪問)
web/router.ex
scope "/api", Hello do
pipe_through :api
resources "/demo" , DemoController
end
4. 啓動測試
項目使用了一個vscode 插件http 能夠直接模擬使用,或者參考README.md
mix phx.server
a. post
http://localhost:4000/api/demo
curl --request POST \
--url http://localhost:4000/api/demo \
--header 'content-type: application/json' \
--data '{"name": "sample","time": "Wed, 21 Oct 2015 18:27:50 GMT"}'
b. put
http://localhost:4000/api/demo/demoid
curl --request PUT \
--url http://localhost:4000/api/demo/appdemo \
--header 'content-type: application/json' \
--data '{"name": "sample","time": "Wed, 21 Oct 2015 18:27:50 GMT"}'
c. get
http://localhost:4000/api/demo
curl --request GET \
--url http://localhost:4000/api/demo
5. 參考資料