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之创建离线数据包>中通过调用接口成功的创建一个离线数 ...
随机推荐
- MySQL命令实例
显示数据表结构 1.desc(describe) tablename;2.show columns from tablename;3.use information_schema; select ...
- Python Windows环境下安装Python集成开发环境 学习之路(一)
一.安装下载安装 Python https://www.python.org/ 全部下一步,直接Finish PyCharm http://www.jetbrains.com/pycharm/ 全部 ...
- C#发送邮件
以下代码已用 .yeah .qq 以及本人公司邮箱测试通过,可多发,可挂附件 本次测试邮件发送类,是用的winform 页面如下 窗口的后台代码如下: using System; using Syst ...
- odoo 10 生产自动领料
分析源码 当 原材料的 补货规则 的 "补货位置" location_id 是 生产单 的 原材料 "目标位置 ", 并且 原材料的 补货规则 的 " ...
- [转]Snappy压缩库安装和使用之一
Snappy压缩库安装和使用之一 原文地址:http://blog.csdn.net/luo6620378xu/article/details/8521223 近日需要在毕业设计中引入一个压缩库,要求 ...
- [16]APUE:套接字
[a] socket / socketpair #include <sys/socket.h> int socket(int domain, int type, int protocol) ...
- freeCodeCamp:Slasher Flick
返回一个数组被截断n个元素后还剩余的元素,截断从索引0开始. /*思路 利用splice截断数组arr,返回运算后的数组arr; 如果howMany大于或等于数组长度,则返回空数组: */ funct ...
- 第一个c++程序
#include <iostream> using namespace std; int main(int argc, const char * argv[]) { //cin接收键盘输入 ...
- loop 循环和检测点 9.3
loop 指令为循环指令,所有的循环指令都是短转移,在对应的机器码中包含转移的位移,而不是目的地址.对 IP 的修改范围都为:-128~127. 指令格式:loop 标号 操作: (cx)=(cx)- ...
- Mvc分页扩展类 分页代码 带跳转
public static class HtmlPager { public static MvcHtmlString MvcPager(this HtmlHelper html, string cu ...