備注:
官方提供的腳手架工具,我們可以直接使用,生成代碼,同時需要nodejs 環境配置(比較簡單,參考
相關資料即可)
1. 安裝腳手架
mix archive.install https://github.com/phoenixframework/archives/raw/master/phx_new.ez
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. 參考資料
https://github.com/rongfengliang/phoenix-rest-demo
https://hexdocs.pm/phoenix/Phoenix.Router.html#resources/4