分享

REST API 设计小抄

 黄爸爸好 2024-05-21 发布于上海

图片

图片

API 将业务逻辑和数据暴露给外部系统,因此安全高效地设计 API 非常重要。今天为大家带来一份 API 设计的小抄。

图片

01 生成 API 密钥

我们通常为每个客户端生成一个唯一的应用程序 ID,并生成不同对的公钥(访问密钥)和私钥(保密密钥),以满足不同授权的需要。例如,我们可以为只读访问生成一对密钥,为读写访问生成另一对密钥。

02 生成签名

签名用于验证 API 请求的真实性和完整性。签名使用秘钥生成,通常包括以下步骤:

  • 收集参数
  • 创建要签名的字符串
  • 对字符串进行散列:使用加密散列函数,如结合 SHA-256 的 HMAC(基于散列的消息验证码),使用秘钥对字符串进行散列。

03 发送请求

设计 API 时,决定 HTTP 请求参数中应包含哪些内容至关重要。在请求参数中包含以下内容:

  • 身份验证凭据
  • 时间戳:防止重放攻击。
  • 请求特定数据:处理请求所必需的数据,如用户 ID、交易详情或搜索查询。
  • Nonce:随机生成的字符串,包含在每个请求中,以确保每个请求都是唯一的,并防止重放攻击。

04 安全指南

要保护 API 免受常见漏洞和威胁的攻击,请遵守以下安全指南:

  • 使用 HTTPS

使用 HTTPS 确保 API 端点安全,以加密客户端和服务器之间传输的数据。

  • 严格验证输入

确保通过 API 请求接收的所有输入都经过验证,以防止 SQL 注入、跨站脚本 (XSS) 和其他注入攻击。

  • 验证时间戳和 nonce

这可防止重放攻击。

  • 实施速率限制

通过限制用户或令牌在一定时间内发出请求的频率,防止滥用和 DDoS(分布式拒绝服务)攻击。

  • 为有效 IP 设置白名单

这样可以防止来自未知 IP 地址的恶意攻击。

  • 日志记录每个请求

这样可以进行监控和跟踪。

  • 加密敏感数据

对于用户配置文件、医疗记录等敏感数据,应在传输过程中对数据进行加密。

以上内容源自公众号“ByteByteGo”,是硅谷百万粉丝技术大v、《搞定系统设计:面试敲开大厂的门》一书作者Alex Xu的官方号。

图片

关于系统设计的面试,可以说是所有技术面试中最难的。

面试者会被要求设计一个软件系统,比如news feed、谷歌搜索、聊天系统等。

这些问题令人望而生畏,没有特定的解题模式,通常范围都非常广且模糊,其答案也是开放的,也可以说不存在标准答案或正确答案。

很多公司都设有系统设计面试,因为这种面试能考验软件工程师日常工作所需的沟通能力和解决问题的能力。

面试官会考查候选人如何分析一个模糊的问题并一步步解决这个问题;同时,他们还会考查候选人阐述自己想法的能力、与其他人讨论的能力、评估及优化系统的能力。

系统设计的问题是开放式的。

在现实世界中,不同的系统之间存在许多差别,而系统自身还要应对各种变化。

面试官期望得到的答案是一个能满足系统设计目标的架构。

在面试过程中,对问题的讨论可能会因面试官的个人风格不同而走向不同的方向。

有些面试官喜欢询问高层架构设计方面的问题,以全面地考查面试者的知识面,也有些面试官会选择一个或者几个领域来深入地考查知识点。

一般来说,应该搞清楚系统的需求、限制和瓶颈,以便面试双方可以有效地进行沟通。

Alex所著《搞定系统设计:面试敲开大厂的门》一书的目标是提供一个可靠的策略,帮助面试者回答系统设计问题。采取正确的策略且具备必要的知识,对面试的成功至关重要。

图片

本书讲述了构建一个可扩展系统所需的基础知识。你从本书中获得的知识越多,在解决系统设计问题时就越从容。

本书还提供了一个逐步解决系统设计问题的框架,用了很多实例来阐释这种系统性的解决方法且附有详细步骤,你可以照着操作。只要勤加练习,在回答系统设计面试问题时,你就会胸有成竹。

本书原著豆瓣评分8.4,得到众多读者的好评,案例经典、信息全面系统、非常适合用来面试!

图片

图片

如果你想顺利通过高难度的系统设计面试,那就看看这本被众多读者验证过的好书吧~~

发布:刘恩惠

审核:陈歆懿

 


    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多