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

时间:2018-01-01 18:59:09

标签: rest api

我一直在努力学习api客户端。 您在www.expamle.com/api上有api,您需要能够通过www.expamle.com/api/users获取所有用户,并通过www.example.com/api/users/ {id获取它们。 id}。

在你的代码中,你需要一个单独的函数来获取所有记录而只需要一条记录吗? 我没有得到的是如何正确地序列化结果,因为当你获得多个记录时,它会返回一个数组,但它不能用于单个记录。

此外,您是否需要更多其他端点的GET函数,例如http://www.example.com/api/products/

1 个答案:

答案 0 :(得分:1)

是的,您通常使用两个方法(C#)实现两个单独的调用:

[Route("users")]
public class UsersController : Controller
{
    // users resource: /api/users/
    [Route("")]
    [HttpGet]
    public IActionResult GetUsers() { ... }

    // single user resource: /api/users/5
    [Route("{id:long}")]
    [HttpGet]
    public IActionResult GetUser(long id) { ... }
}

这样您就可以明确定义两条不同的路线。你会发现处理不同的请求也更容易:代码更少,阅读更简单等。尽管避免代码冗余。

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

[Route("")]
[HttpGet]
public IActionResult GetUsers()
{
    return Ok(
        new List<Users>
        {
            new User(1, ...),
            new User(2, ...),
            new User(3, ...)
        });
}

对于其他资源,e。 G。您的产品资源,使用其他控制器。我个人遵循RESTful指南:WikipediaMicrosoft Docs