• 如何提高API接口的性能和设计安全可靠的API


    如何提高API接口的性能

    下图显示了提高 API 性能的 5 种常见技巧。

    分页

    这是在结果集较大时常用的优化方法。结果会以流式方式传回客户端,以提高服务响应速度。

    异步日志

    同步日志每次调用都要处理磁盘,会降低系统速度。异步日志会先将日志发送到无锁缓冲区,然后立即返回。日志会定期刷新到磁盘,这大大减少了 I/O 开销。

    缓存

    我们可以将经常访问的数据缓存到缓存中。客户端先查询缓存,而不是直接访问数据库。如果出现缓存缺失,客户端可以从数据库中查询。Redis 等缓存将数据存储在内存中,因此数据访问速度比数据库快得多。

    Payload 压缩

    可以使用 gzip 等对请求和响应进行压缩,从而大大缩小传输数据的大小。这可以加快上传和下载速度。

    连接池

    访问资源时,我们经常需要从数据库加载数据。打开和关闭数据库连接会增加大量开销。因此,我们应该通过一个开放连接池来连接数据库。连接池负责管理连接的生命周期。

    如何设计安全可靠的API ?

    ① 使用 HTTPS

    • 数据加密:HTTPS 对客户端和服务器之间传输的数据进行加密。它使用 TLS 或其前身 SSL 对通信进行加密。这种加密可确保用户数据、身份验证等敏感信息在传输过程中保持安全。如果没有 HTTPS,这些信息可能会被数据包嗅探等技术截获。

    • 合规要求:许多监管标准,如 GDPR 和 PCI DSS,都要求使用 HTTPS 来保护用户的敏感信息。

    • SEO 要求:谷歌等搜索引擎会优先考虑支持 HTTPS 的网站和应用程序接口,认为它们更安全。

    ② 使用 OAuth 2.0

    OAuth 2.0 对设计安全可靠的 API 至关重要,因为它能够在不共享用户凭证的情况下使用代理来访问资源。它还支持跨多个应用程序和服务的集成,促进了单点登录(SSO),允许用户进行一次身份验证来无缝访问多个服务或应用程序。

    ③ 使用 WebAuthn

    WebAuthn 不依赖于集中式服务器或密码数据库。它允许用户注册和使用自己的设备(如安全密钥或生物特征识别设备)进行身份验证,消除仅依赖密码的弱点。通过实现 WebAuthn,API 可以符合 FIDO 等安全标准,满足合规要求。

    ④ 使用分级 API Key

    我们通常要针对系统开放的服务接口设计不同的访问权限。分级的 API Key 可以提供细粒度的访问控制。比如,在使用 Stripe 时,我们可以给“访问账户”指定一个只读 API Key,给“操作账户”指定另一个 API Key。

    ⑤ 授权

    这一条和上一条相关。我们需要给系统内部的各种 API 接口设计访问授权,遵循“最小权限”原则

    ⑥ 限流

    在设计 API 时,需要估计大致容量,并针对容量来限流,从而保护系统。限流的好处有很多,比如防止 DDos 攻击,防止系统过载,合理分配系统资源等。

    ⑦ 版本控制

    API 版本控制提供了一种结构化的 API 生命周期管理方法,将 API 的管理提升到代码一个级别,同时确保向后兼容性。它使开发人员能够引入新功能而不会破坏用户对于旧版本的依赖。

    ⑧ 白名单

    白名单指定并仅允许预先批准的 IP 地址或用户访问 API。这有助于防止常见的安全威胁,如未经授权的访问、数据泄露、注入攻击等。它提高了潜在攻击者的门槛。

    ⑨ 定期检查 OWASP API 安全风险清单

    The OWASP API Security Top 10 是由 OWASP(Open Web Application Security Project)编制的清单,该组织致力于提高软件安全性。该清单特别突出了与 API 相关的最关键安全风险,旨在提高开发人员、安全专业人员和组织对 API 相关漏洞和威胁的意识,并提供指导,以有效解决这些问题。

    ⑩ 使用 API 网关

    API 网关作为入站 API 请求的集中入口点。它们能够实施诸如身份验证、授权、加密和威胁防护等安全措施。这种集中化能够在所有 API 中应用一致的安全策略。

    11 错误处理

    有效的错误处理机制使 API 能够优雅地处理意外情况或故障,确保错误得到适当地传达给客户端,提供更好的用户体验。确保返回给客户端的错误消息不会暴露 API 内部运作或基础架构的敏感信息。

    12 输入验证

    无效或格式不正确的输入数据可能导致数据丢失、损坏或系统崩溃。输入验证在设计安全可靠的 API 中至关重要,有助于防止常见的攻击,如 SQL 注入、NoSQL 注入和其他基于注入的漏洞。

  • 相关阅读:
    C专家编程 第11章 你懂得C,所以C++不再话下 11.16 新奇玩意儿---多态
    3.2队列
    手把手APP抓包检测实战 - 某汽车APP
    redis集群的多key原子性操作如何实现?
    Git - 入门到熟悉_分支管理
    C语言---函数---总结
    RNA-seq 详细教程:分析流程介绍(1)
    vscode配置运行C/C++
    【JavaScript-26】js的内置对象Math,随机数获取随机颜色
    多元共进|2023 Google 开发者大会主旨演讲亮点回顾
  • 原文地址:https://blog.csdn.net/qq_57093716/article/details/136634870