《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)及其参 ...
随机推荐
- 经典DP动规 0-1背包问题 二维与一维
先上代码 b站讲解视频 灯神讲背包 #include <iostream> #include <cstring> #include <algorithm> usin ...
- source insight4提示结尾不一致。关闭
source insight4提示结尾不一致.关闭.世界清静了. Options -> Preferences ->Files 最后的Ask to fix inconsistent li ...
- 第四方 fast快捷支付封装
class Fastpay { protected $conf = [ 'appkey'=>'',//appkey 'key'=>'',//秘钥 ]; protected $http_ty ...
- webstorm编写vue、react 将大驼峰组件命名转换成短横杠命名
大家好!我是木瓜太香,精通 webstorm 与常见前端技术的工程师,偶尔也在b站搞一些 webstorm 技巧教学,今天给大家带来的是大驼峰小驼峰快速转换短横杠命名或者下划线命名的方式. 开发中我们 ...
- C002:计算球体体积(半径固化)
程序: #include "stdafx.h" int _tmain(int argc, _TCHAR* argv[]) { float sphereRadius=10.0f; f ...
- 通过股票K线图来谈谈真正的技术和现实的技术
开局一张图 这是一张股票日线图,上面记载这近期每个交易日该股的开盘价,收盘价,最高价,最低价. 有兴趣的人可以估算下数据量和表的设计,似乎有点工作量.可这还只是一部分,你还可以获得每日分时数据,成交量 ...
- 【NOIP2014模拟】高级打字机
题目描述 早苗入手了最新的高级打字机.最新款自然有着与以往不同的功能,那就是它具备撤销功能,厉害吧. 请为这种高级打字机设计一个程序,支持如下3种操作: T x:在文章末尾打下一个小写字母x.(typ ...
- IDEA中配置Tomcat中的Artifact
IDEA中配置Tomcat中的Artifact 我在配置Tomcat时,要设置deployment中的Artifact时,却总是无法显示出当前项目的war包,针对这个问题,如下图展示, 当我点击Art ...
- 架构设计 | 基于Seata中间件,微服务模式下事务管理
源码地址:GitHub·点这里 || GitEE·点这里 一.Seata简介 1.Seata组件 Seata是一款开源的分布式事务解决方案,致力于提供高性能和简单易用的分布式事务服务.Seata将为用 ...
- xss的变形--如何绕过xss过滤
我们可以通过构造xss代码进行各种变形,以绕过xss过滤器的检测 1.大小写检测 将payload进行大小写转化 如<Img SRC='#' Onerror="alert(/xss/ ...