Public API Choices
In summary, to choose a tool for the public API, API gateway, or BFF (Backend For Frontend) gateway, I prefer GraphQL for its features like tailing results, batching nested queries, performance tracing, and explicit caching.
JSON RPC | GraphQL | REST | gRPC | |
---|---|---|---|---|
Usecases | Etherum | Github V2, Airbnb, Facebook BFF / API Gateway | Swagger | High performance, Google, internal endpoints |
Single Endpoint | ✅ | ✅ | ❌ | ✅ |
Type System | ✅ as weak as JSON No uint64 | ✅ No uint64 | ✅ w/ Swagger No uint64 | ✅ has uint64 |
Tailored Results | ❌ | ✅ | ❌ | ❌ |
Batch nested queries | ❌ | ✅ | ❌ | ❌ |
Versioning | ❌ | Schema Extension | Yes, w/ v1/v2 route s | Field Numbers in protobuf |
Error Handling | Structured | Structured | HTTP Status Code | Structured |
Cross-platform | ✅ | ✅ | ✅ | ✅ |
Playground UI | ❌ | GraphQL Bin | Swagger | ❌ |
Performance tracing | ? | Apollo plugin | ? | ? |
caching | No or HTTP cache control | Apollo plugin | HTTP cache control | Native support not yet. but still yes w/ HTTP cache control |
Problem | Lack of community support and toolchainBarrister IDL | 42.51 kb client-side bundle size | Unstructured with multiple endpoints. awful portability. | Grpc-web dev in progress140kb JS bundle. Compatibility issues: not all places support HTTP2 and grpc dependencies |