• 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项目实战干货系列】教你一步步教你解决方案.

  • 相关阅读:
    IIS的各种身份验证详细测试
    HTTP Error 401.3 Unauthorized Error While creating IIS 7.0 web site on Windows 7
    C/S and B/S
    WCF ContractFilter mismatch at the EndpointDispatcher exception
    Configure WCF
    Inheritance VS Composition
    Unhandled Error in Silverlight Application, code 2103 when changing the namespace
    Java RMI VS TCP Socket
    Principles Of Object Oriented Design
    Socket处理发送和接收数据包,一个小实例:
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/4908088.html
Copyright © 2020-2023  润新知