在RESTAPI客户端中,是否需要为每个端点使用多个GET方法?

在RESTAPI客户端中,是否需要为每个端点使用多个GET方法?,rest,api,Rest,Api,我一直在努力学习一些关于api客户端的知识。 您在www.expamle.com/api上有一个api,您需要能够在www.expamle.com/api/users上获取所有用户,还需要在www.example.com/api/users/{id}上通过id获取他们 在您的代码中,您是否需要有一个单独的函数来获取所有记录而只获取一条记录? 我不明白的是如何正确地序列化结果,因为当您获得多个记录时,它会返回一个数组,但它不能处理单个记录 另外,是否需要为其他端点(如提供更多GET函数是的,您通常

我一直在努力学习一些关于api客户端的知识。 您在www.expamle.com/api上有一个api,您需要能够在www.expamle.com/api/users上获取所有用户,还需要在www.example.com/api/users/{id}上通过id获取他们

在您的代码中,您是否需要有一个单独的函数来获取所有记录而只获取一条记录? 我不明白的是如何正确地序列化结果,因为当您获得多个记录时,它会返回一个数组,但它不能处理单个记录


另外,是否需要为其他端点(如

提供更多GET函数是的,您通常使用以下两种方法(C#)实现两个单独的调用:

通过这种方式,您可以显式定义两个不同的路由。您会发现处理不同的请求也更容易:代码更少,阅读更简单,等等。不过要避免代码冗余

序列化取决于您需要什么。有多种选择。这些天我个人坚持使用JSON。作为一个人,我可以轻松地读取数据,但是与SOAP或任何自定义XML相比,包的大小相当小。处理JSON很简单,特别是在ASP.NET内核中。您只需返回一个
IEnumerable
,框架就会处理所有其他问题:

[Route("")]
[HttpGet]
public IActionResult GetUsers()
{
    return Ok(
        new List<Users>
        {
            new User(1, ...),
            new User(2, ...),
            new User(3, ...)
        });
}
[路线(“”)]
[HttpGet]
public IActionResult GetUsers()
{
返回Ok(
新名单
{
新用户(1,…),
新用户(2,…),
新用户(3,…)
});
}

其他资源,例如:。G您的产品资源,请使用其他控制器。我个人遵循RESTful指南:而且。

这取决于您的代码在做什么,我们不能告诉您。也许你只需要这份清单。也许你只需要个人资源。也许你需要同时或在不同的时间。所以你的问题是什么?这与c完全无关,所以我去掉了这个标签。但是,如果您使用ASP.NET,则需要为每个端点/URL执行
操作
。一些教程中提供的简单客户端通常有一个函数来获取特定资源,如www.example.com/api/users/{id}但是,如果同一个函数可以或应该包含对该url上所有记录的请求,请不要提供任何示例。@QualityCatalyst这个问题完全与语言无关。OP可以使用ASP.NET或PHP,问题也一样。语言标签用于特定语言的问题,OP不想提及它们是什么using@QualityCatalyst然后,您需要猜测他是否在使用Web服务、WCF、ASP.NETWebAPI、ASP.NETCore或其他什么。猜猜不是我们的工作,我明白了。我在asp.net内核中使用json,对于我来说,有2个函数在理论上可以在1中完成,这看起来有点多余。例如,当我试图从get请求中获取元素数组时,我可以执行类似于
JsonConvert.DeserializeObject(jsonString)的操作但当get请求返回单个元素时失败。如果api将单个记录包装在[]中,它似乎可以工作,或者不可以。@Spongie:有没有机会解释一下你所说的“我觉得它有点多余”的意思?这里没有多余的东西。在API消费者方面,您有两个用例:(1)您需要所有用户;(2)您只需要一个。你得到的是非此即彼。关于反序列化:这里也没有多余的东西
JsonConvert.DeserializeObject(jsonString)
转换列表,
JsonConvert.DeserializeObject(jsonString)
单个元素。没有多余的。或者我遗漏了什么?我的意思是,如果API本身已将其用户体响应包装在[]中,那么如果您试图获取单个记录或所有记录,它是否允许反序列化工作?如果没有什么意义,就忽略它吧。问我的问题的更好方法是:如果我想创建一个REST客户机,用户可以对任何他想要的url发出GET请求,那么客户机如何知道要使用哪个GET函数,在简单的/users/和/users/{id}@Spongie情况下。我知道你是从哪里来的。“如果API本身已将其用户体响应包装为[]”,对于单个用户,它将不再是RESTful;-)<代码>[]
表示它是一个列表,而不是单个资源。如果您将
[]
放在单个响应周围,消费者如何理解它只是一个资源而不计算?当您只希望返回一个用户时,将其放入列表称为开销。关于你的“更好的提问方式”:我建议你阅读更多关于RESTful方法的内容。您似乎对它的用途和用例有点困惑。我的答案中提供了示例链接。
[Route("")]
[HttpGet]
public IActionResult GetUsers()
{
    return Ok(
        new List<Users>
        {
            new User(1, ...),
            new User(2, ...),
            new User(3, ...)
        });
}