phoenix,各样

by admin on 2018年12月17日

概述

齐同样篇就干如何设置及利用 phoenix framework 来出一个简短的 api。
接着上次的工,下边演示咋样通过 phoenix framework 来构建各个类型的 api
来应本着前者的个请求。

下边用的工程的完好代码已经精通于:
http://git.oschina.net/wangyubin/phoenix-api

概述

及一致首已涉嫌怎么样设置和以 phoenix framework 来开发一个简约的 api。
接着上次的工程,上面演示怎么着通过 phoenix framework 来构建各个类型的 api
来应针对前者的号请求。

下面拔取的工程的整代码都领悟于:
http://git.oschina.net/wangyubin/phoenix-api

号 api 的兑现示例

各个 api 的贯彻示例

restful url 的参数

introduce by code:

  • controller 中并行关代码:

    @doc "/api/param/:name"
    def rest_param1(conn, %{"name" => name}) do
      json conn, %{
        "result": "success",
        "message": "your name is " <> name,
      }
    end

    @doc "/api/param/:name/:age"
    def rest_param2(conn, %{"name" => name, "age" => age}) do
      json conn, %{
        "result": "success",
        "message": "your name is " <> name <> " and age is " <> age,
      }
    end
  • router 相关代码: (router.ex)

    get "/param/:name", ApiParamController, :rest_param1
    get "/param/:name/:age", ApiParamController, :rest_param2
    
  • 起始 phoenix 开发服务器,就好以浏览器中访问对应的 URL

    mix phoenix.server
    

在 浏览器 中访问 http://localhost:4000/api/param/wang
http://localhost:4000/api/param/wang/33 可以看出重返的 json。

restful url 的参数

introduce by code:

  • controller 中互关代码:

    @doc "/api/param/:name"
    def rest_param1(conn, %{"name" => name}) do
      json conn, %{
        "result": "success",
        "message": "your name is " <> name,
      }
    end

    @doc "/api/param/:name/:age"
    def rest_param2(conn, %{"name" => name, "age" => age}) do
      json conn, %{
        "result": "success",
        "message": "your name is " <> name <> " and age is " <> age,
      }
    end
  • router 相关代码: (router.ex)

    get "/param/:name", ApiParamController, :rest_param1
    get "/param/:name/:age", ApiParamController, :rest_param2
    
  • 启航 phoenix 开发服务器,就可以当浏览器被做客对应之 URL

    mix phoenix.server
    

在 浏览器 中访问 http://localhost:4000/api/param/wang
http://localhost:4000/api/param/wang/33 可以望重返的 json。

GET 请求被的参数

introduce by code: api的参数的面的示范一样

  • controller 中互关代码:(api_param_controller.ex)

    @doc "/api/param?name=xxx&age=yyy"
    def rest_param3(conn, params) do
      if Map.has_key?(params, "age") do
        json conn, %{
          "result": "success from rest_param3",
          "message": "your name is " <> params["name"] <> " and age is " <> params["age"],
        }
      else
        json conn, %{
          "result": "success from rest_param3",
          "message": "your name is " <> params["name"],
        }
      end
    end
    
  • router 相关代码: (router.ex)

    get "/param", ApiParamController, :rest_param3
    
  • 开行 phoenix 开发服务器,就足以于浏览器中走访对应的 URL

    mix phoenix.server
    

在 浏览器 中访问 http://localhost:4000/api/param?name=wang&age=33
http://localhost:4000/api/param?name=wang 可以观望重返的 json。

GET 请求中之参数

introduce by code: api的参数的上边的演示一样

  • controller 中并行关代码:(api_param_controller.ex)

    @doc "/api/param?name=xxx&age=yyy"
    def rest_param3(conn, params) do
      if Map.has_key?(params, "age") do
        json conn, %{
          "result": "success from rest_param3",
          "message": "your name is " <> params["name"] <> " and age is " <> params["age"],
        }
      else
        json conn, %{
          "result": "success from rest_param3",
          "message": "your name is " <> params["name"],
        }
      end
    end
    
  • router 相关代码: (router.ex)

    get "/param", ApiParamController, :rest_param3
    
  • 开头 phoenix 开发服务器,就得在浏览器中访问对应之 URL

    mix phoenix.server
    

在 浏览器 中访问 http://localhost:4000/api/param?name=wang&age=33
http://localhost:4000/api/param?name=wang 能够见到再次回到的 json。

POST 请求被的参数

introduce by code: api的参数的点的言传身教一样

  • controller 中相互关代码:(api_param_controller.ex)

    @doc "/api/param"
    def post_param(conn, params) do
      if Map.has_key?(params, "age") do
        json conn, %{
          "result": "success from post_param",
          "message": "your name is " <> params["name"] <> " and age is " <> params["age"],
        }
      else
        json conn, %{
          "result": "success from post_param",
          "message": "your name is " <> params["name"],
        }
      end
    end
    
  • router 相关代码: (router.ex)

    post "/param", ApiParamController, :post_param
    
  • 启动 phoenix 开发服务器,就好在浏览器被做客对应的 URL

    mix phoenix.server
    

测试api 可以下 curl 命令:

    curl -X POST -H "Cache-Control: no-cache" -F "name=wyb" "http://localhost:4000/api/param"
    curl -X POST -H "Cache-Control: no-cache" -F "name=wyb" -F "age=33" "http://localhost:4000/api/param"

POST 请求中之参数

introduce by code: api的参数的地方的以身作则一样

  • controller 中相互关代码:(api_param_controller.ex)

    @doc "/api/param"
    def post_param(conn, params) do
      if Map.has_key?(params, "age") do
        json conn, %{
          "result": "success from post_param",
          "message": "your name is " <> params["name"] <> " and age is " <> params["age"],
        }
      else
        json conn, %{
          "result": "success from post_param",
          "message": "your name is " <> params["name"],
        }
      end
    end
    
  • router 相关代码: (router.ex)

    post "/param", ApiParamController, :post_param
    
  • 启航 phoenix 开发服务器,就可以浏览器中走访对应之 URL

    mix phoenix.server
    

测试api 能够使 curl 命令:

    curl -X POST -H "Cache-Control: no-cache" -F "name=wyb" "http://localhost:4000/api/param"
    curl -X POST -H "Cache-Control: no-cache" -F "name=wyb" -F "age=33" "http://localhost:4000/api/param"

json 格式参数

introduce by code: api的参数的端的示范一样

  • controller 中互相关代码:(api_param_controller.ex)

    @doc "/api/json-param"
    def json_param(conn, params) do
      if Map.has_key?(params, "age") do
        json conn, %{
          "result": "success from json_param",
          "message": "your name is " <> params["name"] <> " and age is " <> to_string(params["age"]),
        }
      else
        json conn, %{
          "result": "success from json_param",
          "message": "your name is " <> params["name"],
        }
      end
    end
    
  • router 相关代码: (router.ex)

    post "/json-param", ApiParamController, :json_param
    
  • 启航 phoenix 开发服务器,就可以于浏览器中访问对应的 URL

    mix phoenix.server
    

测试api 可以用 curl 命令:

    curl -X POST -H "Content-Type: application/json" -H "Cache-Control: no-cache" -d '{
        "name": "wyb"
    }' "http://localhost:4000/api/json-param"

    curl -X POST -H "Content-Type: application/json" -H "Cache-Control: no-cache" -d '{
        "name": "wyb",
        "age": 33
    }' "http://localhost:4000/api/json-param"

json 格式参数

introduce by code: api的参数的地点的演示一样

  • controller 中互关代码:(api_param_controller.ex)

    @doc "/api/json-param"
    def json_param(conn, params) do
      if Map.has_key?(params, "age") do
        json conn, %{
          "result": "success from json_param",
          "message": "your name is " <> params["name"] <> " and age is " <> to_string(params["age"]),
        }
      else
        json conn, %{
          "result": "success from json_param",
          "message": "your name is " <> params["name"],
        }
      end
    end
    
  • router 相关代码: (router.ex)

    post "/json-param", ApiParamController, :json_param
    
  • 开行 phoenix 开发服务器,就足以在浏览器被走访对应的 URL

    mix phoenix.server
    

测试api 可以动用 curl 命令:

    curl -X POST -H "Content-Type: application/json" -H "Cache-Control: no-cache" -d '{
        "name": "wyb"
    }' "http://localhost:4000/api/json-param"

    curl -X POST -H "Content-Type: application/json" -H "Cache-Control: no-cache" -d '{
        "name": "wyb",
        "age": 33
    }' "http://localhost:4000/api/json-param"

下载 文件

introduce by code: api的参数的点的示范一样

  • controller 中互关代码:(api_param_controller.ex)

    @doc "/api/file-param"
    def file_param(conn, params) do
      filepath = "/tmp/downloadfile.txt"
      if Map.has_key?(params, "age") do
        File.write(filepath, "your name is " <> params["name"] <> " and age is " <> to_string(params["age"]))
      else
        File.write(filepath, "your name is " <> params["name"])
      end
    
      conn |> send_file(200, filepath)
    end
    
  • router 相关代码: (router.ex)

    get "/file-param", ApiParamController, :file_param
    
  • 开行 phoenix 开发服务器,就可以于浏览器被做客对应的 URL

    mix phoenix.server
    

在 浏览器 中访问 http://localhost:4000/api/file-param?name=wang&age=33
http://localhost:4000/api/file-param?name=wang 可以看来重临的
json。

下载 文件

introduce by code: api的参数的上边的言传身教一样

  • controller 中相互关代码:(api_param_controller.ex)

    @doc "/api/file-param"
    def file_param(conn, params) do
      filepath = "/tmp/downloadfile.txt"
      if Map.has_key?(params, "age") do
        File.write(filepath, "your name is " <> params["name"] <> " and age is " <> to_string(params["age"]))
      else
        File.write(filepath, "your name is " <> params["name"])
      end
    
      conn |> send_file(200, filepath)
    end
    
  • router 相关代码: (router.ex)

    get "/file-param", ApiParamController, :file_param
    
  • 启航 phoenix 开发服务器,就可以以浏览器被访问对应的 URL

    mix phoenix.server
    

在 浏览器 中访问 http://localhost:4000/api/file-param?name=wang&age=33
http://localhost:4000/api/file-param?name=wang 可以看来重返的
json。

上传 文件

introduce by code: api的参数的面的示范一样

  • controller 中相互关代码:(api_param_controller.ex)

    @doc "/api/file-param"
    def upload_param(conn, params) do
    
      file = params["file"]
      File.cp(file.path, "/tmp/upload.file")
    
      json conn, %{
        "result": "success from file_param",
        "message": "your name is " <> params["name"] <> " and age is " <> to_string(params["age"])
        <> " and the filename which you upload is " <> file.filename,
      }
    end
    
  • router 相关代码: (router.ex)

    post "/file-param", ApiParamController, :upload_param
    
  • 启航 phoenix 开发服务器,就可以于浏览器中走访对应的 URL

    mix phoenix.server
    

测试api 可以使用 curl 命令: 命令中之 file 要替换成你的实在文件路径

    curl -X POST -H "Cache-Control: no-cache" -H "Content-Type: multipart/form-data" \
        -F "name=wyb" -F "age=33" -F "file=@/tmp/test.jpg" "http://localhost:4000/api/file-param"

上传 文件

introduce by code: api的参数的地方的示范一样

  • controller 中互相关代码:(api_param_controller.ex)

    @doc "/api/file-param"
    def upload_param(conn, params) do
    
      file = params["file"]
      File.cp(file.path, "/tmp/upload.file")
    
      json conn, %{
        "result": "success from file_param",
        "message": "your name is " <> params["name"] <> " and age is " <> to_string(params["age"])
        <> " and the filename which you upload is " <> file.filename,
      }
    end
    
  • router 相关代码: (router.ex)

    post "/file-param", ApiParamController, :upload_param
    
  • 起步 phoenix 开发服务器,就得于浏览器中走访对应的 URL

    mix phoenix.server
    

测试api 可以使用 curl 命令: 命令中之 file 要替换成你的实际文件路径

    curl -X POST -H "Cache-Control: no-cache" -H "Content-Type: multipart/form-data" \
        -F "name=wyb" -F "age=33" -F "file=@/tmp/test.jpg" "http://localhost:4000/api/file-param"

总结

足看岀,phoenix framework 的 Plug 提供了长的效益,所以编写 api
卓殊便于。 领会了地点的演示,基本就是好满足构建web服务通常大部分底 api
的状法了。

来源:http://blog.iotalabs.io/

总结

雅观岀,phoenix framework 的 Plug 提供了充裕的效用,所以编写 api
异常便于。 理解了面的演示,基本就可以满足构建web服务日常大部分之 api
的描写法了。

来源:http://blog.iotalabs.io/

相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图