API 验证检查表

如今,应用程序使用 API 相互通信,需要验证应用程序/微服务之间的任何消息的验证。这个清单包括一些 API 验证的最佳实践


微服务是设计师处理当今世界应用程序复杂性的方法。然而,这些应用程序的验证和部署在实现过程中丢失了,因为在现实世界中这个过程很少被传达。

一个可以分解为模型-视图-控制器架构的 web 应用程序已经变成了非结构化数据的世界 <-> 微服务 <-> 前端。具有可配置后端(数据存储而不是数据库)和灵活前端的能力使得 Microservice API 成为数据交换的主要来源。

对于传统的测试/验证团队来说,这种检查是一项正在进行的工作,目的是解决将 Infrastructure as Code 部署为代码时遇到的实际挑战。


openapi: "3.0.0"
info:
  title: Simple API overview
  version: 2.0.0
  description: >-
    API To Test Hello World.
  version: '1'
  termsOfService: 'http://swagger.io/terms/'
host: 'localhost'
paths:
  /:
    get:
      operationId: listVersionsv2
      summary: List API versions
      responses:
        '200':
          description: |-
            200 response
          content:
            application/json:
              examples: 
                foo:
                  value:
                    {
                      "versions": [
                        {
                            "status": "CURRENT",
                            "updated": "2011-01-21T11:33:21Z",
                            "id": "v2.0",
                            "links": [
                                {
                                    "href": "http://127.0.0.1:8774/v2/",
                                    "rel": "self"
                                }
                            ]
                        },
                        {
                            "status": "EXPERIMENTAL",
                            "updated": "2013-07-23T11:33:21Z",
                            "id": "v3.0",
                            "links": [
                                {
                                    "href": "http://127.0.0.1:8774/v3/",
                                    "rel": "self"
                                }
                            ]
                        }
                      ]
                    }
        '300':
          description: |-
            300 response
          content:
            application/json: 
              examples: 
                foo:
                  value: |
                   {
                    "versions": [
                          {
                            "status": "CURRENT",
                            "updated": "2011-01-21T11:33:21Z",
                            "id": "v2.0",
                            "links": [
                                {
                                    "href": "http://127.0.0.1:8774/v2/",
                                    "rel": "self"
                                }
                            ]
                        },
                        {
                            "status": "EXPERIMENTAL",
                            "updated": "2013-07-23T11:33:21Z",
                            "id": "v3.0",
                            "links": [
                                {
                                    "href": "http://127.0.0.1:8774/v3/",
                                    "rel": "self"
                                }
                            ]
                        }
                    ]
                   }
  /v2:
    get:
      operationId: getVersionDetailsv2
      summary: Show API version details
      responses:
        '200':
          description: |-
            200 response
          content:
            application/json: 
              examples:
                foo:
                  value:
                    {
                      "version": {
                        "status": "CURRENT",
                        "updated": "2011-01-21T11:33:21Z",
                        "media-types": [
                          {
                              "base": "application/xml",
                              "type": "application/vnd.openstack.compute+xml;version=2"
                          },
                          {
                              "base": "application/json",
                              "type": "application/vnd.openstack.compute+json;version=2"
                          }
                        ],
                        "id": "v2.0",
                        "links": [
                          {
                              "href": "http://127.0.0.1:8774/v2/",
                              "rel": "self"
                          },
                          {
                              "href": "http://docs.openstack.org/api/openstack-compute/2/os-compute-devguide-2.pdf",
                              "type": "application/pdf",
                              "rel": "describedby"
                          },
                          {
                              "href": "http://docs.openstack.org/api/openstack-compute/2/wadl/os-compute-2.wadl",
                              "type": "application/vnd.sun.wadl+xml",
                              "rel": "describedby"
                          },
                          {
                            "href": "http://docs.openstack.org/api/openstack-compute/2/wadl/os-compute-2.wadl",
                            "type": "application/vnd.sun.wadl+xml",
                            "rel": "describedby"
                          }
                        ]
                      }
                    }
        '203':
          description: |-
            203 response
          content:
            application/json: 
              examples:
                foo:
                  value:
                    {
                      "version": {
                        "status": "CURRENT",
                        "updated": "2011-01-21T11:33:21Z",
                        "media-types": [
                          {
                              "base": "application/xml",
                              "type": "application/vnd.openstack.compute+xml;version=2"
                          },
                          {
                              "base": "application/json",
                              "type": "application/vnd.openstack.compute+json;version=2"
                          }
                        ],
                        "id": "v2.0",
                        "links": [
                          {
                              "href": "http://23.253.228.211:8774/v2/",
                              "rel": "self"
                          },
                          {
                              "href": "http://docs.openstack.org/api/openstack-compute/2/os-compute-devguide-2.pdf",
                              "type": "application/pdf",
                              "rel": "describedby"
                          },
                          {
                              "href": "http://docs.openstack.org/api/openstack-compute/2/wadl/os-compute-2.wadl",
                              "type": "application/vnd.sun.wadl+xml",
                              "rel": "describedby"
                          }
                        ]
                      }
                    }

这些指南可用于检查 YAML 中要测试的 API 的有效负载、响应、部署和参数。

共享 YAML 文件时检查 API 完整性的步骤

1. 获取列出 URL (即 https://localhost:8089/API/vx/resource )的 YAML 或 API 规范

  • 信息(端点/资源上允许的操作)
  • 服务器(应用程序将被托管的环境/URL)
  • path(部署的 API 端点和端口详细信息)
  • components(可以从中访问资源的端点)
  • 检查已部署的版本和已实现的 Vx 版本

2.确认和验证方法(GET/POST/PUT/PATCH/UPDATE)和到服务器的 URL 部署到 ex: (https://< ENVIRONMENT > : PORT/)以及有效:

A:持记名信物的凭证

B: Parameters?XXKEY=XXVAL&YYKEY=YYVAL ( 来自路径部分)

C: 方法的主体是格式良好的(来自 Schema) ,并在标题中声明

3.验证 API 和 API 版本是否部署到 < ENVIRONMENT > 进行测试

4. 检查有效载荷主体中的最小/最大值和超出范围值的有效载荷范围

5. 检查 YAML/API 中列出的 REST API 响应代码

  • 200: OK
  • 201: 对于 PUT,它是一个 Create 请求
  • 400/404/409:参考网络或资源错误
  • 50x: 参考服务器日志查找错误

6. 将 UI 上的 Data 与 GET/PUT Body 匹配,以匹配 UI 上显示的值。

7. 检查 API Body/header 中的强制/可选字段是否存在模式错误。请参考[3]以进行模式验证。

一般检查

  1. 检查调用 API 的性能或延迟(API 完成往返的响应时间)
  2. 检查部署时的 CORS/跨网站脚本错误
  3. 检查引用 API 或参考资料的重复调用,这些调用加载时间太长(映射的资源将托管在 CDN 或静态内容站点上)
  4. 需要检查客户端查询的分页和参数化参数以进行验证
  5. 网络安全相关的方面有关的标题和允许的查询域名。-也参考OWASP API Security OWASP API 安全 for OWASP API security. 用于 OWASP API 安全



发表评论
留言与评论(共有 0 条评论) “”
   
验证码:

相关文章

推荐文章