《RESTful Web APIs》书中有一段POST API示例,现实中我们如何测试这个示例?书中没有说,Let's try it!
《RESTful Web APIs》书中有一段POST API示例:
I then send the filled-out template as part of an HTTP POST request:
POST /api/ HTTP/1.1
Host: www.youtypeitwepostit.com
Content-Type: application/vnd.collection+json
{ "template":
{
"data": [
{"prompt": "Text of the message", "name": "text", "value": "Squid!"}
]
}
}
(Note that my request’s Content-Type is application/vnd.collection+json . This
filled-out template is a valid Collection+JSON document all on its own.)
The server responds:
HTTP/1.1 201 Created
Location: http://www.youtypeitwepostit.com/api/47210977342911065
作者Leonard Richardson and Mike Amundsen只说他们send了一个POST HTTP REQUEST,但我们不知道如何send?使用何种工具send?
step1. 我尝试使用“在线HTTP GET/POST模拟请求测试工具”,以失败告终;
step2. 在gdg的群里,偶然发现有朋友使用curl发送post请求至webapi,遂下载curl for windows,仿照他的命令测试,如下所示:
curl -X POST -H "Content-Type:application/vnd.collection+json" -d ‘{ "template" : { "data": [ { "prompt": "Text of the message", "name": "text", "value": "Nathan" } ] } }’ http://www.youtypeitwepostit.com/api/
命令执行后返回:
curl: (6) Could not resolve host: template
curl: (7) Failed connect to :80; No error
curl: (3) [globbing] unmatched brace in column 1
curl: (6) Could not resolve host: data
curl: (3) [globbing] bad range specification in column 2
curl: (3) [globbing] unmatched brace in column 1
curl: (6) Could not resolve host: prompt
curl: (6) Could not resolve host: Text of the message,
curl: (6) Could not resolve host: name
curl: (6) Could not resolve host: text,
curl: (6) Could not resolve host: value
curl: (6) Could not resolve host: Nathan
curl: (3) [globbing] unmatched close brace/bracket in column 1
curl: (3) [globbing] unmatched close brace/bracket in column 1
curl: (3) [globbing] unmatched close brace/bracket in column 1
curl: (3) [globbing] unmatched close brace/bracket in column 1
{"collection":{"version":"1.0","href":"http://www.youtypeitwepostit.com/api/","error":{"title":"Server Error","code":500}}}
命令返回结果与作者在书里写的不一样,这是为什么呢?
经过一番周折,我在这位仁兄的博客里找到了答案:http://blog.csdn.net/lipei1220/article/details/8536520
step3. 成功模拟作者的发送命令,成功测试人生中第一个POST WEB API,cool! 感谢gdg友人的分享讨论。
curl -X POST -H Content-Type:application/vnd.collection+json -d "{ \"template\" : { \"data\": [ { \"prompt\": \"Text of the message\", \"name\": \"text\", \"value\": \"Nathan\" } ] } }" http://www.youtypeitwepostit.com/api/
如果你也在阅读《RESTful Web APIs》,如果你也想try it yourself on your windows platform,just download curl for windows and try it!
===
2016年4月8日追加:
1. 如果希望看到上述命令返回的结果,需要打开curl命令的-i开关,如下所示:
curl -i -X POST -H Content-Type:application/vnd.collection+json -d "{ \"template\" : { \"data\": [ { \"prompt\": \"Text of the message\", \"name\": \"text\", \"value\": \"Nathan\" } ] } }" http://www.youtypeitwepostit.com/api/
执行命令后返回结果为:
HTTP/1.1 201 Created
Server: Cowboy
Connection: keep-alive
Location: http://www.youtypeitwepostit.com/api/9239483117125928
Date: Fri, 08 Apr 2016 07:33:17 GMT
Transfer-Encoding: chunked
Via: 1.1 vegur
2. 如果希望看到一次http通信的整个过程,包括端口连接和http request头信息,则需要打开curl命令的-v开关,如下所示:
curl -v -X POST -H Content-Type:application/vnd.collection+json -d "{ \"template\" : { \"data\": [ { \"prompt\": \"Text of the message\", \"name\": \"text\", \"value\": \"Nathan\" } ] } }" http://www.youtypeitwepostit.com/api/
执行命令后返回结果为:
* Adding handle: conn: 0x2225f90
* Adding handle: send: 0
* Adding handle: recv: 0
* Curl_addHandleToPipeline: length: 1
* - Conn 0 (0x2225f90) send_pipe: 1, recv_pipe: 0
* About to connect() to www.youtypeitwepostit.com port 80 (#0)
* Trying 107.21.92.176...
* Connected to www.youtypeitwepostit.com (107.21.92.176) port 80 (#0)
> POST /api/ HTTP/1.1
> User-Agent: curl/7.33.0
> Host: www.youtypeitwepostit.com
> Accept: */*
> Content-Type:application/vnd.collection+json
> Content-Length: 104
>
* upload completely sent off: 104 out of 104 bytes
< HTTP/1.1 201 Created
* Server Cowboy is not blacklisted
< Server: Cowboy
< Connection: keep-alive
< Location: http://www.youtypeitwepostit.com/api/20962976710870862
< Date: Fri, 08 Apr 2016 07:38:36 GMT
< Transfer-Encoding: chunked
< Via: 1.1 vegur
<
* Connection #0 to host www.youtypeitwepostit.com left intact
《RESTful Web APIs》书中有一段POST API示例,现实中我们如何测试这个示例?书中没有说,Let's try it!的更多相关文章
- 《RESTful Web APIs中文版》
<RESTful Web APIs中文版> 基本信息 原书名:RESTful Web APIs 原出版社: O'Reilly Media 作者: Leonard Richardson ...
- 前端Web APIS
day01 - Web APIs 学习目标: 能够通过ID来获取元素能够通过标签名来获取元素能够通过class来获取元素能够通过选择器来获取元素能够获取body和html元素能够给元素注册事件能够修改 ...
- 使用JAX-RS创建RESTful Web Service
guice resteasy http://www.cnblogs.com/ydxblog/p/7891224.html http://blog.csdn.net/withiter/article/d ...
- 用Jersey为Android客户端开发Restful Web Service
平时在做Android客户端的时候经常要与服务器之间通信,客户端通过服务端提供的接口获取数据,然后再展示在客户端的界面上,作为Android开发者,我们平时更多的是关注客户端的开发,而对服务端开发的关 ...
- 《RESTful Web Services》第二章 识别资源
引言:开放RESTful Web服务的首要步骤之一是设计资源模型. 2.1 如何从领域名词中识别资源 2.2 如何选择资源粒度 一些因素会影响数据库表和对象模型的设计,例如领域建模.需要高 ...
- 我所理解的RESTful Web API [Web标准篇]
REST不是一个标准,而是一种软件应用架构风格.基于SOAP的Web服务采用RPC架构,如果说RPC是一种面向操作的架构风格,而REST则是一种面向资源的架构风格.REST是目前业界更为推崇的构建新一 ...
- 我所理解的RESTful Web API [设计篇]
<我所理解的RESTful Web API [Web标准篇]>Web服务已经成为了异质系统之间的互联与集成的主要手段,在过去一段不短的时间里,Web服务几乎清一水地采用SOAP来构建.构建 ...
- 使用 Spring 3 来创建 RESTful Web Services
来源于:https://www.ibm.com/developerworks/cn/web/wa-spring3webserv/ 在 Java™ 中,您可以使用以下几种方法来创建 RESTful We ...
- 使用 Spring 3 来创建 RESTful Web Services(转)
使用 Spring 3 来创建 RESTful Web Services 在 Java™ 中,您可以使用以下几种方法来创建 RESTful Web Service:使用 JSR 311(311)及其参 ...
随机推荐
- 解决git add README.md 时报错 fatal: pathspec 'README.md' did not match any files
解决办法一: 直接在远程仓库创建然后在本地$ git pull origin master 解决办法二: 换成$ touch README.md在本地创建修改后再commit push上去
- Python字符串类型格式化之format方法
python字符串格式化一般使用 format() 方法,用法如下: <模板字符串>.format(<逗号分割的参数>) 其中模板字符串中可以由一个或多个 {} 组成的 槽 , ...
- selenium模拟登录豆瓣和qq空间
selenium模拟登录豆瓣和qq空间今天又重新学习了下selenium,模拟登录豆瓣,发现设置等待时间真的是很重要的一步,不然一直报错:selenium.common.exceptions.NoSu ...
- 09.redis 哨兵主备切换时数据丢失的解决方案
一.两种数据丢失的情况 1. 异步复制导致的数据丢失 因为master->slave的复制是异步的,所以可能有部分数据还没复制到slave,master就宕机了,此时这些部分数据就丢失了 2 ...
- android开发之动画的详解 整理资料 Android开发程序小冰整理
/** * 作者:David Zheng on 2015/11/7 15:38 * * 网站:http://www.93sec.cc * * 微博:http://weibo.com/mcxiaob ...
- android MVVM(2)用数据绑定关联VM 与 V
1.官方文档 https://developer.android.com/topic/libraries/data-binding/architecture 2.简介 数据绑定库 可与MVVM 架构组 ...
- 实现:git本地创建多个分支互不干扰
git本地创建多个分支互不干扰 在项目开发过程中,经常会遇到下面这种情况: 业务情景:在做某个需求a时,先需要修改紧急bug b:发版时发的是远程dev的代码 方式一(推荐): (1)本地已有分支de ...
- TonWeb6.1Linux安装文档
东方通部署文档 东方通安装部署文档 准备文件:开始安装:警告:在安装之前先安装JDK,JDK要求JDK5以上Linux安装:运行安装包sh Install_TW6.1.5.15_Standard_ ...
- css实现导航栏下划线跟随效果
话不多说先附上代码 <style> ul li { float: left; display: block; list-style: none; margin-left: 20px; bo ...
- Mybatis-多对一和一对多
多对一和一对多 目录 多对一和一对多 1. 复杂表的构建 2. 测试环境搭建 1. 导入Lombok 2. 新建实体类 3. 建立Mapper接口 4. 建立Mapper.xml文件 5. 在核心配置 ...