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之创建离线数据包>中通过调用接口成功的创建一个离线数 ...
随机推荐
- xlrd读取多个excel电子表数据
import sys import xlrd import traceback def ReadData(FileName): try: workBook = xlrd.open_workbook(F ...
- Windows10
一.快速开机设置 我的电脑配置如图,装有VS2015 2010 OFFICE等常用开发工具,在线升级后开机速度并没有明显提升. 1.保证windows font cache service服务启动,3 ...
- My安卓知识6--关于把项目从androidstudio工程转成eclipse工程并导成jar包
是这样,我在我的android项目中想实现zxing也就是二维码的一些功能,但是需要的一个源码工程是androidstudio工程,想把这个工程转成eclipse工程并导成jar包在我的项目中使用. ...
- 解决yum报错集
yum -y install gcc gcc-c++ makeError: Multilib version problems found. This often means that the ro ...
- php 使用 极光推送 类
<?php /** * 安卓和苹果消息主推 */ class JPush extends CComponent { private $_push_body = array(); private ...
- c#制作计算器全过程
前言: 网上看的计算器制作只有代码,没有为全过程下面贴图,所以我在下面主要是贴图,让大家零基础制作计算器. 我的环境是visual studio 2010,其他版本例如2008,2012 都可以 1. ...
- C++回顾map的用法
map<T, T>是C++的STL中存储key-value键值对数据结构的最基础的模板类,相对于multimap可以重复的key值,map的key是非重复的. C++的reference这 ...
- 动态加载js文件
由于最近在弄echarts,关于地图类的效果,但是全国地图整体的js文件太大了,加载很耗费资源,所以要根据不同省份加载不同地区的js地图, 于是就想的比较简单, var script = docume ...
- rbx1 package 下载安装过程
学习INSTALLING THE ROS-BY-EXAMPLE CODE,是书中第五章的内容,如果我们按照上一篇教程执行过了,就可以直接进入第五章,安装一个叫rbx1的包.这个包里面包括了本书中用到的 ...
- [转]LibreOffice-SDK 开发实战:嵌入MFC-View 和 C# Winform
转自:http://www.aqcoder.com/blog/detail/id/1579bb39-9bcd-4c0f-9b02-67a851148196/ 前面片文章中我简要介绍了下 LibreOf ...