• WebApiClient的JsonPatch局部更新

    发布:51Code 时间: 2018-08-14 09:13

  • 1. 文章目的 随着WebApiClient的不断完善,越来越多开发者选择WebApiClient替换原生的HttpClient,本文将介绍使用WebApiClient来完成JsonPatch提交的新特性。 2. json patch介绍 在服务端WebApi开发的时...

  • 1. 文章目的

    随着WebApiClient的不断完善,越来越多开发者选择WebApiClient替换原生的HttpClient,本文将介绍使用WebApiClient来完成JsonPatch提交的新特性。

    2. json patch介绍

    在服务端WebApi开发的时候,如果设计一个更新登录用户的个人信息的接口,用户能更新昵称、密码、生日、性别等N多个字段,但用户在实际使用中,可能是更新其中的一个或不确定多个字段。开发者往往会为难:对于客户端没有更新到的字段,应该设置为什么值呢?一种是让客户端从服务器同步后再更新相关字段,一种是不更新的字段设置为null,服务器收到null的字段不更新,但这个还是有歧义(要更新为null的情况)。

    json patch是为客户端能够局部更新服务端已存在的资源而设计的一种标准交互,在RFC6902里有详细的介绍json patch,通俗来讲有以下几个要点:

    使用HTTP PATCH请求方法;

    请求body为描述多个opration的数据json内容;

    请求的Content-Type为application/json-patch+json;

    以下为一个json patch请求的数据包:

    PATCH /my/data HTTP/1.1

    Host: example.org

    Content-Length: 326

    Content-Type: application/json-patch+json

    If-Match: "abc123"

    [

        { "op": "test", "path": "/a/b/c", "value": "foo" },

        { "op": "remove", "path": "/a/b/c" },

        { "op": "add", "path": "/a/b/c", "value": [ "foo", "bar" ] },

        { "op": "replace", "path": "/a/b/c", "value": 42 },

        { "op": "move", "from": "/a/b/c", "path": "/a/b/d" },

        { "op": "copy", "from": "/a/b/d", "path": "/a/b/e" }

    ]

    op为操作的意思,分为以下几种:

    add 添加:{“op”: "add", "path": "/xxx", "value": "xxx"},如果该属性不存,那么就添加该属性,如果属性存在,就改变属性的值。

    remove 删除:{“op”: "remove", "path": "/xxx"},删除某个属性,或把它设为默认值(例如空值)。

    replace 替换:{“op”: "replace", "path": "/xxx", "value": "xxx"},改变属性的值,也可以理解为先执行了删除,然后进行添加。

    copy 复制:{“op”: "copy", "from": "/xxx", "path": "/yyy"},把某个属性的值赋给目标属性。

    remove 移动:{“op”: "move", "from": "/xxx", "path": "/yyy"},把源属性的值赋值给目标属性,并把源属性删除或设成默认值。

    test测试:{“op”: "test", "path": "/xxx", "value": "xxx"},测试目标属性的值和指定的值是一样的。

    4. Asp.net mvc接收JsonPatch

    在Asp.net mvc,可以使用JsonPatchDocument类型来处理json patch内容,JsonPatchDocument可以将操作行为应用到目标实例里,得到操作之后的数据内容。

    [HttpPatch]

    public UserInfo Patch([FromBody] JsonPatchDocument<UserInfo> doc)

    {

        var user = new UserInfo

        {

            Account = "_Account",

            Password = "_Password",

            Email = "_Email"

        };

     

        doc.ApplyTo(user);

        return user;

    }

    5. WebApiClient提交JsonPatch

    在WebApiClient也提供一个JsonPatchDocument类型,该类型实现了IApiParameterable接口,在http请求之后,会执行BeforeRequestAsync方法,完成组装body的多个opration的数据json内容,使用方法如下:

    public interface IPatchApi : IHttpApi

    {

        [HttpPatch("http://localhost:7171/api/userinfo")]

        Task<string> PatchAsync(JsonPatchDocument<UserInfo> doc);

    }

    var doc = new JsonPatchDocument<UserInfo>();

    doc.Replace(item => item.Account, "laojiu");

    doc.Replace(item => item.Email, "laojiu@qq.com");

    var client = HttpApiClient.Create<IPatchApi>();

    await client.PatchAsync(doc);

    6. 结束语

    博主为WebApiClient库的作者,本文向读者介绍了JsonPatch的基本知识,以及如何在WebApiClient提交JsonPatch,欢迎大家给WebApiClient提建议。

    原文链接:https://www.cnblogs.com/kewei/p/9431349.html
    上文内容不用于商业目的,如涉及知识产权问题,请权利人联系博为峰小编(021-64471599-8103),我们将立即处理。

  • 上一篇:解决 .net core 中 nuget 包版本冲突问题

    下一篇:WebApiClient的接口输入验证

网站导航
Copyright(C)51Code软件开发网 2003-2018 , 沪ICP备16012939号-1