我目前正努力为我们的API编写一个非常好的SDK。我正在考虑现在就采取一些方法。
我希望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);
}
现在我们返回一个null对象来指示Get request失败。但我认为这是一个有缺陷的概念。
我还看过Facebook,Square和其他一些Sdks。对我来说没有什么比这更好的了。
那么我的API应该发送哪种返回类型?只是一个指针,我不知道客户端将如何使用它。它可能是更大查询的一部分或直接传递给他们的Controller。我的总体目标是,消费者只需要很少的处理就能完成自己的工作,但如果出现问题则消息也是有意义的。
答案 0 :(得分:1)
我过去所做的并且效果很好的是创建一个&#34; Api响应&#34;包含有关响应的元数据以及调用产生的实际数据的对象,类似于:
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; }
}
您可以拥有一个不返回任何数据的基类,然后从中派生出来。