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](https://img-blog.csdnimg.cn/img_convert/d770942212e8d0e99708b871b4522587.png)
JSend 的 .NET 版本
该版本是 JSend 在 .NET 平台的实现。
.NET Version of JSendgithub.com使用方法
- 从 NuGet 安装 JSend:
dotnet add package JSend
2. 创建 JSend 实例:
为了易于理解,我们提供了三个基础方法来创建实例:
- JSend.Success
- JSend.Fail
- JSend.Error
例如,创建 Success(JSuccess)实例:
JSend.Success(); // No data
JSend.Success("OK"); // string data
JSend.Success(new { ... }); // object data
Fail(JFail)实例:
JSend.Fail(); // No data
JSend.Fail("Oops"); // string data
JSend.Fail(new { ... }); // object data
Error(JError)实例:
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 派生类的其中一种,JSuccess、JFail 或 JError:
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 !