文档章节

phoenix 开发API系列(二)phoenix 各类 api 实现方式

linuxr
 linuxr
发布于 2017/01/29 16:37
字数 1038
阅读 35
收藏 0

概述

上一篇已经提到如何安装以及利用 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/

© 著作权归作者所有

linuxr
粉丝 3
博文 12
码字总数 12658
作品 0
南京
后端工程师
私信 提问
Cloudera Labs中的Phoenix

Fayson发表于Hadoop实操订阅 607 温馨提示:要看高清无码套图,请使用手机打开并单击图片放大查看。 1.导读 Cloudera Labs在2016-06-27宣布打包了Apache Phoenix项目,版本为4.7.0,并基于C...

hblt-j
01/15
24
0
phoenixframe 自动化平台 1.5.0 全新发布

一、前言 之前一直想对phoenix_webdriver,phoenix_mobile的代码进行重构,不少朋友反馈平台的API不够直观,尤其是webUI和mobile app相关的API有些乱。我自己也有这种感觉,尤其在后续的功能...

孟飞阳
2016/07/17
1K
11
phoenixframework自动化测试平台1.5.0全新发布

一、前言 之前一直想对phoenixwebdriver,phoenixmobile的代码进行重构,不少朋友反馈平台的API不够直观,尤其是webUI和mobile app相关的API有些乱。我自己也有这种感觉,尤其在后续的功能扩...

孟飞阳
2016/07/17
438
2
CDH + phoenix+ zeppelin

内容概述 1.安装及配置Phoenix 2.Phoenix的基本操作 3.使用Phoenix bulkload数据到HBase 4.使用Phoenix从HBase中导出数据到HDFS 测试环境 1.CDH5.11.2 2.RedHat7.2 3.Phoenix4.7.0 前置条件 ...

hblt-j
02/28
75
1
PhoenixFramework自动化测试平台部署初始化说明

PhoenixFramework自动化测试平台部署初始化说明 孟飞阳 2015.6.30 平台官网:http://www.cewan.la, 模块说明 1、 phoenix_web.war:平台的控制端,管理平台的数据和各个node节点 2、 phoeni...

孟飞阳
2015/06/13
227
0

没有更多内容

加载失败,请刷新页面

加载更多

mysql概览

学习知识,首先要有一个总体的认识。以下为mysql概览 1-架构图 2-Detail csdn |简书 | 头条 | SegmentFault 思否 | 掘金 | 开源中国 |

程序员深夜写bug
33分钟前
2
0
golang微服务框架go-micro 入门笔记2.2 micro工具之微应用利器micro web

micro web micro 功能非常强大,本文将详细阐述micro web 命令行的功能 阅读本文前你可能需要进行如下知识储备 golang分布式微服务框架go-micro 入门笔记1:搭建go-micro环境, golang微服务框架...

非正式解决方案
今天
1
0
前端——使用base64编码在页面嵌入图片

因为页面中插入一个图片都要写明图片的路径——相对路径或者绝对路径。而除了具体的网站图片的图片地址,如果是在自己电脑文件夹里的图片,当我们的HTML文件在别人电脑上打开的时候图片则由于...

被毒打的程序猿
今天
2
0
Flutter 系列之Dart语言概述

Dart语言与其他语言究竟有什么不同呢?在已有的编程语言经验的基础上,我们该如何快速上手呢?本篇文章从编程语言中最重要的组成部分,也就是基础语法与类型变量出发,一起来学习Dart吧 一、...

過愙
今天
2
0
rime设置为默认简体

转载 https://github.com/ModerRAS/ModerRAS.github.io/blob/master/_posts/2018-11-07-rime%E8%AE%BE%E7%BD%AE%E4%B8%BA%E9%BB%98%E8%AE%A4%E7%AE%80%E4%BD%93.md 写在开始 我的Arch Linux上......

zhenruyan
今天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部