如何使用 AspNetCore MVC 构建 RESTful API 并进行单元测试

在前端开发中,RESTful API 是一个非常重要的概念。在实现 Web 应用程序的同时,还需要构建 API,以便其他开发人员可以使用它们来获取应用程序的数据。使用 AspNetCore MVC,您可以创建非常容易使用的 RESTful API。在本文中,我们将通过一些示例代码和深度学习的内容来解释如何使用 AspNetCore MVC 构建 RESTful API 并进行单元测试。

什么是 RESTful API?

RESTful API 是一种使用 HTTP 请求来访问和操作 Web 资源的架构风格。它是一种轻量级的通信方式,可以在不同的客户端和服务器之间共享数据。RESTful API 通常返回 JSON 或 XML 格式的数据,以方便客户端获取和解析。

RESTful API 有几个基本属性:

  • 使用 HTTP 请求进行操作。
  • 操作通过 HTTP 方法实现:GET、POST、PUT、DELETE、PATCH 等。
  • 操作针对资源。每个资源都有一个唯一的 URI,并对应于一个状态。
  • 不保留应用程序状态。API 的每个请求都是独立的。

使用 AspNetCore MVC 构建 RESTful API

AspNetCore MVC 是一个用于构建 Web 应用程序和 Web API 的框架。通过 MVC 的模式,我们可以将代码分离为模型、视图和控制器。在构建 RESTful API 时,我们可以使用控制器和路由器来处理 HTTP 请求,并返回 JSON 格式的数据。

创建控制器和路由器

要创建 RESTful API,需要创建一个控制器并添加路由器。假设我们要创建一个“用户管理”API,我们需要一个用户控制器:

----- ---------------------------
----- -------------------------

---------------------------
---------------
------ ----- --------------- - --------------
-
    ------- -------- --------------- ----------------

    ------ ------------------------------- ---------------
    -
        --------------- - ---------------
    -

    ---------
    ------ ------------------------------- -----
    -
        ------ -----------------------------
    -

    -----------------
    ------ ------------------ ------- ---
    -
        --- ---- - ------------------------
        -- ----- -- -----
            ------ -----------
        ------ ---------
    -

    ----------
    ------ ------------ --------------- ---- -----
    -
        --------------------------
        ------ ---------------------------- --- - -- - ------- -- ------
    -

    -----------------
    ------ ------------ ------- --- ---------- ---- -----
    -
        -- --- -- --------
            ------ -------------
        -----------------------------
        ------ ------------
    -

    --------------------
    ------ ------------ ---------- ---
    -
        --- ---- - ------------------------
        -- ----- -- -----
            ------ -----------
        -----------------------------
        ------ ------------
    -
-

在控制器中,我们定义了五个操作:

  1. Get:获取所有用户。
  2. Get/{id}:获取指定 ID 的用户。
  3. Post:添加新用户。
  4. Put/{id}:更新用户。
  5. Delete/{id}:删除用户。

我们使用 HTTP 方法 Get、Post、Put 和 Delete 来执行相应操作。对于每个操作,我们返回一个匿名类型对象。我们还为控制器添加了一个特性“ApiController”,这意味着该控制器只用于 Web API。

然后,我们需要在 ConfigureServices 方法中配置路由器:

------ ---- ------------------------------------ ---------
-
    ----------------------------------------------------------------------------
    ----------------------------------- ------------------
-

我们使用 AddMvc 来配置 MVC 框架,并为控制器添加了一个客户端资源注入(DI)。我们使用 IUserRepository 接口和 UserRepository 作为示例数据源。

测试 RESTful API

我们可以使用 Postman 或其他 HTTP 客户端工具来测试 RESTful API,也可以使用单元测试来确保其正确性。

我们需要定义一个单元测试,以验证控制器返回预期结果。在测试前,我们需要使用 NuGet 作为测试文件添加 Microsoft.AspNetCore.Mvc.Testing 包,然后定义测试类和实现 Get 操作的单元测试:

----- -----------
----- ---------------------------
----- ------------
----- -----------------------
----- ---------------------------------
----- ----------------
----- ------

------ ----- ------------------------------- - ---------------------------------------------
-
    ------- -------- ---------- ------------

    ------ -------------------------------------------------------------- --------
    -
        ----------- - ------------------------------
    -

    ------
    ------ ----- ---- -------------------------------------------
    -   
        --- -------- - ----- -----------------------------------
        -----------------------------------
        --- -------------- - ----- -------------------------------------
        --- ----- - ----------------------------------------------------------
        -------------------------
    -
-

我们定义了名为 UsersControllerIntegrationTests 的测试类,它是 WebApplicationFactory 的实例。我们使用 HttpClient 来执行 GET 请求,然后验证响应是否正确而且是否返回了一些结果。

我们可以创建其他测试方法来覆盖控制器中的每个操作。

结论

在本文中,我们详细介绍了如何使用 AspNetCore MVC 构建 RESTful API 并进行单元测试。我们了解了 RESTful API 的基本概念,并创建了一个用户管理控制器,并使用了五个常用的操作。我们还定义了一个单元测试,以确保控制器按预期工作。在此基础上,我们可以构建更复杂的 API,以满足我们的应用程序需求。

来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/670cc3635f551281025b967d