phoenix 开发API系列(二)phoenix 各类 api 实现方式
概述
上一篇已经提到如何安装以及利用 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/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。
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=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"
总结
可以看岀,phoenix framework 的 Plug 提供了丰富的功能,所以编写 api 非常方便。 掌握了上面的示例,基本就可以满足构建web服务时大部分的 api 的写法了。
phoenix 开发API系列(二)phoenix 各类 api 实现方式的更多相关文章
- Redis总结(五)缓存雪崩和缓存穿透等问题 Web API系列(三)统一异常处理 C#总结(一)AutoResetEvent的使用介绍(用AutoResetEvent实现同步) C#总结(二)事件Event 介绍总结 C#总结(三)DataGridView增加全选列 Web API系列(二)接口安全和参数校验 RabbitMQ学习系列(六): RabbitMQ 高可用集群
Redis总结(五)缓存雪崩和缓存穿透等问题 前面讲过一些redis 缓存的使用和数据持久化.感兴趣的朋友可以看看之前的文章,http://www.cnblogs.com/zhangweizhon ...
- C#开发BIMFACE系列4 服务端API之源上传文件
在注册成为BIMFACE的应用开发者后,要能在浏览器里浏览你的模型或者获取你模型内的BIM数据, 首先需要把你的模型文件上传到BIMFACE.根据不同场景,BIMFACE提供了丰富的文件相关的接口. ...
- C#开发BIMFACE系列3 服务端API之获取应用访问凭证AccessToken
系列目录 [已更新最新开发文章,点击查看详细] BIMFACE 平台为开发者提供了大量的服务器端 API 与 JavaScript API,用于二次开发 BIM 的相关应用. BIMFACE ...
- C#开发BIMFACE系列15 服务端API之获取模型的View token
系列目录 [已更新最新开发文章,点击查看详细] 在<C#开发BIMFACE系列3 服务端API之获取应用访问凭证AccessToken>中详细介绍了应用程序访问API的令牌凭证.我 ...
- C#开发BIMFACE系列40 服务端API之模型集成
BIMFACE二次开发系列目录 [已更新最新开发文章,点击查看详细] 随着建筑信息化模型技术的发展,越来越多的人选择在云端浏览建筑模型.现阶段的云端模型浏览大多是基于文件级别,一次只可以浏览一 ...
- C#开发BIMFACE系列41 服务端API之模型对比
BIMFACE二次开发系列目录 [已更新最新开发文章,点击查看详细] 在建筑施工图审查系统中,设计单位提交设计完成的模型/图纸,审查专家审查模型/图纸.审查过程中如果发现不符合规范的地方,则流 ...
- C#开发BIMFACE系列42 服务端API之图纸对比
BIMFACE二次开发系列目录 [已更新最新开发文章,点击查看详细] 在我的前一篇博客<C#开发BIMFACE系列42 服务端API之图纸对比>中详细介绍了BIMFACE服务端接口 ...
- C#开发BIMFACE系列43 服务端API之图纸拆分
BIMFACE二次开发系列目录 [已更新最新开发文章,点击查看详细] 在上一篇博客<C#开发BIMFACE系列42 服务端API之图纸对比>的最后留了一个问题,在常规业务场景下,一 ...
- C#开发BIMFACE系列44 服务端API之计算图纸对比差异项来源自哪个图框
BIMFACE二次开发系列目录 [已更新最新开发文章,点击查看详细] 在前两篇博客<C#开发BIMFACE系列42 服务端API之图纸对比>.<C#开发BIMFACE系列43 ...
- C#开发BIMFACE系列46 服务端API之离线数据包下载及结构详解
BIMFACE二次开发系列目录 [已更新最新开发文章,点击查看详细] 在前一篇博客<C#开发BIMFACE系列45 服务端API之创建离线数据包>中通过调用接口成功的创建一个离线数 ...
随机推荐
- 简单的通用TreeView(WPF)
工作中要为很多类创建TreeView, 很多时候仅仅是因为要显示字段不同, 就得Ctrl+C.Ctrl+V复制一份几乎相同的代码, 这难免让人生厌, 于是希望像泛型集合的扩展方法那样, 可以在使用的时 ...
- 四元数(Quaternions)简介
经常在代码中看到Quaternions,也知道它是用来表达三维空间的旋转的,但一直没有更深的理解.这两天终于花点时间看了看维基百科的介绍,算是多了解了点.做个记录吧! 本质上而言,四元数是一个数学概念 ...
- Excel2016右键新建工作表,打开时提示“因为文件格式或文件扩展名无效。请确定文件未损坏,并且文件扩展名与文件的格式匹配。”的解决办法
上午新建excel工作表时,发现新建完之后居然打不开 提示: 尼玛这坑爹的,难道我的Excel坏了?? 排查问题之后发现 只有新建“Microsoft Excel 工作表”时会出现这种问题,新建“Wo ...
- MJPhotoBrowser BUG修复
崩溃在loading.progress = (float)receivedSize/expectedSize; 分析:MJPhotoView 执行了hide移除了MJPhotoLoadingView, ...
- Windows 环境下配置 git bash 的 HOME 默认路径
0.引 在 windows 下安装 git 之后, git 默认的HOME和~路径一般都是C:\Users\用户名,每次得用命令切换到常用的Repository下,此操作重复而没有意义.为了修改默认路 ...
- 快快快!27个提升效率的iOS开源库推荐
文章来源:http://www.csdn.net/article/2015-07-21/2825264-27-ios-open-source-libraries/1 我热爱开源,更喜爱那些花费宝贵的业 ...
- 新手看Mockplus
如今是一个快节奏的社会,每一天都会有无数的软件发布,每一款软件的制作过程不可避免的需要使用原型设计工具.而Mockplus就是一款原型设计软件,可以用于移动端,PC端以及WEB的原型设计.它也符合如今 ...
- rsync排除文件同步
排除扩展名为log的文件 rsync -ave ssh --exclude '*.log' root@192.168.168.188:/website/abc.com/* /website/abc.c ...
- Android视图状态及重绘流程分析,带你一步步深入了解View(三)
转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/17045157 在前面一篇文章中,我带着大家一起从源码的层面上分析了视图的绘制流程, ...
- 读写SD
public class SD_Files_RW extends Activity implements OnClickListener{ private String Text_of_input; ...