2017-07-14 68 views
0

我目前正在努力爲我們的API編寫一個非常好的SDK。我現在正在尋找幾種方法之一。什麼是C#SDK CRUD操作的正確返回類型?

  • 我可以從我的API調用中返回HttpResponseMessage(如下所示)。
  • 我可以做一些數據處理,並只傳回對象。
  • 我可以創建一個自定義對象來包裝SDK返回,以便它可以包含它需要的東西。
  • 當遇到服務器錯誤時,我可以拋出異常,但是如果應用程序可以從異常中恢復,這可能會很昂貴。
  • 我也可以在getter中返回一個元組,這樣我就可以同時獲得一個對象和HttpResponseMessage。

我希望SDK能夠對數據進行恰當的處理,我不確定是否有一個如何在.NET中編寫好的SDK的例子。我實際上會自己使用這個SDK,所以我希望它很好。我寫了一些代碼,我會在這裏包括這些代碼,但是我認爲目前的迭代是有缺陷的。

public interface IBaseApi<T> 
{ 
    Task<IEnumerable<T>> GetAllAsync(); 

    Task<T> GetByIdAsync(int id); 

    Task<HttpResponseMessage> InsertAsync(T obj); 

    Task<HttpResponseMessage> UpdateAsync(T obj); 

    Task<HttpResponseMessage> DeleteAsync(int id); 
} 

現在我們返回一個空對象來表示Get請求失敗。但我認爲這是一個有缺陷的概念。

我也看過Facebook,Square和其他一些Sdks。沒有什麼比我更重要的了。

那麼我的API應該發送什麼樣的返回類型?只是一個指針,我不知道客戶端將如何使用這個。它可能是更大的查詢的一部分,或直接傳遞給它們的控制器。我的總體目標是消費者可以儘可能少地處理自己,但如果出現錯誤信息,這也是有意義的。

回答

1

我在過去所做的那樣,並已真的很好是創建一個包含有關該響應的元數據以及來自呼叫產生的實際數據,東西線沿線的一個「API響應」對象:

public class ApiResponse<TData> 
{   
    /// <summary> 
    /// Constructor for success. 
    /// </summary> 
    /// <param name="data"></param> 
    public ApiResponse(TData data) 
    { 
     Data = data; 
     Success = true; 
     Errors = new List<string>(); 
    } 

    /// <summary> 
    /// Constructor for failure. 
    /// </summary> 
    /// <param name="ex"></param> 
    public ApiResponse(IEnumerable<string> errors) 
    { 
     Errors = errors; 
     Success = false; 
    } 

    /// <summary> 
    /// Gets whether the API call was successful. 
    /// </summary> 
    public bool Success { get; private set; } 

    /// <summary> 
    /// Gets any errors encountered if the call was not successful. 
    /// </summary> 
    public IEnumerable<string> Errors { get; private set; }   

    /// <summary> 
    /// Gets the data resulting from the API call. 
    /// </summary> 
    public TData Data { get; private set; } 
} 

你可以有一個基類,它不會返回任何數據,然後從中派生出這個數據。