A los programadores les encantan las buenas historias, así que espero que el viaje de cinco años hacia una API compuesta usando GraphQL en un entorno de producción (en el pico de 110 solicitudes por segundo con una latencia de 100 ms) sea interesante.
[Si se da prisa, prosiga a continuación a las lecciones y eche un vistazo a graphql-schema-registration de código abierto ]
Tarea
, Pipedrive ( 2020 10 ), REST API . /users/self, , , 30 . PHP , . , .
, .
, graphql.
3-4 , , , - - elixir graphql. MySQL Pipedrive /graphql.
, , - CRUD, .
2019, , GraphQL stitching graphql-compose REST API. , , - graphql .
:
. dataloader', N+1 . - .
. , , . - - , - .
, POST gateway .
graphql - . , Protobuf Thrift, GRPC, OData.
, graphql (insights, teams) , ( User). typescript + relay , .
.
, - API ? ? Gateway - ? .
, - , - . Confluent’s schema-registry Atlassian’s Braid, , Java, .
3 :
:
schema-registry , , (swagger, typescript, graphql, avro, proto). .
Gateway schema-registry . frontend autocomplete .
, graphql , , .
/users/self - ? (!). - , .
( 2020), - 13% 25% (- ), UI Datadog.
, - REST.
- ( 600+ ), - . IOS- Android- graphql .
60 , -
Apollo studio . gateway.
, - , - . opensource - graphql-schema-registry.
graphql gateway . , gateway .
, gateway , - . Apollo studio - .
, ( -) . . Gateway schema-registry /schema/compose , .
schema-registry ,
REST Graphql API, , REST.
REST
REST graphql, openapi-to-graphql, .
- , , ? REST .
, REST API , .
REST API . , - deal.pipeline_id. graphql, ,
json-. , REST _, .
CQRS
Pipedrive TTL-.
, , . , . 3 .
- PHP-, nodejs ( monograph), memcached. -. , .
CQRS pattern. , 80% .
- . , - . - , identity. .
Identity , kafka, monograph . , ( 1 ), . , - .
APM - . Datadog .
, 30 memcached. . memcached 10, , 220. , - mcrouter. , 20 .
- , getMulti . resolver' , 5 debounce .
. graphql gateway . , .
28 30 , 500, .
graphql , /graphql . 3-5 , ( debounce FE )
, - (APM) tracing:true, .
700 300 . , ( performance.now()), .
graphql gateway Chrome DevTools, , .
, graphql . /graphql ( vendors.js) . , - - .
- graphql gql . bundle, fetch. , - - . server-side-rendering service workers .
graphql , . , , rate limit .
graphql-cost-analysis , , - , , ( , , CPU, ). gateway schema-registry. .
js/typescript . graphql .
koa-graphql apollo-server-koa GraphQLSchema . apollo/server :
buildFederatedSchema([{typeDefs, resolvers}])
, , gql , schema.graphql , , ASTNode ( parse / buildASTSchema)
canary
- .
, graphql 100 -"". 1000 , 1%, 10%, 30%, 50% .
company ID . , - , graphql . - graphql .
, , ( ), .
- graphql , - , , . - .
graphql API , API. OAuth ( ) .
schema-registry , gateway - , , , (persisted query), .
, go, - GRPC - , graphql , gateway. GRPC - , graphql msgpack?
En cuanto al mundo exterior, espero que Apollo con su proyecto Constellation acelere el procesamiento de una solicitud de Rust para que este impuesto sobre el rendimiento del 10% no esté presente y pueda federar servicios graphql sin cambios importantes en este último.
En general, ¡un gran momento para disfrutar del desarrollo donde hay mucha complejidad!