最常问的 Web API 面试题

2025年3月17日 | 阅读 15 分钟

以下是经常被问到的 Web API 面试题及其最佳答案。

1) 什么是 Web API? / 你如何理解 Web API?

在 Web API 中,API 是 Application Programming Interface(应用程序编程接口)的缩写。它是一个框架,可以帮助用户开发或构建 HTTP 服务,这些服务可以被各种客户端使用,包括浏览器和移动设备。例如,ASP.NET Web API 帮助我们在 .NET 框架上构建这些服务。


2) 为什么使用 Web API? / 为什么首选使用 Web API? / 使用 Web API 的原因是什么?

我们有许多与 Web API 类似的技术,但有几个真实的原因可以解释为什么使用 Web API。

例如

  • Web API 提供了创建非 SOAP 基础的 HTTP 服务的能力。
  • 我们可以轻松地使用 HTTP 动词(verbs)来进行创建、读取、更新和删除(CRUD)操作。
  • 它非常轻量级,其轻量级的架构使其成为智能手机等带宽有限设备的理想选择。
  • 它基于 HTTP,并且可以以 RESTful 的方式轻松定义、暴露和使用。
  • 它提供了以 JSON 或 XML 格式选择响应输出的能力,并支持开放数据 (OData) 协议。

3) 是否可以使用 WCF 来使用 RESTful 服务? / 为什么首选使用 Web API 而不是 RESTful 服务?

是的,可以使用 WCF 来使用 RESTful 服务。我们可以轻松地使用 WCF 开发 RESTful 服务,但有两个主要原因使得用户选择 Web API 而不是 RESTful 服务。

  • Web API 增强了 RESTful 服务开发中的 TDD(测试驱动开发)方法。
  • 如果我们想在 WCF 中开发 RESTful 服务,你肯定需要大量的配置设置、URI 模板、契约(contracts)和终结点(endpoints)。

4) ASP.NET Web API 是否取代了 WCF?

不,ASP.NET Web API 并没有取代 WCF。ASP.NET Web API 是构建非 SOAP 基础服务的另一种方式,即纯 XML 或 JSON 字符串。

Web API 由于只使用 HTTP 而非常轻量。它无法与 WCF 的强大功能和灵活性相媲美。如果你只需要使用 HTTP 作为传输协议,Web API 是完美的。但如果你想使用不同的协议,如 TCP 或命名管道(Named Pipes),你就需要使用 WCF。


5) Web API 和 WCF 的主要区别是什么?

WCF 是 Windows Communication Foundation 的缩写。它用于服务导向的应用程序开发,支持各种传输协议,如 HTTP、TCP、MSMQ。WCF 客户端必须能够理解 XML。另一方面,Web API 专门为 HTTP 服务设计,由于其低带宽特性,它支持非 SOAP 服务和大多数 MVC 功能。


6) 使用 Web API 的主要优点是什么?

以下是使用 Web API 的主要优点:

  • 内容协商
  • 自托管(Self-Hosting)
  • OData
  • 过滤器
  • 路由
  • 模型绑定(Model Bindings)

7) Web API 和 MVC 有什么区别?

以下是 Web API 和 MVC(Model View Controller)之间的主要区别:

MVCWeb API
MVC 是一个应用程序设计模型,用于创建具有前端、控件和后端处理的 Web 应用程序。Web API 用于创建与各种客户端交互的 HTTP 服务。
我们可以使用 MVC 来创建带有用户界面的 Web 应用程序。我们使用 Web API 来开发 HTTP 服务。
在 MVC 设计模式中,Web 应用程序会返回一个视图(view)以及数据。Web API 只返回数据。
MVC 只能将请求映射到操作方法(action methods)。使用 Web API,我们可以使用 HTTP 动词将所有请求映射到操作。
MVC 只能返回 JSON 格式的数据。Web API 可以返回 JSON、XML 等格式的数据。

8) 哪个 .NET 框架支持 Web API?

.NET Framework 4.0 及以上版本支持 Web API。


9) Web API 支持的主要返回类型有哪些?

以下是 Web API 控制器操作的主要返回类型:

  • Void: 用于返回空内容。
  • HttpResponseMessage: 用于将响应转换为 HTTP 消息。
  • IHttpActionResult: 用于内部调用 ExecuteAsync 来创建 HttpResponseMessage。
  • 其他类型: 它帮助我们将序列化的返回值写入响应正文。

10) Web API 支持的用于 JSON 序列化的开源库是什么?

Web API 使用 JSON.NET 库进行 JSON 序列化。


11) "其他返回类型" 在 Web API 中最大的缺点是什么?

在 Web API 中,“其他返回类型”的最大缺点是它不能直接返回错误代码,例如 404 错误。


12) 你如何理解 Web API 路由?

Web API 路由是一种模式匹配,与 MVC 中的模式匹配非常相似。所有路由都注册在路由表中。

例如


13) 是否可以在非 .NET 语言创建的应用程序中使用 ASP.NET Web API?

是的,我们可以在使用 .NET 以外的语言创建的应用程序中轻松使用 ASP.NET Web API,但这些应用程序必须能够访问/支持 HTTP 协议。


14) 你如何理解 SOAP?

SOAP 的完整形式是 Simple Object Access Protocol(简单对象访问协议)。它是一种在 Web 服务交互中用于交换数据的 XML 消息格式。它使用户能够通过 HTTP 或 JMS 发送消息。它也是一种基于 XML 的消息协议,用于在计算机之间交换信息。

换句话说,我们可以说 SOAP 是一种消息协议,用于在分布式和去中心化的环境中交换数据。


15) 如何将 Web API 与 ASP.NET Web Form 一起使用?

我们可以通过执行以下三个简单步骤将 Web API 与 ASP.NET Web Form 一起使用:

  • 首先,创建一个 Web API 控制器。
  • 然后,将路由表添加到 Global.asax 文件(通常位于 Application_Start 方法中)。
  • 现在,我们可以调用 jQuery AJAX 来调用 Web API 方法并获取数据。

16) 如何限制或限定对 Web API 的访问,仅允许特定的 HTTP 动词?

我们可以通过属性编程(attribute programming)轻松地限制或限定对使用特定 HTTP 方法调用的 ASP.NET Web API 方法的访问。


17) 你如何理解 RESTful 服务?

REST 的完整形式是 **Representational State Transfer(表述性状态转移)**。Roy Fielding 在 2000 年创造了这个词。RESTful 是一种用于在 HTTP 上创建松耦合应用程序的架构风格。为了使 API 成为 RESTful,我们必须遵循以下六个约束:

  • 客户端-服务器分离:在 RESTful 服务中,客户端和服务器是独立的。
  • 无状态:REST 架构基于 HTTP 协议,客户端可以缓存服务器响应,但服务器上不会存储任何客户端上下文。
  • 统一接口:它用于通过 HTTP 动词(例如 GET、PUT、POST、DELETE 等)定义的有限集的操作。
  • 可缓存:RESTful 架构允许响应被缓存或不被缓存。缓存可以提高性能和可伸缩性。
  • 按需代码(Code-On-Demand)
  • 分层系统

18) 你如何理解异常过滤器?

异常过滤器用于在控制器方法中发生未处理的异常并抛出时执行。异常可能由多种原因引起。异常过滤器实现了 "IExceptionFilter" 接口。


19) 你如何理解 Web API 中的 TestApi?

TestApi 是 Web API 的一个实用库。使用这个库测试人员,开发人员可以为 .NET 应用程序创建测试工具和自动化测试,利用数据结构和算法。


20) 是否可以从 Web API 返回视图(View)?

不,Web API 不返回视图,而是返回数据。在 Web API 中,ApiController 用于返回数据。如果你想从控制器类返回视图,你必须确保你已经使用了或继承了 Controller 类。


21) ASP.NET Web API 中的参数绑定是什么?

参数绑定是一个过程,它指定当 Web API 调用控制器上的方法时,必须设置参数的值。

默认情况下,Web API 使用以下规则来绑定参数:

  • FromUri:如果参数是“简单”类型,Web API 会尝试从 URI 获取值。简单类型包括 .Net 原始类型,如 int、double 等,DateTime、TimeSpan、GUID、string,以及任何可以从字符串类型转换的类型。
  • FromBody:如果参数是“复杂”类型,Web API 仅从消息正文中绑定值。

22) 如何全局注册异常过滤器?

我们可以使用以下代码轻松地全局注册异常过滤器:


23) REST 和 RESTful 有什么区别?

REST 和 RESTful 之间的区别:

RESTRESTful
REST 的完整形式是 REpresentational State Transfer(表述性状态转移)。RESTful 这个词是通过应用 REST 架构概念来命名的,称为 RESTful 服务。这是编写 Web 应用程序的一个全新方面。它主要关注系统资源以及资源的状态如何在 HTTP 协议上传输。

24) Web API 中的内容协商(Content Negotiation)是什么?

内容协商是从一组可用的多个不同表示中选择最佳表示形式的过程。以下是负责内容协商的两个主要头信息:

  • Content-Type:Content-Type 头用于告知服务器客户端将接收什么数据。
  • Accept:内容协商的另一种方法是使用 Accept-Header。它用于指定客户端从服务器请求的数据格式。

25) 提供一个 Web API 路由的示例?

以下是一个 Web API 路由的示例:


26) 你如何理解 ASP.NET Web API 中的媒体类型格式化器(Media-Type Formatter)?

Media-Type Formatter 是一个抽象类,充当 JsonMediaTypeFormatter 和 XmlMediaTypeFormatter 的父类。这两个类,JsonMediaTypeFormatter(用于处理 JSON 格式)和 XmlMediaTypeFormatter(用于处理 XML 格式),都派生自 Media-Type Formatter。

Media-Type Formatter 类还负责以客户端的格式序列化响应数据。


27) 处理 Web API 中错误的方法是什么?

Web API 中有几个类可用于处理错误,例如 HttpError、Exception Filters、HttpResponseException 和 Registering Exception Filters 等。


28) ASP.NET Web API 2.0 带来了哪些新功能?

以下是 ASP.NET Web API 框架 v2.0 的最新新功能:

  • 属性路由(Attribute Routing)
  • Open Web Interface for .NET (OWIN)
  • 跨域资源共享(Cross-Origin Resource Sharing)
  • 外部身份验证(External Authentication)
  • HttpActionResult
  • Web API OData

29) 如何在 Web API 中将访问方法限制为特定的 HTTP 动词?

借助属性(例如 HTTP 动词),在 Web API 中实现访问限制非常容易。我们可以通过将 HTTP 动词定义为属性来限制访问。

例如:


30) 什么是 Authorize Attribute?它的用途是什么?

Web API 提供了一个内置的授权过滤器,称为 Authorize Attribute。此过滤器用于检查用户是否已通过身份验证。如果未通过,用户将看到 401 Unauthorized HTTP 状态码。


31) 是否可以在 Web API 中传递多个复杂类型?

是的,我们可以通过以下两种方法轻松地在 Web API 中传递多个复杂类型:

  • 使用 ArrayList
  • 使用 Newtonsoft 数组

32) 你如何理解基本 HTTP 身份验证?

基本 HTTP 身份验证是一种用于用户身份验证的机制。在这里,用户通过服务进行身份验证,客户端在 HTTP Authorization 请求头中传递用户名和密码。凭据被编码为“username:password”字符串。


33) 如何在 Web API 中传递 ArrayList?

以下示例展示了如何在 Web API 中传递 ArrayList 的代码:


34) Web API 如何将 HTTP 请求路由到 ASP.NET MVC 的控制器?

在 ASP.NET Web API 中,HTTP 请求用于映射到控制器。Web API 框架使用路由表来确定要调用哪个操作。


35) 如何使用 Web API 中的 HttpError 来处理错误?

在 Web API 中,HttpError 方法用于抛出响应正文中的错误信息。除此之外,还可以使用 "CreateErrorResponse" 方法,它是 "HttpRequestMessageExtension" 中定义的扩展方法。


36) 如何全局注册异常过滤器?

我们可以使用以下代码来全局注册异常过滤器:


37) 你如何理解 Web API 中的异常处理?

异常处理是一种用于处理应用程序代码中运行时错误的技术。在 ASP.NET Web API 中,我们可以使用多种方式来处理错误。以下是一些示例:

  • HttpResponseException
  • HttpError
  • Exception Filters 等。

38) 什么是 Web API 版本控制,为什么使用它?

Web API 版本控制是一种将 Web API 安排为适应业务变化的技术,并且 API 不会影响正在使用/消费现有 API 的客户端。众所周知,多个客户端可以同时消费 Web API,因此随着业务的增长和业务需求的不断变化,Web API 版本控制是必不可少且必需的。


39) 有多少种 Web API 版本控制的方法?

以下是几种 Web API 版本控制的方法:

  • URI
  • 查询字符串参数(Query String Parameter)
  • 自定义头参数(Custom Header Parameter)
  • Accept 头参数(Accept Header Parameter)

40) Web API 相对于 WCF 有哪些优势?

WCF 服务使用 SOAP 协议,而 Web API 从不使用 SOAP 协议。因此,Web API 服务非常轻量,因为它不使用 SOAP。它还减少了用于恢复服务的传输数据量。Web API 最大的优点是它从不需要过多的配置。因此,客户端可以使用 HTTP 动词与服务进行交互。


41) MVC 和 Web API 有什么区别?

MVC 和 Web API 之间的区别:

MVC 框架Web API
MVC 框架用于开发具有用户界面的应用程序。WebAPI 用于开发 HTTP 服务。
在 MVC 框架中,视图用于构建用户界面。其他应用程序也可以调用 WebAPI 方法来获取数据。

42) 谁可以使用或消费 Web API?

任何支持 GET、PUT、DELETE、POST 等 HTTP 动词的客户端都可以使用或消费 Web API。Web API 服务不需要任何配置,因此任何客户端都可以轻松地消费它们。即使是手机等便携式设备也可以轻松消费它们,这无疑是这项技术最大的优势。


43) Web API 中使用的不同 HTTP 方法有哪些?

以下是 Web API 中使用的不同类型的 HTTP 方法。我们可以根据需要使用它们:

  • GET:GET 方法用于使用给定的 URI 从相应的服务器检索信息。
  • HEAD:HEAD 方法与 GET 方法相同,但用于传输状态行和头部信息。
  • PUT:PUT 方法用于更新值,它可以用上传的内容替换当前所有资源。
  • POST:POST 方法是一个请求,用于将数据发送到相应的服务器。
  • DELETE:DELETE 方法用于删除或移除由 URI 指定的所有当前资源。
  • OPTIONS:此方法用于描述目标资源的通信选项。
  • CONNECT:CONNECT 方法用于与由给定 URI 标识的服务器建立隧道。
  • TRACE:TRACE 方法用于沿目标资源路径执行消息回送测试。

注意:在以上所有方法中,GET、PUT、POST 和 DELETE 是最常用的方法。所有方法都区分大小写,我们必须使用大写。


44) 你如何理解 HTTP 状态码?

每个 API 响应的响应头都包含一个 HTTP 状态码。HTTP 状态码是三位数的整数,包含服务器响应。在这里,每个数字都有其含义。状态码的第一位定义了响应的类别。根据这个第一位数字,HTTP 状态码分为五类。

以下是 HTTP 状态码及其含义的列表:

HTTP 状态码地位含义
1xx信息性(Informational)它表示请求已收到,并且处理仍在继续。
2xx成功它表示操作已成功接收、理解并接受。
3xx重定向它表示我们需要采取进一步措施来完成请求。
4xx客户端错误(Client Error)它表示请求包含错误的语法或无法满足。
5xx服务器错误(Server Error)它表示服务器未能满足有效请求。

45) 一些常见的 HTTP 状态码有哪些?

以下是一些常见的 HTTP 状态码列表:

  • 200 (请求成功)
  • 201 (已创建)
  • 202 (已接受)
  • 204 (无内容)
  • 301 (永久移动)
  • 400 (错误请求)
  • 401 (未授权)
  • 403 (禁止)
  • 404 (未找到)
  • 500 (内部服务器错误)
  • 502 (错误的网关)
  • 503 (服务不可用) 等。

46) 你如何理解互联网媒体类型?

互联网媒体类型是 MIME 编码系统上的文件识别机制。它也称为“MIME 类型”。它已成为标识 Internet 上内容的实际标准。

例如,如果我们从服务器收到一封带有附件的电子邮件,服务器会将附件的媒体类型嵌入到消息头中。因此,浏览器可以启动相应的辅助应用程序或插件。


47) XML 和 JSON 有什么区别?

以下是 XML 和 JSON 之间的区别:

XMLJSON
XML 的完整形式是 eXtensible Markup Language(可扩展标记语言)。JSON 的完整形式是 JavaScript Object Notation(JavaScript 对象表示法)。
它是一种像 HTML 的标记语言,旨在存储和传输数据。JSON 通常在数据从服务器发送到网页时使用。它也用于存储和传输数据。
XML 本身不做任何事情,但它可以以特定格式存储数据。JSON 是一种自描述、易于理解、轻量级的数据存储和传输格式。

48) ASP.NET Web API 在哪个 .NET Framework 中引入?

ASP.NET Web API 的第一个版本是在 .NET Framework 4 中引入的。之后,.NET Framework 的所有后续版本都支持 ASP.NET Web API。


49) WCF vs. MVC vs. Web API 的主要区别是什么?

WCF vs. MVC vs. ASP.NET Web API

WCFMVCWeb API
WCF 是 Windows Communication Foundation 的缩写。它是一个用于构建或开发面向服务应用程序的框架。MVC 是 Model View Controller 的缩写。它用于创建返回数据和视图(HTML)的 Web 应用程序。Web API 是一个开源平台和框架,用于创建仅返回数据而不返回视图的 HTTP 服务。
它旨在交换标准的 SOAP 消息。MVC 用于方便地渲染 HTML。它支持大多数 MVC 功能,这使得 Web API 在 WCF 之上具有优势。
WCF 可以被能够理解 XML 的客户端消费。MVC 用于创建我们可以构建网页的 Web 应用程序。Web API 框架用于生成 HTTP 服务,通过生成原始格式数据(例如,纯 XML 或 JSON 字符串)来覆盖更多客户端。
WCF 支持各种传输协议,如 HTTP、TCP、命名管道(Named Pipes)或 MSMQ 等。JSON:它将从操作方法返回 JsonResult。Web API 创建简单的 HTTP 服务,这些服务渲染原始数据。
WCF 与 .NET Framework 一起发布。所有请求都被映射到相应的操作方法。Web API 向客户端返回 XML 或 JSON。
WCF 服务适用于消息队列、双工通信、单向消息传递。我们可以从 MVC 返回视图。在 ASP.NET MVC 应用程序中,请求被映射到 Action Methods。所有请求都使用 HTTP 动词映射到操作。

50) 如何对 Web API 进行单元测试?

我们可以使用 Fiddler 工具对 Web API 进行单元测试。按照以下步骤在 Fiddler 工具中进行设置:

Compose Tab -> Enter Request Headers -> Enter the Request Body and execute.


51) 如何从 Web API 服务返回 JSON,而不考虑 Accept 头的值?

我们可以轻松地从 Web API 服务返回 JSON,而不考虑 Accept 头的值。为此,请从 WebApiConfig.cs 文件(位于 App_Start 文件夹内)的 Register() 方法中删除 XmlFormatter。使用以下代码可以完全删除 XmlFormatter。它将始终以 JSON 格式返回数据,而不管客户端请求中的 Accept 头值如何。


52) Controller 和 ApiController 有什么区别?

Controller 用于渲染我们的普通视图。

示例

ApiController 用于当我们只需要返回已序列化并发送给客户端的数据时使用。

示例