概述

上一篇已经提到如何安装以及利用 phoenix framework 来开发一个简单的 api。 接着上次的工程,下面演示如何通过 phoenix framework 来构建各种类型的 api 来应对前端的各类请求。

下面使用的工程的完整代码已经公开在: http://git.oschina.net/wangyubin/phoenix-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/wanghttp://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=33http://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"

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=33http://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"

总结

可以看岀,phoenix framework 的 Plug 提供了丰富的功能,所以编写 api 非常方便。 掌握了上面的示例,基本就可以满足构建web服务时大部分的 api 的写法了。

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

phoenix 开发API系列(二)phoenix 各类 api 实现方式的更多相关文章

  1. Redis总结(五)缓存雪崩和缓存穿透等问题 Web API系列(三)统一异常处理 C#总结(一)AutoResetEvent的使用介绍(用AutoResetEvent实现同步) C#总结(二)事件Event 介绍总结 C#总结(三)DataGridView增加全选列 Web API系列(二)接口安全和参数校验 RabbitMQ学习系列(六): RabbitMQ 高可用集群

    Redis总结(五)缓存雪崩和缓存穿透等问题   前面讲过一些redis 缓存的使用和数据持久化.感兴趣的朋友可以看看之前的文章,http://www.cnblogs.com/zhangweizhon ...

  2. C#开发BIMFACE系列4 服务端API之源上传文件

    在注册成为BIMFACE的应用开发者后,要能在浏览器里浏览你的模型或者获取你模型内的BIM数据, 首先需要把你的模型文件上传到BIMFACE.根据不同场景,BIMFACE提供了丰富的文件相关的接口. ...

  3. C#开发BIMFACE系列3 服务端API之获取应用访问凭证AccessToken

    系列目录     [已更新最新开发文章,点击查看详细] BIMFACE 平台为开发者提供了大量的服务器端 API 与 JavaScript API,用于二次开发 BIM 的相关应用. BIMFACE ...

  4. C#开发BIMFACE系列15 服务端API之获取模型的View token

    系列目录     [已更新最新开发文章,点击查看详细] 在<C#开发BIMFACE系列3 服务端API之获取应用访问凭证AccessToken>中详细介绍了应用程序访问API的令牌凭证.我 ...

  5. C#开发BIMFACE系列40 服务端API之模型集成

    BIMFACE二次开发系列目录     [已更新最新开发文章,点击查看详细] 随着建筑信息化模型技术的发展,越来越多的人选择在云端浏览建筑模型.现阶段的云端模型浏览大多是基于文件级别,一次只可以浏览一 ...

  6. C#开发BIMFACE系列41 服务端API之模型对比

    BIMFACE二次开发系列目录     [已更新最新开发文章,点击查看详细] 在建筑施工图审查系统中,设计单位提交设计完成的模型/图纸,审查专家审查模型/图纸.审查过程中如果发现不符合规范的地方,则流 ...

  7. C#开发BIMFACE系列42 服务端API之图纸对比

    BIMFACE二次开发系列目录     [已更新最新开发文章,点击查看详细] 在我的前一篇博客<C#开发BIMFACE系列42 服务端API之图纸对比>中详细介绍了BIMFACE服务端接口 ...

  8. C#开发BIMFACE系列43 服务端API之图纸拆分

    BIMFACE二次开发系列目录     [已更新最新开发文章,点击查看详细] 在上一篇博客<C#开发BIMFACE系列42 服务端API之图纸对比>的最后留了一个问题,在常规业务场景下,一 ...

  9. C#开发BIMFACE系列44 服务端API之计算图纸对比差异项来源自哪个图框

    BIMFACE二次开发系列目录     [已更新最新开发文章,点击查看详细] 在前两篇博客<C#开发BIMFACE系列42 服务端API之图纸对比>.<C#开发BIMFACE系列43 ...

  10. C#开发BIMFACE系列46 服务端API之离线数据包下载及结构详解

    BIMFACE二次开发系列目录     [已更新最新开发文章,点击查看详细] 在前一篇博客<C#开发BIMFACE系列45 服务端API之创建离线数据包>中通过调用接口成功的创建一个离线数 ...

随机推荐

  1. jqueryValidation使用

    jq form表单前端校验可以使用jq插件jquery-validation.js.具体的使用方法: 1.引入文件: <link rel="stylesheet" href= ...

  2. nginx+uwsgi<django web环境的搭建>

    1.sudo pip install uwsgi 2.sudo apt install nginx 3.sudo /etc/init.d/nginx start 4.netstat -tpnl 5./ ...

  3. 安装memcache扩展

    今天早上去公司打开新项目,结果提示"Class 'Memcache' not found",于是上网搜了下这是怎么回事?现在在这里记录一下解决过程,以备查询,也希望能帮助到遇到相同 ...

  4. if语句

    Python是一门用于编程的语言,所以必要的判断是一定有的,本章介绍的就是Python的判断语句if判断. 因为Python在一句代码结束的时候没有符号来明确的标记,这就造成了Python的if语句和 ...

  5. aa4

    // 初始化地图 var BMapExt = new BMapExtension(domMain, BMap, require('echarts'), require('zrender')); var ...

  6. tomcat 解决端口8080冲突

    这样的问题有时会因为eclipse等IDE使用bug导致. 解决方法: 使用dos 命令 运行---cmd--netstat -ano|findstr 8080 键入命令后,dos下会显示正在使用80 ...

  7. java中获取路径的几种方式

    总是忘记, 备份一下,方便下次用. 第一种: File directory = new File("");//参数为空 String courseFile = directory. ...

  8. arcgis操作笔记-根据属性提取某区域要素

    1. 提取

  9. Linux 下curl模拟Http 的get or post请求

    一.get请求 curl "http://www.baidu.com"  如果这里的URL指向的是一个文件或者一幅图都可以直接下载到本地 curl -i "http:// ...

  10. Entity Framework 6, database-first with Oracle

    Entity Framework 6, database-first with Oracle 转载自http://csharp.today/entity-framework-6-database-fi ...