当前位置: 首页 > 后端技术 > PHP

PHP研究院-VSCode扩展之旅-RESTClient

时间:2023-03-29 23:28:33 PHP

基本介绍RESTClient是VSCodestore的一个HTTP访问扩展。官方地址是RESTClient,用于模拟HTTP请求。官方介绍中我们可以重点关注两点1基本的HTTP请求模拟,HTTP输入和HTTP响应2VSCode自带的辅助功能,比如自动完成HttpContent-Type等信息RESTClient的优势RESTClient是一个HTTP请求模拟插件,有人会说我用PostMan也能实现同样的功能,没错。但在我看来,RESTClient的优势有以下几点:1.结合VSCode,方便开发者进行接口单元测试。2根据手写的HTTP报文进行请求。消息具有严格的格式。作者可以对HTTP协议和报文有深入的了解。如何设置请求头,如何组织不同Content-Type的请求参数,都会涉及到。3在前后端分离成为开发团队主流标准配置的情况下,开发人员可以对后端接口进行单元测试,QA人员可以进行单独验收。对于这些日常操作,RESTClient是一个高效可靠的工具。HTTP报文内容格式以下是VSCode中常用的两种请求方式的HTTP报文内容RESTClientapplication/jsonrequestGETGEThttps://example.com/topics/1HTTP/1.1POSTPOSThttps://example.com/commentsHTTP/1.1content-type:application/json{"name":"sample","time":"Wed,21Oct201518:27:50GMT"}application/x-www-form-urlencodedrequestGETGEThttps://example.com/comments?page=2&pageSize=10POSTPOSThttps://api.example.com/loginHTTP/1.1Content-Type:application/x-www-form-urlencodedname=foo&password=bar如图所示下图在显示中可以看到请求者的请求和服务器的返回。蓝色框内是跨域相关的设置。发送嵌套的json请求Content-Type:application/json{"type":1,"data":{"vcc_code":"","server_num":"0102000558","cus_phone":"100","cus_phone_areacode":“”,“cus_phone_areaname”:“”,“cus_phone_type”:“TEL”,“ag_name”:“20”,“ag_num”:“30”,“ag_phone”:“8001”,“endResult_code”:“12”,"user_data":[]}}HTTPLanguage添加HTTP请求的语言支持,具有特性在VisualStudioCode中编写HTTP请求时,会提供语法高亮、自动完成、代码镜头和注释支持等功能。默认情况下,两种情况会自动激活语言关联:扩展名为.http或.rest的文件第一行遵循RFC2616中的标准请求行,采用MethodSPRequest-URISPHTTP-Version格式以上是中的描述github文档,大致两层意思1.Http报文的文件后缀可以是.http或者.rest。这样VSCode就可以识别出这是消息文件,自动提示,彩色显示,非常漂亮在项目中,可以将消息以http文件的形式归档,作为项目的一部分。2消息的格式严格按照RFC2616,主要是一行一个元素。这里说一下ContentType,做一个简单的基础内容回顾multipart/form-data:当需要在表单中上传文件时,使用application/json这种格式:application/json,作为响应头的Content-Type肯定很熟悉给大家。其实现在越来越多的人使用application/json作为请求头,告诉服务器消息体是一个序列化的JSON字符串application/x-www-form-urlencoded:默认的contencType,当formform请求的时候是get,将数据编码成key/value格式(name1=value1&name2=value2...),然后把这个字符串追加到url后面,用?分割,加载新的url发送给服务器(表单格式的默认提交数据)。post请求时,浏览器将表单数据封装到httpbody中,然后发送给服务器。(表单的enctype属性就是编码方式,常用的有两种:application/x-www-form-urlencoded和multipart/form-data,默认是application/x-www-form-urlencoded。FAQ1ContentType不对应simple也就是说,ContentType的作用是约定请求方和接收方对HTTP报文的处理位置,请求方关心传递参数,服务器关心接收参数,如果ContentType不一致,就是传递和接收参数的位置不对应,客户端传递的值是正确的,但是服务端无法接收到值。现在大家都提倡使用application/json,但是少数项目或者开发者还是坚持使用Content-Type:application/x-www-form-urlencoded2消息格式不准确,记得一行一组元素看header的格式Posthttp://dev.com/api/v1/c/历史/列表HTTP/1。1Content-Type:application/jsonapp-key:562986529time-stamp:1553581026034token:9f3f7cd61ca7a4d24954c1bfc3e6ead7token虽然是字符串,但是没有引号。key、冒号、空格消息的写法,有助于深入理解Http消息的原理。在开发案例中,我们以PHP语言为例。编程中请求接口使用的组件主要有Curl、Zend、Guzzle。.curl请求使用curl请求,需要注意x-www-form-urlencoded下的参数传递问题。phpcurl转x-www-form-urlencoded的方法基本上就是写加下面这句:curl_setopt($curl,CURLOPT_HTTPHEADER,array('Content-Type:application/x-www-form-urlencoded'));但是加了之后,一点作用都没有。如果要发送为x-www-form-urlencoded,最关键的其实是发送数据的格式。发送Content-typefrom-data时,数据以数组形式发送,而Content-type为x-www-form-urlencoded时,需要以key=value&key=value的格式发送,数据发送的是字符串类型。from-data数据为:$data=['name'=>'xiaoming','sex'=>1];x-www-form-urlencoded的数据将变为$params_string=http_build_query($params);否则$params_json=json_encode($params);guzzle组件中content-type组件的官方文档请到这里Guzzle,howtosendaPHPHTTPclientx-www-form-urlencodedrequestapplication/x-www-form-urlencodedPOSTrequest.jsonrequestGuzzleaccessinstanceinitializationfailed我们再来看一个异常如果我们的地址拼写错误导致远程接口无法解析会怎样?/***发布请求**@returnvoid*/protectedfunctionpost(){try{$this->request=$this->client->post($this->uri,['form_params'=>$this->参数],$this->选项);}catch(\GuzzleHttp\Exception\RequestException$e){var_dump($error);死();Yii::警告($e);}}2019-07-1309:39:06[127.0.0.1][-][-][警告][应用]GuzzleHttp\Exception\ConnectException:cURL错误6:无法解析:xx.cn(联系时超时DNS服务器)(参见http//curl.haxx。se/libcurl/c/libcurl-errors.html)in/Users/name/sources/vendor/guzzlehttp/guzzle/src/Handler/CurlFactory.php:185Stacktrace:Summary本文从VSCode下的扩展RESTClient开始,通过基本概念、优势和应用场景的介绍,结合在HTTP请求中使用Content-Type的注意事项,梳理了常见的接口调用问题,以及访问接口中常用的三个组件Curl、Zend、Guzzle,被介绍。RESTClient更多的使用场景和功能扩展,可以参考官方文档,寻找更多有趣好用的功能。RestClient文章已同步到公众号《图南日晟》欢迎关注