跳至正文
Wener Notes

API Awesome

约 5 分钟阅读
标签:资源精选

API/RPC 考虑因素

  • 灵活
    • 静态结构
    • 动态结构
    • 兼容性
  • 性能
    • 延时要求
    • 服务对服务
    • 服务对客户端
  • 序列化
    • 二进制
    • 文本 - JSON
  • 语言兼容
    • 需要支持什么语言
    • 自用只需考虑个别语言
    • 对外则需要考虑通用
  • 接口模式
    • 请求响应
    • 流式请求
    • 流式响应
  • 规范
    • 生成友好
    • 元数据信息完整
  • 场景
    • 自用 - 满足内部使用即可
    • 对外 - 采用现有标准规范
  • 生态
    • 可观察性
      • Metric
      • Trace
    • 网关
    • 中间件感知

API Gateway 考虑因素

  • 管理能力
    • 负责 增删改 Endpoint - vendor lockin
    • 使用现有配置 - 控制能力弱
  • 可观察性能力
    • Metric 集成
    • Trace 集成
    • 内置 - 网关采集、内置显示
    • 外部 - grafana、jeager、prometheus
  • 控制能力
    • Auth
    • Threshold
    • 注入自定义逻辑 - Hook
  • 协议感知能力
    • gRPC
    • HTTP
    • GraphQL
    • TCP、UDP
  • 平台集成能力
    • Kubernetes Service、Annotatation
    • Consul Service
    • ETCD、ZK
  • 实现模式
    • 无侵入 - 直接网络拦截
      • 网络层处理 - Cilium
    • 侵入 - 修改代码逻辑
      • 中间件 - 集成 metric、trace 等能力
      • SQL Trace
    • Sidecar - 按应用网络拦截
      • 获取基础 metric 信息、可能能实现 trace 能力
      • Agent 能代表应用身份
      • 通常还能实现 E2E 加密认证
  • 元数据存储方式
    • CRD
    • DB - PostgreSQL、MySQL - 需要额外维护、但方便排查使用
    • KV - ETCD、ZK

Design

规范

RPC

Note

  • rpc 和 serialization 主要的区别在于 服务 是否为第一公民
  • 除了 gRPC, jsonrpc 其他 rpc 实现基本都是语言相关的
    • 意味着 非第一方语言的支持相对较弱
  • gRPC 是支持最多语言的 RPC 协议
RPCbyLanguagesNotes
gRPCGoogle
ThriftFacebookJava
TwitchTVGo - PHP,Ruby
TwitterScalaApache-2.0
GoogleRust
国产
HSFAlibabaJava
DubboAlibabaJava
好未来技术Go
字节跳动Go
蚂蚁金服Java
腾讯C++,Java,NodeJS,PHP,WebBSD-3
百度C++,Java
微博Java
大众点评Java
Go
Go
MicroservicebyTech
LineJava
国产
哔哩哔哩Go,gRPC
Go
Go

JSON-RPC

Serialization


  • ASN.1 PER
  • Avro, CapnProto, Protobufs, Flatbuffers
  • Schema-ful, copying: Protobuf, Thrift, plenty more
  • Schema-ful, zero-copy: Cap'n'proto, Flatbuffers
  • Schema-less, copying: Json (binary and other variants included), XML
  • Schema-less, zero-copy: Flexbuffers
  • Avro is also another data serialization format. Schema-Ful,
  • Arrow would be schema-ful, zero-copy
  • CBOR - Concise Binary Object Representation
    • 与 JSON 混用

Data Gateway

OpenAPI

bash
npx -y openapi-typescript https://github.com/openai/openai-openapi/raw/master/openapi.yaml --output apis.d.ts

# @7nohe/openapi-react-query-codegen
# ==================================
# https://openapi-react-query-codegen.vercel.app/guides/introduction
# default to @hey-api/client-fetch
npm add @hey-api/client-fetch
npx --package @7nohe/openapi-react-query-codegen openapi-rq -i ./petstore.yaml
依赖包

API Gateway

API 生命周期管理

Doc

API IDE/Client

SOAP

Produce OpenAPI

参考

Service Discovery

  • Redis

关联信息

反向链接、本文链接的其他页面和外部资料。

站内链接

  • Connect
    笔记 · connect

    https://connect.build/ · gRPC 竞品 · 兼容 gRPC, gRPC-Web 协议 · 支持 bi-streaming - 使用 gRPC 协议 · 支持 JSON- 和 binary-encoded Protobuf

  • hoppscotch
    笔记 · Hoppscotch

    hoppscotch/hoppscotch 是什么? · MIT, Typescript+Vue · 类似 Postman,但是是开源产品 · 早期叫 Postwoman · 支持 HTTP, REST, WebSocket, SSE, Socket.IO, MQTT, GraphQL

  • nacos
    笔记 · Nacos

    非 Java 的 SDK 质量很低 · 不一定支持 auth,因此可能直接用不了 · Java SDK · grpc 不支持 https - · GrpcClient 写死 usePlaintext · #7842 · v2 无 http client

  • Slate
    笔记 · slatedocs/slate

    slatedocs/slate · widdershins · OpenAPI -> slate markdown

  • twirp
    笔记 · twitchtv/twirp

    twitchtv/twirp · unary RPC · 支持 JSON 协议 · 使用 GRPC 定义,走 HTTP 协议 · 开发不活跃 · 官方支持语言: PHP, Ruby, Go · 参考 · SpecV7 · 不支持 streaming #3

参考资料

GitHub76 条
Hacker News1 条
依赖包1 条
标准文档1 条
  • RFC 9110datatracker.ietf.org/doc/html/rfc9110
    RFC

    IETF Request for Comments standard document.

其他外链32 条
最近更新commit 4b6e1d9编辑