V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
3country
V2EX  ›  程序员

对外开放接口需要注意哪些地方?

  •  
  •   3country · 2024-03-28 14:45:49 +08:00 · 2258 次点击
    这是一个创建于 367 天前的主题,其中的信息可能已经有所发展或是发生改变。

    最近公司有对外的业务,想新开发几个开放的接口,以前没有过相关经验,来请教下各位。

    查了一下,目前考虑到的有

    • IP 白名单
    • APPID 机制,给外部调用方提供对应的 appid 和 secret
    • 接口签名,md5 加密 str:参数 1={参数 1}&参数 2={参数 2}&……&参数 n={参数 n}$key={用户密钥};
    • 接口限流?
    • https 协议

    以上是否都需要呢?

    18 条回复    2024-05-24 10:51:30 +08:00
    NessajCN
        1
    NessajCN  
       2024-03-28 14:55:20 +08:00
    ip 白名单看情况,面向公众的就别了,没必要
    appid 这些是接口内验证用的,叫啥名无所谓,这个要
    接口签名跟上面这个重复了,纯折腾开发者还是别了
    限流这个是付费相关的,根据实际需求来
    https 是标配了,不过这个跟接口本身没啥关系,是传输层的
    wentjiang
        2
    wentjiang  
       2024-03-28 14:57:31 +08:00
    你可以直接参考淘宝的开放平台,然后根据自己实际的业务进行修改
    3country
        3
    3country  
    OP
       2024-03-28 15:03:18 +08:00
    @NessajCN 就是付费相关的,面向企业,那只有 3 可有可无了
    yule111222
        4
    yule111222  
       2024-03-28 15:20:59 +08:00
    建议用标准 oauth2 ,不要抄国内那些乱七八糟的
    标准 oatuh2 强制要求 https ,也不需要接口签名,纯脱裤子放屁
    javalaw2010
        5
    javalaw2010  
       2024-03-28 15:24:31 +08:00
    看起来不是专门做 open api 的业务,预计未来这方面的业务不会很大的话,就简单处理,IP 白名单没必要,APPID 简化为一个 token 让对方保存好丢到 header 里面。接口签名没必要,接口限流根据实际业务做一下,https 标配了没的说。
    yuanmomo
        6
    yuanmomo  
       2024-03-28 15:35:24 +08:00 via iPhone   ❤️ 2
    access log ,监控响应状态和耗时

    服务 health 监控

    一般入参和响应会有日志,有助于排查日志(这个主要看请求量,不然日志就太多了)

    接口幂等

    所有参数验证,不相信客户端的所有数据

    接口有一个参数,时间戳,后端优先校验时间戳,跟当年时间误差超过多大的不处理
    afxcn
        7
    afxcn  
       2024-03-28 15:40:35 +08:00
    我们就搞了个 accessToken, 再根据权限来管理哪些 api 可以调。

    https 是必需的了吧
    sparklee
        8
    sparklee  
       2024-03-28 15:46:25 +08:00
    接口参数签名还是要的, 一定程度上防止被拦截之后篡改数据
    gerefoxing
        9
    gerefoxing  
       2024-03-28 17:31:41 +08:00
    accessToken&验签,可以看下各大平台接口对接文档参考下
    l4ever
        10
    l4ever  
       2024-03-28 17:51:48 +08:00
    @sparklee 有 https 了没必要.
    l4ever
        11
    l4ever  
       2024-03-28 17:52:14 +08:00
    看看企业微信的 api, 学习一下.
    flyqie
        12
    flyqie  
       2024-03-28 22:26:37 +08:00
    @NessajCN #1

    APPID 机制跟 接口签名 他俩实际做的时候貌似是合到一起的吧?

    我们是这么做的。

    header 里传 appid 和 sign: md5(请求体+secret)
    crazyweeds
        13
    crazyweeds  
       2024-03-29 08:46:44 +08:00
    appid+appid 级别的限流,其他不是很有必要。
    其他如果你觉得必要,那么你做好 SDK ,而不是微信一样,就提供文档。因为你无法做到微信那种,只管拉 X ,不管擦。出现问题,你还得配合调试,徒增烦恼。
    当然,可以刷 KPI ,毕竟现在老板不是喜欢员工看上去很忙么,满足老板的愿望。效率低?那不是你管的事情。
    layxy
        14
    layxy  
       2024-03-29 09:09:44 +08:00
    你说的都需要,ip 白名单可以限制调用访,appid 机制可以记录调用方是谁,接口签名可以验证数据是否伪造(最好加时间戳),限流可以控制调用,https 协议是必须得,否则你需要自己提供报文加解密
    aino
        15
    aino  
       2024-03-29 09:24:09 +08:00
    ip 白名单是最有用的
    bianhui
        16
    bianhui  
       2024-03-29 13:22:42 +08:00
    我觉得规范和文档最重要,你说的那些安全啥的,外面包一层权限验证关网就都搞定了。
    jipfqf
        17
    jipfqf  
       2024-03-29 14:49:13 +08:00
    分页参数尽可能指定范围,而不是接口想查 1000 条就返回 1000 条,爬无数 api 得来的经验
    dandankele
        18
    dandankele  
       311 天前
    我也有一个问题。。哪位大神顺便帮我回答一下。。。

    就是对外暴露的开放接口,我是直接在业务侧的应用中开发这些接口并暴露出去?还是把业务侧后方的更细粒度的服务接口暴露出去作为开放接口?

    我目前感觉应该在业务侧提供。。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5206 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 05:48 · PVG 13:48 · LAX 22:48 · JFK 01:48
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.