1. 程式人生 > 其它 >api 請求 fail_.NET 使用 JSend 設計 API 響應

api 請求 fail_.NET 使用 JSend 設計 API 響應

技術標籤: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 將它們歸類為以下型別,並指定了必需鍵和可選鍵:

ebd513591f9658fa6ee4c57ffc397c72.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 !