.net core webapi 列表返回指定的字段_.NET 使用 JSend 设计 API 响应

JSend

JSend 是基于 JSON 格式简单干净的应用层通信标准。

文档引用:https://github.com/omniti-labs/jsend

为什么使用 JSend?

现在有很多 Web 服务都提供 JSON 数据,但他们各有自己特殊的响应格式。

那么,开发人员使用 JavaScript 编写前端,就需要不断地重新设计数据交互的轮子。

普遍场景

前端应用通常会对响应做三种不同的处理:请求成功验证错误程序异常

  • 请求成功:提示成功处理请求(跳转或刷新等);
  • 验证错误:提示用户哪些数据未验证通过(显示提示列表等);
  • 程序异常:报错提示。

如何工作?

基础 JSend 响应:

{
    status : "success",
    data : {
        "post" : { "id" : 1, "title" : "A blog post", "body" : "Some useful content" }
     }
}

编写 JSON API 时,我们会有几种不同的请求响应。JSend 将它们归类为以下类型,并指定了必需键和可选键:

d770942212e8d0e99708b871b4522587.png

JSend 的 .NET 版本

该版本是 JSend.NET 平台的实现。

.NET Version of JSend​github.com

使用方法

  1. NuGet 安装 JSend
dotnet add package JSend

2. 创建 JSend 实例:

为了易于理解,我们提供了三个基础方法来创建实例:

  • JSend.Success
  • JSend.Fail
  • JSend.Error

例如,创建 SuccessJSuccess)实例:

JSend.Success();                // No data
JSend.Success("OK");            // string data
JSend.Success(new { ... });     // object data

FailJFail)实例:

JSend.Fail();                   // No data
JSend.Fail("Oops");             // string data
JSend.Fail(new { ... });        // object data

ErrorJError)实例:

JSend.Error("Crashed"));                        // No data
JSend.Error("Crashed", "#0"));                  // string data
JSend.Error("Crashed", "#0", new { ... }));     // object data

3. 返回通用类型 JSend:

通常我们不需要直接使用 JSend 类型,而是从其派生类转换到 JSend

例如,设计一个 Web API 需要返回 JSend 派生类的其中一种,JSuccessJFailJError

public JSend PostNumber(int number)
{
    try
    {
        if (number > 0) return JSend.Success();
        else return JSend.Fail(new { number = "The number must be greater than 0." });
    }
    catch { return JSend.Error("Crashed."); }
}

4. 前端处理响应:

axios
    .post('.../PostNumber?number=1')
    .then(response => {
        var jsend = response.data;
        if (jsend.status == 'success') { ... }
        else if (jsend.status == 'fail') { ... }
        else { ... }
    });

如果使用 TypeScript,建议使用如下声明增强类型检查:

/* Generated by TypeSharp v1.3.3.0 */

declare namespace Ajax {
    interface JSend {
        status?: string;
        data?: any;
    }
    interface JSuccess<TData> {
        status?: string;
        data?: TData;
    }
    interface JFail<TData> {
        status?: string;
        data?: TData;
    }
    interface JError<TData> {
        status?: string;
        code?: string;
        message?: string;
        data?: TData;
    }
}

这段代码是通过 TypeSharp 生成的。

如果您还使用 TypeSharp 生成了其他代码,使用相同声明会减轻移植工作量。

代码查看:TypeSharpTests.cs

Best wishes for you !

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值