• API访问客户端


    API访问客户端(WebApiClient适用于MVC/WebForms/WinForm)

    这几天没更新主要是因为没有一款合适的后端框架来支持我们的Web API项目Demo, 所以耽误了几天, 目前最新的代码已经通过Sqlite + NHibernate + Autofac满足了我们基本的Demo需求.

     

    按照既定的要求,我们的API会提供给众多的客户端使用, 这些客户端可以是各种Web站点, APP, 或者是WinForm, WPF, Silverlight等诸如此类的应用,将来还有可能是各种Iot等物联网设备的应用,Restful API凭借其诸多优势,已经在移动互联网的时代火了一把,在接下来物联网的时代会发展的更好。

     

    下图是一个简单的示意图,我们本章的ApiClient将提供一套固定的模式,辅助客户端来访问我们前面几章建立的API.

     

    image

     

     

    基本的HTTP传输

     

    我们在实际的项目中是定义了一个ApiClient的静态类库,其通过HttpClient 再配合 Microsoft.AspNet.WebApi.Client类库,专门根据我们前面写的API做了更进一步的封装.

     

     

    APIClient

     

    我们先来看一下他提供的方法签名

     

    image

     

     

    Get/Post

     

    顾名思义,这两个用来完成常见的HttpGet/HttpPost, 只是Post的方法中多了一个Object 的postData参数,这个就是用来发送我们要Post到API端的数据.

     

     

    Execute

     

    是Get,Post使用的基础方法, Get/Post的操作都是通过他完成的操作.

     

    参数说明:

     

    apiUrl: api的host地址

     

    methodName: api的方法路径

     

    query: 查询条件的组合, 通常对应URL中queryString部分, 也就是URL中问号后面的部分

     

    method: 要使用的httpMethod, 这里支持 Get,Post,Put,Delete四种,

     

    postData: post/put时,要传到api端的数据, 通常已一个object, 发送之前会通过Json.Net序列化为json.

     

    useEndpointPrefix: 这个是指我们API的url 通常都有一个约定,就是在url的host部分后面加上api/作为开始,所以这是说url是否使用默认的这个习惯, 比如 http://xxx.com/api/xxxx

     

     

    UploadFiles/DownloadFile

     

    这两个从名字也可以和容易的看出来,我们如何通过我们的api上传跟下载文件,这个常用的场景有 通过app更新头像,或者从api端导出某个文件.

     

     

    下面示例URL说明了我们上面参数中所对应的URL的部分

     

    image

     

     

     

    Query对象介绍

     

    上面除了Query对象之外,其他的都容易理解, 在没有Query对象的时候,我们要拼出 URL的参数部分,我们通常会需要string来拼接,更好一点的办法是定义一个Dictionary来做自动连接, 这里我们为了更方便,

     

    我们定义了一个Query对象,说到这里大家应该明白Query对象就是为了帮我们自动处理url的参数部分, 其核心基类是CoreQuery。

     

    这里我们看几个内置的Query

     

    LoginQuery

     

    其提供了我们Login接口必要的参数, 在使用的时候我们可以直接new 一个loginQuery, 传入api调用的方法.

     

    image

     

     

    SessionQuery

     

    这个是我们需要授权的APi需要传入sessionKey参数,通常我们的BaseController里面会设计一个SessionQuery, 当发起 Api Request请求的时候,都会附上这个SessionQuery, 他会自动在API的url中附加sessionKey=xxx的参数

     

    复制代码
    public class SessionQuery : CoreQuery
        {
            [Query(Name = "sessionKey")]
            public string SessionKey { get; set; }
    
            public SessionQuery()
            {
    
            }
    
            public SessionQuery(SessionQuery query)
            {
                this.SessionKey = query.SessionKey;
            }
        }
    复制代码

     

     

    ListQuery:

     

    可以从下面参数看到是用来处理分页的请求的.

     

    image

     

     

    CoreQuery.ParmsObj属性

     

    除了常规的参数需要通过自定义单独的Query对象之外,对于一些很简单的APi, 如果我们需要对每个API接口都创建一个Query那岂不是很麻烦?

     

    针对这个问题,我们想出了通过匿名对象来解决这个问题, CoreQuery下面有一个ParmsObj属性, 在使用的时候可以通过

     

    image

     

    这种方式来动态的添加url参数,这样会大大减少我们定义的Query类的数量.

     

     

    来张WebApiClient的类库全图

     

    image

     

    这个WebApiClient可以很好的在Mvc, Winform等.NET项目中使用, 帮助你的客户端应用快速接入你开发的API.

     

     

    本章代码: https://code.csdn.net/ODotNet/odn-webapiclient/tree/master

     

    同时已发布到 Nuget, 大家可以通过 Install-Package Odn.WebApiClient 来添加到项目中引用

     

    PM> Install-Package Odn.WebApiClient

     

     

    在今天移动互联网的时代,作为攻城师的我们,谁不想着只写一套API就可以让我们的Web, Android APP, IOS APP, iPad APP, Hybired APP, H5 Web共用共同的逻辑呢? 【WEB API项目实战干货系列】教你一步步教你解决方案.

  • 相关阅读:
    关于C语言中类型的理解,有符号无符号的理解以及浮点数的理解
    关于集中注意力,情绪管理,记忆的总结整体
    关于链表逆置的问题
    git中reset和checkout的总结整理
    git中关于分支和stash的理解
    SVN和git的区别
    shell命令之find的用法
    (转载)获取服务器响应时间
    (转载)Spring定时任务的几种实现
    (转载)spring单例和多例详解。如何在单例中调用多例对象
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/4908088.html
Copyright © 2020-2023  润新知