api 請求 fail_.NET 使用 JSend 設計 API 響應
阿新 • • 發佈:2021-02-17
技術標籤:api 請求 fail
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 將它們歸類為以下型別,並指定了必需鍵和可選鍵:
JSend 的 .NET 版本
該版本是 JSend
使用方法
- 從 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 !