精华内容
下载资源
问答
  • API 调用是开发者在小程序开发过程中经常会遇到的问题,本期我们以为调用豆瓣电影 API 为例具体来看 API调用过程以及常见的一些问题。测试用到的小程序是「电影周周看」,内容来自清华大学软件学院刘强副教授在「...

    c3e6cb6c739d08289bc477820baf4974.png

    API 调用是开发者在小程序开发过程中经常会遇到的问题,本期我们以为调用豆瓣电影 API 为例具体来看 API 的调用过程以及常见的一些问题。

    测试用到的小程序是「电影周周看」,内容来自清华大学软件学院刘强副教授在「学堂在线」上的小程序开发系列课程

    805bc2455986f67c52dd9824f03fd626.png

    简单了解豆瓣 API

    为了简化课程讲解,我们将采取直接调用的方式,没有使用 OAuth2 的认证,也没有申请和使用对应的 apikey,所以这种调用会有比较严格的受限。

    28d88ecf0b9887169b0dd717ee0be387.png

    我们会以调用豆瓣电影条目信息 API 为例,这个 API 可以用来获取电影详情信息,具体怎么调用呢?

    先来看下它的

    URI:/v2/movie/subject/:id,

    在这个目录下有一个冒号 id,这是一个 Restful 的 API 设计方式,就是将你要指定的目标电影的 id 直接在 URI 的路径中进行包含,而不是通过 querystring 的方式来指定。

    b6f26c2259570df21465fd400ba3ed15.png

    我们通过浏览器来试一下这个 API 调用的结果。先输入豆瓣 API 的域名,再连接上 API 的路径,最后加上目标电影的 id,这里我们指定的是电影「教父」的 id 值 1291841 。

    c0ac80d93907e3dd0ae2d78092271dc2.png

    通过这样的一个 http request 请求返回的原始数据是一个 json 对象的格式文本,在它的 json 对象的格式中返回来很多对应的字段信息,比如 rating 反映了这部电影的各种评分,wish count 字段反映了有多少人想看这部电影,images 字段给出了三个不同尺寸的电影海报图片 URL,title 字段给出了电影的标题等等。

    8b9b39c8709d88888ac34073d93fa44c.png

    403 Forbidden 问题的干扰

    在前面的逻辑中,每一次 detail 页打开,在它初始化的时候就能够从 options 参数对象中获取到本次要打开要展示的目标电影的 id,接下来就需要调用豆瓣的这个条目信息 API。将这个 id 传过来,然后由这个 API 返回 id 对应的电影详情数据。

    前面我们看到过完整的 URL 是这个样子。

    deba2dd7119039e7687d6752b50bbbe2.png

    目标电影的 id 是直接 通过 URL 路径的一部分来直接进行传递的。所以这个地方的 data 属性我们不用定义,因为没捎带额外的数据,header 属性我们也不定义,method 参数默认用 GET 方法,因此也不指定。

    57262d3a0a25982df5bd14e1ed03dd16.gif

    那这里就指定了一个 success 的回调函数,我们先看一下它接收到的 response 对象会是什么,执行一下调用,返回的却是 403 Forbidden。

    d6ec73737285510bb187e852d3f4be17.png

    从返回的结果看,里面对应的「教父」电影的 id 值是 99 ,前面我们了解到「教父」电影的 id 值是 1291841, 替换正确的 id 后我们再调用一次。

    这个时候我们得到了正确的 URL,它和我们刚才通过浏览器直接访问条目信息 API 时是一样的 URL。

    6f41c1c21f923d57757af944c689ba57.png

    通过浏览器直接访问能正确地获得对应的 json 对象文本,通过小程序 request 的方法调用API 返回的却是 403 Forbidden,这是什么原因?

    这是因为,在今年年初,来自小程序的直接、公开的调用过多,豆瓣 APIserver 就将来自于小程序的直接调用给禁止了。

    大家可能会问,那么豆瓣的 APIserver 怎么样判定对它的调用请求是来自于小程序呢?

    小程序在它的每一个请求中都设置了固定的 Referer 的 header 字段,豆瓣的 APIserver 收到一个请求后,如果它发现这个 Referer header 的取值是小程序框架固定的格式,它就会直接返回一个 403 Forbidden 的 response。

    那我们是否可以在 request 调用的时候通过定义 header 参数来修改对应的 Referer header 的取值?小程序框架它同时也将对 Referer  header 的设置给禁掉了,也就是说我们在 request 调用时,在 header 参数中来设置 Referer 的 header 也是无效的。

    f8cfc5467ea76a5fe84b44375e1ce478.png

    从这一点我们也可以看到,小程序对它的每一个 http 请求打上了自己的一个固定烙印,那么我们要怎么解决这个问题?

    我们可以通过一个中间的服务器来对 Referer 的 header 进行重新设置,具体的,我们可以在小程序和豆瓣 API server 之间设置一个对应的 nginx 转发代理来实现。

    我们在 nginx 转发代理中做一个page,将它接收到的 Referer 的 header 改成一个随便的值。nginx 转发代理收到小程序发送过来的请求后,会将小程序中固定住的 Referer  header 烙印给抹掉,然后再将 request 发送豆瓣 APIserver ,豆瓣 APIserver 会将这个请求当作普通的请求进行处理,这样一来就能正常地返回对应的详情数据。

    4f5b44b8faa622b8e7db0f21b169eeea.png

    因为小程序请求的每一服务器域名必须先进行 ICP 备案,然后才能在后台等级配置使用,在课程讲解的时候我们还来不及对自己的域名进行备案,所以我们就直接使用一个第三方的针对豆瓣  API 的转发代理。

    我们将这个请求从原来的直接发送给都豆瓣 APIsever 改为先发给 nginx 转发代理。

    f9adf2481d30e139bc7f72e40aafe3d2.gif

    运行之后,我们发现这次收到的是一个 400 bad request 的响应。这个问题又如何解决?

    针对这个问题我们必须在请求的时候对 http 请求设置一个特定的 content type 的 header 的取值。

    0f1ecf4e3fea4b6b7aa4044da4b410d7.gif

    当我们将这个取值设置为 json 之后,本次 request 方法调用没有抛出任何错误,而且在 success 回调函数处理时显示的 是一个 200 OK 的 response。

    并且在 data 属性中,我们成功地保存了本次 API 调用返回的目标电影详情数据对应的 json 文本对象转化而来的一个 javascript 对象,而它实际上就是对这个目标电影各个详情数据的一个封装。

    5ce71719481d8eafb035472f73303cd2.png

    在收到返回到目标电影详情数据之后,我们就可以将它保存到页面的一个内部状态数据中。

    我们先通过 onload 方法的 this 指针将这个页面的页面对象的引用做一个保存,将其保存到一个 that 变量中,然后在 success 回调函数处理的时候直接通过 that 变量来获取外部页面对象的引用,接着,再访问其中的 setData 方法。

    5c3e54b0322cc66f2cd55e6649a8830e.png

    调用之后,我们在 APPdata type 中进行查看,最终在 detail 页面中找到了名为 movie 的内部状态变量,这其中就包含了这部电影对应的各种详情数据。

    b54a8c36db462f7f4f9b924676c96c0c.gif

    detail 页的具体展示

    接下来我们就将接收到的详情数据渲染输出到视距图中进行展示。具体的展示办法就是通过新增的内部状态变量 movie 对电影详情对象中的相关属性进行数据绑定来实现。

    我们将接收到的电影详情对象中的 summary 属性、 wish count 属性、collect count 属性等等都通过数据绑定的方式渲染输出到对应的元素上进行显示。

    153e5d83ee76d666b580c524c018487b.gif

    对 images 元素我们也可以将它的高度、宽度做一个设置,做一个简单的样式优化。

    这时,我们再看看页面中的其他的两部电影,点击它们以后返回的是 404 Not Found。这是因为这两部电影的 id 并不是真实的豆瓣 id,因此豆瓣电影的 APIserver 就返回了一个 404 响应。

    实际上这时候我们还是进入了 success 回调函数的处理,我们依然将接收到的 data 属性的取值保存到了内部状态变量 movie 中,所以这个时候 movie 的取值被保存成了这样的一个对象,但它不是一个正常的电影详情数据的对象,在这个对象中找不到我们需要的各种字段数据。

    9557e0c44df3726657f1f1fbd4c5a0c9.png

    因此在一般处理中,我们需要单独做一个判断,只将返回的正常数据保存到内部状态变量中。我们再来判断一下它是不是一个 200 OK 的 response。

    562ca8b074411fb8c5535831c829c090.png

    这个时候我们并没有在 detail 页上来新增这么一个内部状态变量 movie,而只有当这个电影能真正找到,返回的是一个 200 OK 的 response 的时候,对应的 movie 这个内部状态变量才有可能添加。

    我们将其他两部电影的 id 都改为正确的值,之后再点击每一部电影,它对豆瓣 APIserver 的调用都能正常运行。

    以上就是本期关于豆瓣电影 API 调用的全部内容。

    来源:高校微信小程序开发大赛

    • f5556853122012b2046100d03cd199f7.png

    • 76d4a896ab8cdc30814aaf3e114fc661.png

    • 扫码,京东优惠购书中

    • 本 书 介 绍

    • 作者:周文洁

    • 定价:79.80元

    • ISBN:9787302518037

    • 600分钟超长视频讲解!本书是一本从零开始学习的微信小程序开发入门书,无需额外的基础。全书以项目驱动为宗旨,循序渐进、案例丰富,详细介绍了微信小程序的入门基础知识与使用技巧。

    • 全书共分为12章,主要内容包括4个部分。第一部分是入门篇,包括第1章和第2章的内容,这两章介绍了小程序的由来、首次注册和创建项目流程;第二部分是基础篇,包括第3章和第4章的内容,这两章介绍了小程序框架和组件;第三部分是应用篇,包括第5~11章的内容,这7个章节分别讲解了微信小程序中网络API、媒体API、文件API、数据API、位置API、设备API以及界面API的用法;第四部分是提高篇,包括第12章的内容,这一章节提供一个综合应用设计示例——高校新闻小程序的设计与实现,综合应用了全书所学知识,让读者所学即所用。全书包含完整例题应用110个,均在微信web开发者工具和真机中调试通过,并提供全套例题源代码、练习题和视频讲解。

    • 福  利

    • 如果你在京东购买了本书,请将订单和评价截图发到邮箱itbook8@163.com, 可以免费获取额外赠送的大量视频、知识图谱、题库等资源(如下图)。

    • 248d6843344ae731deecedd1c5755f2f.png

    7d9f62ff165d2cc55eec498e1d3d0e5a.png

    展开全文
  • WebApi RESTful接口实例及ajax调用

    千次阅读 2018-09-06 15:49:18
    WebApi接口源码 using System; using System.Collections.Generic; using System.Linq; using System.Net; using System.Net.Http; using System.Web.Http; namespace API { //Void:返回状态码200,无数据 //O.....

    实例图片

    WebApi接口源码

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Net;
    using System.Net.Http;
    using System.Web.Http;
    
    namespace API
    {
        //Void:返回状态码200,无数据
        //Object: 返回状态码200,数据
    
        [RoutePrefix("app/v1")]
        public class RestController : ApiController
        {
            /// <summary>
            /// User Data List
            /// </summary>
            private readonly List<Users> _userList = new List<Users>
           {
               new Users {UserID = 1, UserName = "zzl", UserEmail = "bfyxzls@sina.com"
                , Birthday= Convert.ToDateTime("1991-05-31")},
               new Users {UserID = 2, UserName = "Spiderman", UserEmail = "Spiderman@cnblogs.com"
                , Birthday= Convert.ToDateTime("1991-05-31")},
               new Users {UserID = 3, UserName = "Batman", UserEmail = "Batman@cnblogs.com"
                , Birthday= Convert.ToDateTime("1991-05-31")}
           };
    
            /// <summary>
            /// 得到列表对象
            /// </summary>
            /// <returns></returns>
            [Route("rest")]
            public HttpResponseMessage Get()
            {
                return Request.CreateResponse(HttpStatusCode.OK, _userList);
            }
    
            /// <summary>
            /// 得到一个实体,根据主键
            /// </summary>
            /// <param name="id"></param>
            /// <returns></returns>
            [Route("rest/{id}")]
            public HttpResponseMessage Get(int id)
            {
                var user = _userList.FirstOrDefault(i => i.UserID == id);
                return Request.CreateResponse(HttpStatusCode.OK, user);
            }
    
            /// <summary>
            /// 验证
            /// </summary>
            /// <param name="name"></param>
            /// <returns></returns>
            [HttpGet]
            [Route("rest/exists/{name}")]
            public HttpResponseMessage Exists(string name)
            {
                ApiResultModel result = new ApiResultModel();
                result.return_code = HttpStatusCode.OK;
                result.return_msg = "请求成功";
                result.success = true;
                result.data = (_userList.FirstOrDefault(i => i.UserName == name) != null);
                return Request.CreateResponse(HttpStatusCode.OK, result);
            }
    
            /// <summary>
            /// 添加
            /// </summary>
            /// <param name="form">表单对象,它是唯一的</param>
            /// <returns></returns>
            [Route("rest")]
            public HttpResponseMessage Post([FromBody] Users entity)
            {
                _userList.Add(entity);
                return Request.CreateResponse(HttpStatusCode.OK, entity);
            }
    
            /// <summary>
            /// 更新
            /// </summary>
            /// <param name="id">主键</param>
            /// <param name="form">表单对象,它是唯一的</param>
            /// <returns></returns>
            [Route("rest")]
            public HttpResponseMessage Put(int id, [FromBody]Users entity)
            {
                ApiResultModel result = new ApiResultModel();
                var user = _userList.FirstOrDefault(i => i.UserID == id);
                if (user != null)
                {
                    user.UserName = entity.UserName;
                    user.UserEmail = entity.UserEmail;
    
                    result.success = true;
                    result.return_code = HttpStatusCode.OK;
                    result.return_msg = "请求成功";
                    result.data = user;
                    return Request.CreateResponse(HttpStatusCode.OK, result);
                }
                else
                {
                    result.success = false;
                    result.return_code = HttpStatusCode.BadRequest;
                    result.return_msg = "无效参数";
                    return Request.CreateResponse(HttpStatusCode.BadRequest, result);
                }
            }
    
            /// <summary>
            /// 删除
            /// </summary>
            /// <param name="id">主键</param>
            /// <returns></returns>
            [Route("rest/{id}")]
            public HttpResponseMessage Delete(int id)
            {
                _userList.Remove(_userList.FirstOrDefault(i => i.UserID == id));
                return Request.CreateResponse(HttpStatusCode.OK, _userList);
            }
        }
    
        public class Users
        {
            public int UserID { get; set; }
    
            public string UserName { get; set; }
    
            public string UserEmail { get; set; }
    
            public DateTime Birthday { get; set; }
        }
    
        public class ApiResultModel
        {
            /// <summary>
            /// 是否成功
            /// </summary>
            public bool success { get; set; }
    
            /// <summary>
            /// 状态代码
            /// </summary>
            public HttpStatusCode return_code { get; set; }
    
            /// <summary>
            /// 错误消息
            /// </summary>
            public string return_msg { get; set; }
    
            /// <summary>
            /// 返回的数据
            /// </summary>
            public object data { get; set; }
        }
    
        /// <summary>
        /// 分页集合
        /// </summary>
        public class PagerData
        {
            /// <summary>
            /// 返回记录的总数
            /// </summary>
            public int RecordCount { get; set; }
    
            /// <summary>
            /// 返回分页的总数
            /// </summary>
            public int PageCount { get; set; }
    
            /// <summary>
            /// 列表集合
            /// </summary>
            public object PageData { get; set; }
        }
    }
    

    html+ajax

    <!DOCTYPE html>
    <html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
        <title></title>
        <meta charset="utf-8" />
        <script src="http://apps.bdimg.com/libs/jquery/2.1.4/jquery.min.js"></script>
    </head>
    <body>
    <fieldset>
        <legend>
            测试Web Api - /app/v1/rest/
        </legend>
        <a href="javascript:add()">添加(post)</a>
        <a href="javascript:update(1)">更新(put)</a>
        <a href="javascript:deletes(1)">删除(delete)</a>
        <a href="javascript:get('')">列表(Get)</a>
        <a href="javascript:get(1)">实体(Get)</a>
        <a href="javascript:exists('Batman')">验证(Get)</a>
    </fieldset>
    <script>
    
        //验证
        function exists(name) {
            $.ajax({
                url: "/app/v1/rest/exists/" + name,
                type: "GET",
                data: {},
                success: function (data) {
                    alert(JSON.stringify(data));
                }
            });
        }
    
        //列表
        function get(id) {
            $.ajax({
                url: "/app/v1/rest/" + id,
                type: "GET",
                data: {},
                success: function (data) {
                    alert(JSON.stringify(data));
                }
            });
        }
    
        //添加
        function add() {
            $.ajax({
                url: "/app/v1/rest/",
                type: "POST",
                data: { "UserID": 4, "UserName": "test", "UserEmail": "Parry@cnblogs.com" },
                success: function (data) { alert(JSON.stringify(data)); }
    
            });
        }
    
        //更新
        function update(id) {
            $.ajax({
                url: "/app/v1/rest?id=" + id,
                type: "Put",
                data: { "UserID": 1, "UserName": "moditest", "UserEmail": "Parry@cnblogs.com" },
                success: function (data) { alert(JSON.stringify(data)); }
            });
        }
    
        //删除
        function deletes(id) {
            $.ajax({
                url: "/app/v1/rest/" + id,
                type: "DELETE",
                success: function (data) { alert(JSON.stringify(data)); }
            });
        }
    </script>

     

    展开全文
  • //注意三个参数//key 权限秘钥,可以联系QQ:403861431免费...//这是Java调用接口。没有乱码。//其他语言调用暂时不知道会不会出现。//有乱码也可以联系 QQ:403861431import java.io.ByteArrayOutputStream;impo...

    接口申请官网地址:www.weilaitec.com

    接口地址(例子):
    http://a239p06512.zicp.vip/Web/BuAppJava.bujqrex?apikey="+apikey+"&msg="+msg+"&ip="+ip

    用户端消息内容。
    String msg ="你在干嘛呀?";
            
    apikey参数。这个apikey就是网站上申请的APIKEY
    apikey ="";
                
    //客户端ip,最终用户端的唯一标识(可以是用户端的IP,或者手机设备号,或者微信号或者,qq号码等能证明身份的唯一标识就可以)        
    String ip ="";
                
    //这里一定要encode转换编码。转成GBK。

    msg = URLEncoder.encode(msg, "GBK");


    三个参数全部小写
    msg参数就是传输过去的对话内容。    
    msg参数要编码成gbk,不然会乱码。

     

    package ai.nlp.jiekou.test;

    import java.io.ByteArrayOutputStream;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.UnsupportedEncodingException;
    import java.net.HttpURLConnection;
    import java.net.URL;
    import java.net.URLEncoder;
    import ai.nlp.util.changliang.ChangLiangZi;

     


    public class ApiTest {

        /**
         * Get请求,获得返回数据
         * @param urlStr
         * @return
         */
        private static String opUrl(String urlStr)
        {        
            URL url = null;
            HttpURLConnection conn = null;
            InputStream is = null;
            ByteArrayOutputStream baos = null;
            try
            {
                url = new URL(urlStr);
                conn = (HttpURLConnection) url.openConnection();
                conn.setReadTimeout(5 * 10000);
                conn.setConnectTimeout(5 * 10000);
                conn.setRequestMethod("POST");
                if (conn.getResponseCode() == 200)
                {
                    is = conn.getInputStream();
                    baos = new ByteArrayOutputStream();
                    int len = -1;
                    byte[] buf = new byte[128];

                    while ((len = is.read(buf)) != -1)
                    {
                        baos.write(buf, 0, len);
                    }
                    baos.flush();
                    String result = baos.toString();
                    return result;
                } else
                {
                    throw new Exception("服务器连接错误!");
                }

            } catch (Exception e)
            {
                e.printStackTrace();
            } finally
            {
                try
                {
                    if (is != null)
                        is.close();
                } catch (IOException e)
                {
                    e.printStackTrace();
                }

                try
                {
                    if (baos != null)
                        baos.close();
                } catch (IOException e)
                {
                    e.printStackTrace();
                }
                conn.disconnect();
            }
            return ChangLiangZi.WU;
        }
        
        
        
        
        
        public static void main(String args []){
            
                //三个参数全部小写
                //msg参数就是传输过去的对话内容。    
                //msg参数要编码成gbk,不然会乱码。
                String msg ="你在干嘛呀?";    
                
                //apikey参数。
                String apikey ="UTNJK34THXK010T566ZI39VES50BLRBE8R66H5R3FOAO84J3BV";
                
                //客户端ip,最终用户端的唯一标识(可以是用户端的IP,或者手机设备号,或者微信号或者,qq号码等能证明身份的唯一标识就可以)        
                String ip ="127.0.0.1";
                
                //这里一定要encode转换编码。转成GBK。
                try
                {
                    msg = URLEncoder.encode(msg, "GBK");                
                    
                } catch (UnsupportedEncodingException e)
                {
                    e.printStackTrace();
                }
                
                System.out.println(opUrl("http://a239p06512.zicp.vip/Web/BuAppJava.bujqrex?apikey="+apikey+"&msg="+msg+"&ip="+ip));
        
        }
    }

     

     

     

     

     

    效果图:

     

    展开全文
  • //在项目中右链添加Web引用 //WebService接口里面有四个方法 //TaoBaoke //返回DataSet taobao.taobaoke.items.get:接口 //TaoBaokeObject //返回数组taobao.taobaoke.items.get:接口 //TaoBaokeObjects /...
  • //在项目中右链添加Web引用 //http://webservice.xp81.com/TaoBaoApiTools.asmx //WebService接口里面有四个方法 //TaoBaoke //返回DataSet taobao.taobaoke.items.get:接口 //TaoBaokeObject //返回数组...
  • 本人在使用图灵机器人的过程中,发现很不错,想试了通过api请求来获取回复,这样可以做一个页面聊天还是很不错的。网上搜到的文章好多都是get接口,现在已经不能用了,也不用urlencodeer方法处理info信息了。经过...

    本人在使用图灵机器人的过程中,发现很不错,想试了通过api请求来获取回复,这样可以做一个页面聊天还是很不错的。网上搜到的文章好多都是get接口,现在已经不能用了,也不用urlencodeer方法处理info信息了。经过尝试,终于成功,分享方法代码,供大家参考。

    目前图灵已经取消了非认证免费用户的请求次数。 现在httpclient自带的EntityUtils解析响应效果非常好,例子代码有点老了。

    public static String getReplyFromRobot(String text) throws JSONException, ClientProtocolException, IOException {
    		String url = "http://www.tuling123.com/openapi/api";//设置访问接口地址
    	    CloseableHttpClient httpClient = HttpClients.createDefault();//创建并实例化连接
    	    JSONObject jsonObject = new JSONObject();//创建并实例化jsonobject
    	    jsonObject.put("key", "915b34e69c0371");//输入key
    	    jsonObject.put("info", text);//输入信息
    //	    jsonObject.put("loc", "北京市中关村");//设置地点
    	    jsonObject.put("userid", "915b34e41cb351c0371");//设置用户id
    	    String arguments = changeJsonToArguments(jsonObject);//将json数据转化为参数
    	    HttpPost httpPost = new HttpPost(url+arguments);//请求post接口
    	    HttpResponse response = httpClient.execute(httpPost);//获取响应
    	    InputStream inputStream = response.getEntity().getContent();//创建并实例化字节输入流,使用响应实体作为输入流
    	    InputStreamReader reader = new InputStreamReader(inputStream, "utf-8");//创建并实例化字符输入流,并设置编码格式
    	    StringBuffer buffer = new StringBuffer(" ");//创建并实例化stringbuffer,存放响应信息
    	    char[] buff = new char[512];//创建并实例化字符数组
    	    int length = 0;//声明变量length,表示读取长度
    	    while ((length = reader.read(buff)) != -1) {//循环读取字符输入流
    	       String x = new String(buff, 0, length);//获取读取到的有效内容
    	       System.out.println(x);//输出内容
    	       buffer.append(x);//将读取到的内容添加到stringbuffer中
    	    }
    	    JSONObject dsa = new JSONObject(buffer.toString().trim());//将响应结果转化为jsonobject
    		String message = dsa.getString("text");//获取返回消息
    	    return message;//返回消息
    	}
    

    往期文章精选

    1. java一行代码打印心形
    2. Linux性能监控软件netdata中文汉化版
    3. 接口测试代码覆盖率(jacoco)方案分享
    4. 性能测试框架
    5. 如何在Linux命令行界面愉快进行性能测试
    6. 图解HTTP脑图
    7. 写给所有人的编程思维
    8. 测试之JVM命令脑图
    9. 将json数据格式化输出到控制台
    10. 如何测试概率型业务接口
    11. “双花”BUG的测试分享
    12. 将swagger文档自动变成测试代码

    公众号地图 ☢️ 一起来~FunTester

    转载于:https://my.oschina.net/u/3973795/blog/3093428

    展开全文
  • 以及一些基本的HTTP协议知识,在这些知识的铺垫下,今天,我们一起来讨论一下WEB API的适用场景,然后写我们第一个WEB API接口,并演示如何对其进行简单调用。很多人都很迷惑,既然有了WCF为什么还要有WEB API?WEB ...
  • webApi调用

    2017-07-01 10:22:20
    1.WebApi接口前端调用 webApi后端调用 实例说明 http://blog.csdn.net/shiyaru1314/article/details/51065410
  • ASP.NET WebApi简单实例

    2020-10-18 18:58:52
    关于post请求,这里有个地方需要注意,api接口中,接收参数的地方一定要用模型对象(类)来接收,如果用变量(string Id,string Name),这样写会出问题,而且有很多坑。 还有一点就是创建的WebApi默认用的是...
  • WebApi自定义Filter实例

    2020-10-22 07:32:03
    要实现的功能是在请求头中需要包含token,并且token的值等于123456才算效验通过,可以调用接口,否则提示401(未通过身份认证)。 第一步:自定义一个过滤器,实现接口IAuthorizationFilter public class ...
  • 1、错误:JAVA调用金蝶的物料web api报错:{"Result":{"ResponseStatus":{"ErrorCode":500,"IsSuccess":false,"Errors":[{"FieldName":null,"Message":"未将对象引用设置到对象的实例。 在 Kingdee.BOS.WebApi....
  • 摘要:本文介绍在CakePHP框架的...Android客户端调用httpClient类调用API接口,通过HTTP协议发起请求,服务器端根据请求的业务逻辑,完成MySQL的操作(CRUD),最后将结果通过JSON格式返回给客户端。  [补充图片一张]
  • 在很多业务场景中经常会遇到调用web api接口,并且把参数传递给web api,下面将一起了解一下如何在.net core中调用web api,并且将json字符串传递给post方法 环境和组件 环境:.net core 组件:RestSharp(可以...
  • json接口实例

    2018-12-22 11:14:19
    json接口实例 金蝶云创webapi调用保存操作时用到的
  • 以及一些基本的HTTP协议知识,在这些知识的铺垫下,今天,我们一起来讨论一下WEB API的适用场景,然后写我们第一个WEB API接口,并演示如何对其进行简单调用。 很多人都很迷惑,既然有了WCF为什么还要有WEB API?...
  • 本人在使用图灵机器人的过程中,发现很不错,想试了通过api请求来获取回复,这样可以做一个页面聊天还是很不错的。网上搜到的文章好多都是get接口,现在已经不能用了,也不用urlencodeer方法处理info信息了。经过...
  • 在这里,选用高德Web服务的API,其中的地址/逆地址编码,可以实现经纬度与地址的转换。高德API地址:1.申请key2.坐标转换坐标转换是一类简单的HTTP接口,能够将用户输入的非高德坐标(GPS坐标、mapbar坐标、baidu...
  • C# WEB API

    2017-10-31 23:02:03
    C# WEB API 最近项目上要用到WEB API 接口,参考网上相关文档写了个简单的调用实例。供大家参考,希望对大家有帮助。
  • 我们知道项目中创建的Controller,如ProductController都继承自ApiController抽象类,其又实现了接口IDisposable,所以,框架中自动调用Dispose方法来释放其资源。在代表请求的HttpRequestMessage属性字典中,有个Key...
  • 该库提供了一个流畅的接口,用于构造对FedEx Web服务API的请求。 一般信息 FedEx命名空间下的所有代码都是使用脚本。 每个Web服务都有其自己的类名称空间。 有关这些服务的说明,请参阅正式的FedEx Web服务API文档...
  • staticChatroom.getInstance(options)此接口为单例模式, 对于同一个账号, 永远返回同一份实例, 即只有第一次调用会初始化一个实例后续调用接口会直接返回初始化过的实例, 同时也会调用接口setOptions更新传入的...
  • 最近项目里面需要和C++的客户端互动,其中一个接口就是需要提供文件下载的接口,保证C++项目调用这个接口的时候能够正常下载文件到本地。参考了一下网上的代码,其原理就是读取服务器上指定路径的文件流,并将文件流...
  • SAP SuccessFactors(SF)是SAP收购过来的一款SaaS产品,是一...OData是RESTful架构的API接口,是目前主流推荐的API类型;SFAPI是基于SOAP协议的Web Service类型API,除了CompoundEmployee ,其余都已处于弃用(deprec...
  • 而随着RESTful API的成熟和流行,应用开发方面就需要以模拟http请求的方式来调用RESTful API接口;经过一段时间的IBM的云平台Blumemix的学习及语言翻译服务的应用,积累了Java、ASP.NET、N...文章微wx笑2016-03-2092...
  • java调用hive api

    2016-03-24 10:52:32
    基于hadoop的Hive数据仓库JavaAPI简单调用实例,关于Hive的简介在此不赘述。hive提供了三种用户接口:CLI,JDBC/ODBC和 WebUI CLI,即Shell命令行JDBC/ODBC 是 Hive 的Java,与使用传统数据库JDBC的方式类似Web...
  • 支付宝接口实例one

    千次阅读 多人点赞 2013-08-06 20:44:53
    支付宝api指南 2010-09-19 18:17 8596人阅读 评论(20) 收藏 举报 apiwebserviceauthenticationinput...通过支付宝提供的Webservice接口,可以调用支付宝(https://www.alipay.com)提供的服务,这些服务在中有详

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 429
精华内容 171
关键字:

web调用api接口实例