如何正确调用 Web API

How to properly make a call to a Web API

在 ASP .NET 网站中,他们有 an example 如何从 .NET 客户端调用 Web API。

他们有这种方法来调用创建新产品:

static async Task<Uri> CreateProductAsync(Product product)
{
    HttpResponseMessage response = await client.PostAsJsonAsync("api/products", product);
    response.EnsureSuccessStatusCode();

    // Return the URI of the created resource.
    return response.Headers.Location;
}

这就像在任何语言或框架中调用任何 API 的常用方法,但我发现这一行有很多问题:

HttpResponseMessage response = await client.PostAsJsonAsync("api/products", product);

如果"path"参数是一个字符串,编译时没有办法检测到可能的错误。此外,如果 API 发生变化并且我们有很多调用,则无法快速重建调用。

有没有更好的方法来构建调用来避免此类问题?我的意思是,例如,就像我们对 Web 服务所做的那样。

就像 Nkosi 提到的那样,它就是这样设计的。但是,您可以使用 API URI 创建一个 class 并使用它们而不是文字

public class ApiUris
{
    public const string Products = "api/products";
    public const string Services = "api/services";
    public const string Orders = "api/orders";
    /* ... */
}

这样,如果您的 webapi 发生变化,您可以轻松更改路径。

只需扩展 Adam 的解决方案,您就可以使用

获取路线列表
System.Web.Routing.RouteTable.Routes.ToList();

那么获取路径就看RouteBase抽象的具体实现了class.

如果服务器更改参数的 URL 或类型 and/or 结构,即使 Web 服务和 WCF 服务也不能保证构建失败。只有当您调用该服务并且它中断时,您才会知道这些更改。

在调用 Web APIs 的情况下,您肯定无法确定 URL 或参数不正确,直到您调用 API.

同时,Web API 不是为了经常更改而构建的。如果它们不可靠,就没有人会使用它们。因此,如果您使用的是 API,您可以确定他们不会更改 URL 或在一夜之间停止支持某些输入参数,从而使他们的消费者应用程序像您的应用程序一样崩溃。他们肯定不想被客户起诉。

任何 API 都会逐渐更改并提前通知他们的客户,以便他们有时间更改其实施以支持 API 的新版本。 因此,您可以依赖您正在使用的服务并将与其相关的值(例如 URLs)放入配置文件中就足够了。或者您可以选择将 API 网址放入数据库,这样当它发生变化时,您只需更新数据库中的条目,更改将立即生效。