TOP 20 REST API面试题及解答(测试人员版本)【翻译】

RESTful API作为目前比较流行的API设计架构,是每个所有技术人员需要掌握的。本文虽然是写给测试人员的,但是可以作为所有同学的入门来看。

正文:

亲爱的读者,这是写给测试工程师的前20 REST API面试问题和答案列表。作为一个QA工程师,我们也应该了解rest API概念。

Q-1. 简述 REST?

Ans. REST 代表Representational State Transfer(表述性状态转移). REST是一种开发网络服务的架构风格,它利用了HTTP协议的普遍性并且使用HTTP方法来定义动作。它围绕资源展开,一切组件都是可以通过使用HTTP标准方法统一接口被访问的资源。

在REST架构中,REST服务端提供资源访问和REST客户端访问和描述资源。每个资源通过URI或者全局ID区分。REST使用不同的方式来描述资源,比如text、JSON和XML。现在XML和JSON是最为流行的资源描述方式。

Q-2. 描述 RESTFul Web Service?

Ans. 通常,有两种比较流行的Web服务。

1. 简单对象访问协议SOAP (Simple Object Access Protocol) 是一种基于XML的方式提供网络服务。

2. 使用REST风格开发的网络服务被称作RESTful web service。这种服务使用HTTP方法来实现REST架构的概念。RESTful web 服务通常定义一个URI,统一资源标识符服务、提供资源描述比如JSON并且一系列HTTP方法。

Q-3. 简述在REST中什么是一个“资源(Resource)”?

Ans. REST架构将每一个内容作为资源。资源可以使文本文件、HTML页面、图片、视频或者动态的商业数据。

REST服务提供资源访问,REST客户端访问和修改这些资源。此处每个资源通过URI或者全局ID来区分。

Q-4.在REST中最流行的资源表述方式是什么?

Ans. REST使用不同描述方式来定义一个资源比如text、JSON和XML。

XML和JSON是最流行的资源描述方式。

Q-5.  RESTful Web Services使用哪种协议?

Ans. RESTful网络服务使用HTTP协议作为客户端和服务器通信的媒介。

Q-6. RESTful Web Services的消息是什么?

Ans. RESTful网络服务使用HTTP协议作为客户端和服务器通信的媒介。客户端以HTTP请求方式的发送消息。

作为响应,服务器端传递HTTP响应。这项技术叫做消息(Message)。此消息包含消息数据和元数据等其他关于消息本身的信息。

Q-7. 描述一个HTTP请求的核心组成?

Ans. 每个HTTP请求包含5个关键元素。

1. 谓词- 描述HTTP方法的动词,比如GET, PUT, POST, DELETE。
2. URI – URI 代表 Uniform Resource Identifier (URI) 统一资源定位。它是服务器上资源的标识。
3. 版本 – 描述HTTP版本的HTTP Version,例如HTTP v1.1.
4. 请求头 – 携带了HTTP请求信息元数据(键值对)的请求头。元数据可以是客户端(或者浏览器)类型,客户端支持的类型,消息体格式和缓存设置等。
5. 请求体 – 描述消息内容或者资源描述的消息体。

Q-8. 描述一个HTTP响应的核心组成?

Ans. 每个HTTP响应包含四个核心元素。

1. 状态/响应码 – 表述HTTP请求的资源服务器状态。 例如,404表示资源未找到的意思,200代表返回成功的意思。
2. HTTP版本 – 表述 HTTP版本, 例如HTTP v1.1.
3. 响应头 – 包含了以键值对形式存储的HTTP响应消息的元信息。例如,内容长度,内容类型,响应日期以及服务器类型等。
4. 响应体 – 表述响应消息或者资源描述。

Q-9. 指出几个最常用的REST 支持的HTTP方法?

Ans. 有几个HTTP方法在REST中经常使用。

1. GET – 通过URL请求一个资源。请求不应包含请求体, 因为请求体会被丢弃。请求可能会在本地或者服务器端缓存。
2. POST – 提交需要服务器端处理的信息;典型地,应该返回一个修改后的或者新的资源。
3. PUT – 通过URL更新资源。
4. DELETE – 通过URL删除资源。
5. OPTIONS – 描述可支持的技术。
6. HEAD – 返回请求URL的元数据信息。

Q-10. 简述, 是否可以使用GET请求代替PUT来创建一个资源?

Ans. 不可以,应该使用PUT或者POST方法。相反,使用GET操作是只读操作。

Q-11. PUT和POST操作有什么不同?请简述。

Ans. PUT 和 POST 操作几乎相同。唯一的不同是关于他们产生的结果。

PUT 操作是幂等的,而POST操作可以得到不同的结果。

举一个例子:

1. PUT 通过一个特定的URI请求一个文件或者资源。如果资源已经存在,那么PUT更新它。如果是首次请求,那么PUT创建它。
2. POST发送数据到一个特定的URI并且期望那个URI的资源处理请求。在这种情况下,服务器可以根据特定资源的内容来决定采取什么动作处理数据。

Q-12. 在RESTful Web Services中,OPTIONS操作的目的是什么?

Ans. 这个方法列出所有网络服务支持的操作。发送只读的请求到服务器。

Q-13. URI是什么?解释基于REST的网络服务中它的意义? 它的形式是怎样的?

Ans. URI 代表 Uniform Resource Identifier统一资源定位符. URI是资源的标识符,在REST架构中。

URI的意义是用于在提供网络服务的服务器上定位资源。 URI 形式如下:

<protocol>://<service-name>/<ResourceType>/<ResourceID>

Q-14. 在RESTful Web Service中,关于负载(Payload)你是如何理解的?

Ans. 每个HTTP消息的消息体包含的请求数据叫做负载。这部分是接收者感兴趣的消息。

我们可以说用POST方法发送了负载,但是不能使用GET和DELETE方法。

Q-15. 在POST方法中传递负载的上限是多少?

Ans. <GET> 附加数据到服务的URL上。但是,它的长度不应该超过最大URL长度限制。然而,<POST>并没有这种限制。

因此,理论上,用户可以传递无限数据作为POST方法的负载。但是,如果我们考虑现实情况,发送POST携带大量负载需要考虑带宽消耗。将会对服务器造成大量耗时和性能挑战。因此用户应该根据情况来定。

Q-16. 解释缓存机制?

Ans. 缓存是在客户端存储服务器相应的处理。它可以从一次次请求相同资源节省客观的时间。

服务器响应返回使客户端执行缓存的信息。以帮助客户端确定存档时长或者不再存储。

Q-17. 列举SOAP和REST之间的不同?

                        SOAP                       REST

1. SOAP 是一个两台电脑通过共享XML文档通信的协议。

1. Rest是一种服务架构,为基于网络软件架构而设计。

2. SOAP 只支持XML格式。

2.  支持多种不同数据类型。

3. SOAP不支持缓存。

3. 支持缓存。

4. SOAP 类似于桌面应用,紧密链接服务器。

4.  REST客户端就像浏览器并且使用标准的方法。应用内在兼容。

5. SOAP 比 REST慢.

5. 比SOAP快

6. 使用 HTTP,但独立封装信息。

6. 使用HTTP头部传递元信息。

Q-18.测试网络服务可以使用的工具有哪些?

Ans. 如下工具可以帮助测试SOAP和RESTful网络服务。

1.  SOAP UI 工具.
2.  Firefox浏览器的Poster.
3. Chrome扩展Postman.

Q-19.  解释哪些因素可以帮助决定网络服务使用哪种类型? SOAP或者REST?

Ans. 通常,使用基于REST的网络服务是首选,由于其简单、高性能、可扩展和支持多种数据格式。

但是,在需要高级别安全性以及事务可靠性的场景下SOAP最常被采用。

但是你可以阅读如下因素在你选择任何形式前。

1. 服务是暴露数据还是业务逻辑?暴露数据REST是更好的选择,SOAP对逻辑更好。
2. 如果消费者或者服务提供者需要标准契约,那么SOAP可以通过WSDL提供这种契约。
3. 需要支持多种数据格式。REST可以支持。
4. 支持AJAX调用。REST可以使用XMLHttpRequest。
5. 异步和同步调用 – SOAP同时支持同步/异步操作,然而REST内建支持同步调用。
6. 无状态或者有状态调用 – REST适合于无状态操作。

你也可以考虑如下一些高级的因素。

1. 安全要求 – SOAP提供高级别的安全等级。
2. 事务支持 – SOAP支持更好的事务管理。
3. 带宽限制 –  SOAP由于基于XML,请求SOAP头部时候,在发送/接受包时有更多的额外开支 。但是,REST发送请求到服务器需要更少的带宽。几乎所有消息都采用JSON格式。
4. 易用性 – 基于REST的应用,容易实现、测试和维护。

Q-20. 哪个Java API 可以帮助开发RESTful Web Service?

Ans. 在Java用,有大量的可用的框架和类库来给程序员来创建RESTful网络服务。例如,JAX-RS类库是一个标准的方式来开发REST网络服务。

同时,Jersey是另一个JAX-RS的流行的实现,它提供了更多。还有其他的像RESTEasy、RESTlet和Apache CFX。

如果你喜欢Scala,那么你应该使用Play框架来开发RESTful网络服务。

 

Top 20 REST API Interview Questions and Answers for Software Testers

 

发表评论

电子邮件地址不会被公开。 必填项已用*标注