C# API交互设计

C# API交互设计,c#,design-patterns,architecture,C#,Design Patterns,Architecture,我目前正在设计一个系统的组件(用c#)来与api交互。api调用的格式如下: http:// <name of api site>\< JSP page name>?<parameter set> http://\? 调用返回一个包含调用结果或错误消息的xml文档。我最终希望组件返回以下类型的对象: public readonly class APIResult<T> { public bool Success {get; set

我目前正在设计一个系统的组件(用c#)来与api交互。api调用的格式如下:

http:// <name of api site>\< JSP page name>?<parameter set>
http://\
调用返回一个包含调用结果或错误消息的xml文档。我最终希望组件返回以下类型的对象:

 public readonly class APIResult<T>
 {
     public bool Success {get; set;}
     public T Details {get; set;}
 }
public只读类apireult
{
公共bool成功{get;set;}
公共T详细信息{get;set;}
}
我目前的计划是让一个类创建URL,然后将其传递给另一个泛型类(类型为T)以使用URL调用API,该URL将询问响应,该响应将返回一个新的APIResult,其中的详细信息将从反序列化的Xml结果中添加

我有两个问题要问SO的专家

1) 有人能看出这种方法有什么问题吗?有人能提出更好的方法来实现我的意图吗

2) 有没有一种优雅的方法来创建URL,而不是简单地使用string.format和传递到函数中的参数

非常感谢,

番茄酱有三个建议:

  • 避免使用Success属性。该属性将强制您在每次访问API时检查它。您将在任何地方都有这样的代码:

    如果(结果、成功) { //做点什么 } 其他的 { //还有这里……什么!? }

    在OOP中,异常比错误代码/标志更可取

  • 使用属性(装饰)自动反序列化API响应(无代码)

  • 使用UriBuilder来。。。那么,构建uri:


  • 我会使
    apireult
    不可变。@CodesInChaos刚刚说的+1。看看哪个是Asp.NETWebAPI的一部分。如果您也在打包.Net 4.5,那么您可以使用
    wait
    使异步检索数据变得非常简单。谢谢你们两位的建议,我已将其设置为只读。感谢您的等待建议,我本来计划使用HttpClient,但不知道“等待”将有助于构建url(或在url之间共享公共信息)。