#yyds干货盘点# RPCRESTGraphQL接口类型概述
Posted 测试玉米君
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了#yyds干货盘点# RPCRESTGraphQL接口类型概述相关的知识,希望对你有一定的参考价值。
1. 接口的意义
API(Application Programming Interface):应用编程接口, 简称“接口”。
举例:
- 程序如有创建线程,需要调用操作系统的“接口”
- 购物时,如果要清空购物车,调用电商系统的“接口”
- 有一个程序,想要给另一个程序传递数据,需要调用它的“接口”
接口:程序之间约定的通信方法
特点:约定了调用方法,以及预期的行为,但是不透露具体细节
意义:程序能解耦,互通有无
接口很有重要,接口测试也非常有必要。
接口测试难度低,收益大,效果号,接口测试很有必要
对于一个系统,如果我们要低成本高质量的进行测试,接口测试的优先的选择。
2. 接口的类型
应用级接口:
- RPC
- REST
- GraphQL
2.1 RPC
PRC (remote procedure call ) 远程过程调用,将其他程序、系统、软件的功能(函数)当作时本程序的功能,进行使用
举个例子:
程序A有函数add,实现加法的功能
程序B想要使用add,需要和A进行交流。
创建API: A和B约定,如有B传递xxxxx 到A,那么A对xxxx进行处理,并返回结果yyyy给B,
RPC用法: 在B中直接调用add
gRPC谷歌开发的高性能,跨语言的PRC组件
使用步骤:
- 定义数据格式 :pb
- 利用grpc组件,根据数据格式生成python代码
- 启动server (拥有add 的程序A)
- 启动client,调用server中的方法
-
安装相关工具
pip install grpcio grpcio-tools
-
定义数据格式
https://developers.google.com/protocol-buffers/docs/overview
// yumi.proto syntax = "proto3"; service Yumi{ rpc add(Request) returns (Response) {} ; } message Request { int32 a = 1; int32 b = 2; } message Response { int32 c = 3; }
-
生成python文件
python -m grpc.tools.protoc --python_out=. --grpc_python_out=. -I. sanmu.proto
sanmu.proto # 协议(数据格式) sanmu_pb2.py # python版的协议 sanmu_pb2_grpc.py # python的grpc (server 和client)
-
启动server
from concurrent import futures import grpc import sanmu_pb2 import sanmu_pb2_grpc class Sanmu(sanmu_pb2_grpc.SanmuServicer): def add(self, request, context): a, b = request.a, request.b print(f"{a=}, {b=}") c = a + b return sanmu_pb2.Response(c=c) def serve(): server = grpc.server(futures.ThreadPoolExecutor(max_workers=10)) sanmu_pb2_grpc.add_SanmuServicer_to_server(Sanmu(), server) server.add_insecure_port("[::]:50051") server.start() server.wait_for_termination() if __name__ == "__main__": serve()
-
启动client
import grpc import sanmu_pb2 import sanmu_pb2_grpc def add(a: int, b: int) -> int: # 连接到rpc服务器 channel = grpc.insecure_channel("[::1]:50051") # 调用 add 服务 stub = sanmu_pb2_grpc.SanmuStub(channel) response = stub.add(sanmu_pb2.Request(a=a, b=b)) return response.c print(add(1, 2))
RPC特点:
- 有serve端和client端,自动生成
- 不清楚PRC通信的细节
对RPC进行测试,只需要拥有RPC客户端,然后对其调用即可
2.2 REST
REST :软件架构
RESTful :符合REST的风格
RESTful API: 符合REST风格的 API
REST 和 RPC正好相反:REST没有提供专用的独立客户端,反倒是要求你对协议细节掌握额度比较清楚。
因为 REST【充分】使用HTTP语义,来描述资源 和对资源的操作:
- 使用 URL 表示 资源
- 使用 METHOD 表示对资源的操作 (GET POST)
- 使用 STATUS_CODE 表示对操作的结果
先有HTTP,后有REST,RESTful是一种风格,没有具体的要求和约束,所以在接口具体实现上有很大的差异。
- 数据格式:
- json
- xml
- 表单
- raw
- 请求方法:
- 各种method
- 只是用POST
- 鉴权方式:
- cookies
- basic auth
- api-key
- jwt (json web token)
- OAuth 2.0
为了统一接口Restful API细节,行业推出接口的规范 OAS (OpenAPI Specification)
swagger 2.0
openapi 3.0
swagger 是API工具集合:
- 接口设计工具
- 接口文档工具
- 接口代码生成工具
从3.0开始,接口规范贡献给了OAS组织。
2.3 GraphQL
GraphQL是更加强大更加先进,更加灵活的接口类型,更加准确的说它是个查询语言。
GraphQL也是基于HTTP协议的,但是和REST相反:
- 只需要一个URL
- 只需要一个METHOD
- 所有的参数放在body中
这个参数实际上是一种查询的语法,可以编写负债的查询语句,一次性从接口中获取所有需要的数据。
VS REST:
- 查询商品分类
- 根据商品分类,查询商品列表
- 根据商品ID,查询商品价格
举个例子:
POST https://demo.saleor.io/graphql/
POST https://demo.saleor.io/graphql/
GITHUB API V3: REST
GITHUB API V4: GraphQL
3. 接口自动化测试思路
以上是关于#yyds干货盘点# RPCRESTGraphQL接口类型概述的主要内容,如果未能解决你的问题,请参考以下文章