#yyds干货盘点# RPCRESTGraphQL接口类型概述

丈夫志四海,万里犹比邻。这篇文章主要讲述#yyds干货盘点# RPCRESTGraphQL接口类型概述相关的知识,希望能为你提供帮助。
1. 接口的意义API(Application Programming Interface):应用编程接口, 简称“接口”。
举例:

  • 程序如有创建线程,需要调用操作系统的“接口”
  • 购物时,如果要清空购物车,调用电商系统的“接口”
  • 有一个程序,想要给另一个程序传递数据,需要调用它的“接口”
接口:程序之间约定的通信方法
特点:约定了调用方法,以及预期的行为,但是不透露具体细节
意义:程序能解耦,互通有无
接口很有重要,接口测试也非常有必要。
#yyds干货盘点# RPCRESTGraphQL接口类型概述

文章图片

接口测试难度低,收益大,效果号,接口测试很有必要
对于一个系统,如果我们要低成本高质量的进行测试,接口测试的优先的选择。
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组件
使用步骤:
  1. 定义数据格式 :pb
  2. 利用grpc组件,根据数据格式生成python代码
  3. 启动server (拥有add 的程序A)
  4. 启动client,调用server中的方法
  1. 安装相关工具
    pip install grpciogrpcio-tools

  2. 定义数据格式
    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; }

  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)

  4. 启动server
    from concurrent import futuresimport grpcimport sanmu_pb2 import sanmu_pb2_grpcclass 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()

  5. 启动client
    import grpcimport sanmu_pb2 import sanmu_pb2_grpcdef 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.cprint(add(1, 2))

【#yyds干货盘点# RPCRESTGraphQL接口类型概述】RPC特点:
  1. 有serve端和client端,自动生成
  2. 不清楚PRC通信的细节
对RPC进行测试,只需要拥有RPC客户端,然后对其调用即可
2.2 REST
REST:软件架构
RESTful :符合REST的风格
RESTfulAPI: 符合REST风格的API
REST 和 RPC正好相反:REST没有提供专用的独立客户端,反倒是要求你对协议细节掌握额度比较清楚。
因为 REST【充分】使用HTTP语义,来描述资源 和对资源的操作:
  1. 使用 URL 表示 资源
  2. 使用 METHOD 表示对资源的操作(GET POST)
  3. 使用 STATUS_CODE 表示对操作的结果
先有HTTP,后有REST,RESTful是一种风格,没有具体的要求和约束,所以在接口具体实现上有很大的差异。
  1. 数据格式:
    1. json
    2. xml
    3. 表单
    4. raw
  2. 请求方法:
    1. 各种method
    2. 只是用POST
  3. 鉴权方式:
    1. cookies
    2. basic auth
    3. api-key
    4. jwt (json web token)
    5. 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:
  1. 查询商品分类
  2. 根据商品分类,查询商品列表
  3. 根据商品ID,查询商品价格
举个例子:
POST https://demo.saleor.io/graphql/
POST https://demo.saleor.io/graphql/
GITHUB API V3: REST
GITHUB API V4: GraphQL
3. 接口自动化测试思路
#yyds干货盘点# RPCRESTGraphQL接口类型概述

文章图片


    推荐阅读