ºÝºÝߣ

ºÝºÝߣShare a Scribd company logo
Apollo GraphQL Federation
Apollo GraphQL
Federation
Miniq #23
27 §¶§Ö§Ó§â§Ñ§Ý§ñ 2020
§¯§Ö§Þ§ß§à§Ô§à §à §ã§Ö§Ò§Ö:
§±§Ý§ñ§ã§à§Ó §£§Ý§Ñ§Õ§Ú§ã§Ý§Ñ§Ó
- §²§Ñ§Ù§â§Ñ§Ò§à§ä§é§Ú§Ü §Ó §Ü§à§Þ§á§Ñ§ß§Ú§Ú EPAM
- 2+ §Ý§Ö§ä §â§Ñ§Ù§â§Ñ§Ò§à§ä§Ü§Ú §ß§Ñ Java
- §±§Ú§ê§å §ß§Ñ GraphQL
§±§Ý§Ñ§ß §ß§Ñ§ê§Ú§ç §Õ§Ö§Û§ã§ä§Ó§Ú§Û §ß§Ñ §ã§Ö§Ô§à§Õ§ß§ñ:
§±§Ý§Ñ§ß §ß§Ñ§ê§Ú§ç §Õ§Ö§Û§ã§ä§Ó§Ú§Û §ß§Ñ §ã§Ö§Ô§à§Õ§ß§ñ:
Houston, we
don¡¯t have
problems
I¡¯m a tiger,
Rrrrrr
Your GraphQL
federation, Sir
++
§±§Ý§Ñ§ß §ß§Ñ§ê§Ú§ç §Õ§Ö§Û§ã§ä§Ó§Ú§Û §ß§Ñ §ã§Ö§Ô§à§Õ§ß§ñ:
Apollo
Gateway
+
§£§°§±§²§°§³
GraphQL
INTRODUCTION
§¹§ä§à §ä§Ñ§Ü§à§Ö GraphQL?
?
?
?
?
§°§ã§ß§à§Ó§ß§í§Ö §Ù§Ñ§Õ§Ñ§é§Ú GraphQL
§µ§ß§Ú§æ§Ú§è§Ú§â§à§Ó§Ñ§ä§î §á§â§Ö§Õ§à§ã§ä§Ñ§Ó§Ý§ñ§Ö§Þ§í§Ö §Õ§Ñ§ß§ß§í§Ö
§¬§Ý§Ú§Ö§ß§ä §ã§Ñ§Þ §â§Ö§ê§Ñ§Ö§ä, §é§ä§à §à§ß §ç§à§é§Ö§ä §Ó§Ú§Õ§Ö§ä§î §Ó §à§ä§Ó§Ö§ä§Ö
§¦§Õ§Ú§ß§Ñ§ñ §ä§à§é§Ü§Ñ §Ó§ç§à§Õ§Ñ
§³§à§Ü§â§Ñ§ä§Ú§ä§î §Ü§à§Ý§Ú§é§Ö§ã§ä§Ó§à §Ù§Ñ§á§â§à§ã§à§Ó §ß§Ñ §ã§Ö§â§Ó§Ö§â
§¬§°§¤§¥§¡
§ª§³§±§°§­§¾§©§°§£§¡§´§¾?
Facade pattern
System
Client side
UI
Server side
GraphQL
RESTful service 1 RESTful service 2
Database
Composite pattern
System
Client side
UI
Server side
GraphQL
RESTful serviceSQL RPC
§³ §¹§¦§¤§° §¯§¡§¹§¡§´§¾?
GraphQL Schema language
type QueryType {
get(params: Int!): String
}
schema {
query: QueryType
mutation: MutationType
}
type MutationType {
put(param: ID!): ID
}
scalar Date
type Types {
id: ID!
int: Int
float: Float
boolean: Boolean
string: String
array1: [String!]
array2: [String]!
scalarDate: Date
func(param: String): Int
}
?
GraphQL Schema language
interface BasicType {
id: ID!
int: Int
}
type Implementation implements BasicType {
id: ID!
int: Int
string: String
someFunction(param: String!): Int
}
GraphQL Schema language
GraphQL Schema language
type Obj {
id: ID!
fieldOne: Int
fieldTwo: String
}
input InputType {
fieldOne: Int
fieldTwo: String
}
type Mutation {
putObj(inputType: InputType): Obj
}
GraphQL Schema language
type TypeOne {
fieldOne: String
}
type TypeTwo {
fieldTwo: Int
}
union UnionType = TypeOne | TypeTwo
type Query {
search(params: Int!): UnionType
}
GraphQL Schema language
enum Enumeration {
A
B
C
}
type TypeOne {
id: ID!
field: Enumeration!
}
type Query {
request(param: Enumeration!): String
}
§¹§´§° §¥§¡§­§¾§º§¦?
GraphQL REST Endpoint
{
"operationName": "{opName}",
"query": "{queryString}",
"variables": {
"variable": "variable"
}
}
Request body
Method: POST
Path: /graphql
GraphQL Function Resolvers
type Response {
id: ID!
method: String!
statusCode: Int!
message: String!
}
type Query {
getResponse(id: ID!): Response
getByMethod(method: String!): [Response]
}
GraphQL Function Resolvers
type Response {
id: ID!
method: String!
statusCode: Int!
message: String!
}
public class Response {
private Long id;
private String method;
private Integer statusCode;
private String message;
¡­
}
GraphQL Function Resolvers
getResponse(id: ID!): Response
public class QueryResolver {
¡­
public DataFetcher<Response> getResponse() {
return dataFetchingEnvironment -> {
String id = dataFetchingEnvironment.getArgument("id");
return responseService.get(id);
};
}
GraphQL Schema provider
public class SchemaProvider {
private GraphQL graphQL;
public GraphQL getGraphql() {
return graphQL;
}
private RuntimeWiring buildWiring() {
return RuntimeWiring.newRuntimeWiring()
.type(newTypeWiring("Query")
.dataFetcher("getResponse",
queryResolver.getResponse()))
.build();
}
¡­
}
GraphQL Schema provider
public class SchemaProvider {
private GraphQL graphQL;
public GraphQL getGraphql() {
return graphQL;
}
private void initGraphQLScheme() throws IOException {
Resource sdl = new ClassPathResource("schema.graphqls");
GraphQLSchema schema =
Federation.transform(sdl.getFile(), buildWiring())
.fetchEntities(dataFetchingEnvironment -> Collections.emptyList())
.resolveEntityType(typeResolutionEnvironment -> null)
.build();
graphQL = GraphQL.newGraphQL(schema).build();
}
¡­
}
§¬§¡§¬ §¥§¦§­§¡§´§¾
§©§¡§±§²§°§³§½?
GraphQL Query language
type Response {
id: ID!
method: String!
statusCode: Int!
message: String!
}
type Query {
getResponse(id: ID!): Response
getByMethod(method: String!): [Response]
}
GraphQL Query language
{
"errors": [],
"data": {
"getType": {
"id": 12,
"method": "POST"
}
}
}
Response body:
query GetResponse($id: ID!){
getResponse(id: $id) {
id
method
}
}
query string:
variables:
{
"id": 12
}
Application
Application layers (Java)
GraphQL
Services
Repositories REST Client
REST Endpoint
Application
Services
Repositories REST Client
REST Endpoints
GraphQL RESTful
GraphQL Resolvers
Apollo
GraphQL Federation
§£§°§±§²§°§³
§±§â§à§Ò§Ý§Ö§Þ§Ñ
1 N N 1
User Review Film
§±§â§à§Ò§Ý§Ö§Þ§Ñ
§±§â§à§Ò§Ý§Ö§Þ§í §ã§Ú§ã§ä§Ö§Þ§í
§±§â§à§Ò§Ý§Ö§Þ§Ñ N + 1 §Ù§Ñ§á§â§à§ã§à§Ó
§±§â§Ú§Þ§Ö§â: §£§í§Ó§Ö§ã§ä§Ú §ã§á§Ú§ã§à§Ü §æ§Ú§Ý§î§Þ§à§Ó §ã 1 §à§ä§Ù§í§Ó§à§Þ
§±§â§à§Ú§Ù§Ó§à§Õ§Ú§ä§Ö§Ý§î§ß§à§ã§ä§î §ã§Ú§ã§ä§Ö§Þ§í
§±§â§à§á§å§ã§Ü§ß§Ñ§ñ §ã§á§à§ã§à§Ò§ß§à§ã§ä§î §ã§Ö§ä§Ú
§¢§à§Ý§î§ê§à§Ö §Ü§à§Ý§Ú§é§Ö§ã§ä§Ó§à §Ù§Ñ§á§â§à§ã§à§Ó §ß§Ñ GraphQL §ã§Ö§â§Ó§Ú§ã§í
§¬§Ý§Ú§Ö§ß§ä §å§á§â§Ñ§Ó§Ý§ñ§Ö§ä §á§â§à§è§Ö§ã§ã§à§Þ §ã§Ò§à§â§Ñ §Õ§Ñ§ß§ß§í§ç
§´§â§Ö§Ò§å§Ö§ä§ã§ñ §Õ§à§á. §Ý§à§Ô§Ú§Ü§Ñ §Ó GraphQL §ã§Ö§â§Ó§Ú§ã§Ñ§ç
Apollo GraphQL Federation
Apollo GraphQL Federation
§¯§Ö§Þ§ß§à§Ô§à §ä§Ö§â§Þ§Ú§ß§à§Ó
Apollo GraphQL Federation ¨C ?§Þ§Ú§Ü§â§à§ã§Ö§â§Ó§Ú§ã§ß§Ñ§ñ? §ã§Ú§ã§ä§Ö§Þ§Ñ,
§ã§à§ã§ä§à§ñ§ë§Ñ§ñ §Ú§Ù §ß§Ö§ã§Ü§à§Ý§î§Ü§Ú§ç GraphQL §ã§Ö§â§Ó§Ú§ã§à§Ó §Ú Apollo Gateway
Apollo Gateway ¨C backend-for-frontend §á§â§Ú§Ý§à§Ø§Ö§ß§Ú§Ö, §Ü§à§ä§à§â§à§Ö
§Ù§Ñ§ß§Ú§Þ§Ñ§Ö§ä§ã§ñ §à§Ò§â§Ñ§Ò§à§ä§Ü§à§Û GraphQL §Ù§Ñ§á§â§à§ã§à§Ó §Ú §á§Ö§â§Ö§Õ§Ñ§é§Ö§Û §Ú§ç §ß§Ñ
§ã§à§à§ä§Ó§Ö§ä§ã§ä§Ó§å§ð§ë§Ú§Ö GraphQL §ã§Ö§â§Ó§Ú§ã§í §Ó §æ§Ö§Õ§Ö§â§Ñ§è§Ú§Ú.
Apollo Federated Schema ¨C §°§Ò§ì§Ö§Õ§Ú§ß§Ö§ß§ß§í§Ö GraphQL §ã§ç§Ö§Þ§í §ã§à
§Ó§ã§Ö§ç §ã§Ö§â§Ó§Ú§ã§à§Ó §æ§Ö§Õ§Ö§â§Ñ§è§Ú§Ú §Ó §à§Õ§ß§å §à§Ò§ë§å§ð. §¥§Ñ§ß§ß§Ñ§ñ §ã§ç§Ö§Þ§Ñ §ß§å§Ø§ß§Ñ
Apollo Gateway §Õ§Ý§ñ §à§Ò§â§Ñ§Ò§à§ä§Ü§Ú §Ù§Ñ§á§â§à§ã§à§Ó.
Apollo
Federated Schema
Apollo Federated Schema
type Film @key(fields: "id") @extends {
id: ID! @external
reviews: [Review] @requires(fields: "id")
}
type Review @key(fields: "id") {
id: ID!
text: String!
user: User! @provides(fields: "name")
}
type User @key(fields: "id") {
id: ID! @external
name: String @external
reviews: [Review] @requires(fields: "id")
}
Review GraphQL serviceUser GraphQL service
type User {
id: ID!
name: String
rating: Float
}
type Film@key(fields: "id"){
id: ID!
name: name
}
type Query {
getFilm(
filmName: String): [Film]
}
Film GraphQL service
Apollo Federated Schema
type Film @key(fields: "id") @extends {
id: ID! @external
reviews: [Review] @requires(fields: "id")
}
type Review @key(fields: "id") {
id: ID!
text: String!
user: User! @provides(fields: "name")
}
type User @key(fields: "id") {
id: ID! @external
name: String @external
reviews: [Review] @requires(fields: "id")
}
Review GraphQL serviceUser GraphQL service
type User {
id: ID!
name: String
rating: Float
}
type Film@key(fields: "id"){
id: ID!
name: name
}
type Query {
getFilm(
filmName: String): [Film]
}
Film GraphQL service
@key(fields: "id")
@key ¨C §Õ§Ú§â§Ö§Ü§ä§Ú§Ó§Ñ, §à§Ò§à§Ù§ß§Ñ§é§Ñ§ð§ë§Ñ§ñ §Ü§Ý§ð§é/§Ú§Õ§Ö§ß§ä§Ú§æ§Ú§Ü§Ñ§ä§à§â GraphQL §ä§Ú§á§Ñ
(§Þ§à§Ø§Ö§ä §Ò§í§ä§î §Ó§Ý§à§Ø§Ö§ß§ß§í§Þ §Ú §ã§à§Ó§Þ§Ö§ë§Ö§ß§ß§í§Þ).
Apollo Federated Schema
type Film @key(fields: "id") @extends {
id: ID! @external
reviews: [Review] @requires(fields: "id")
}
type Review @key(fields: "id") {
id: ID!
text: String!
user: User! @provides(fields: "name")
}
type User @key(fields: "id") {
id: ID! @external
name: String @external
reviews: [Review] @requires(fields: "id")
}
Review GraphQL serviceUser GraphQL service
type User {
id: ID!
name: String
rating: Float
}
type Film@key(fields: "id"){
id: ID!
name: name
}
type Query {
getFilm(
filmName: String): [Film]
}
Film GraphQL service
@extends
@extends/extend ¨C §Õ§Ú§â§Ö§Ü§ä§Ú§â§Ñ/§Ü§Ý§ð§é§Ö§Ó§à§Ö §ã§Ý§à§Ó§à, §Ü§à§ä§à§â§Ñ§ñ §à§Ò§à§Ù§ß§Ñ§é§Ñ§Ö§ä,
§é§ä§à §Õ§Ñ§ß§ß§í§Û §ã§Ö§â§Ó§Ú§ã §â§Ñ§ã§ê§Ú§â§ñ§Ö§ä §å§Ü§Ñ§Ù§Ñ§ß§ß§í§Û §ä§Ú§á §ã§Ó§à§Ú§Þ §æ§å§ß§Ü§è§Ú§à§ß§Ñ§Ý§à§Þ. §¯§Ö
§Ú§Þ§Ö§Ö§ä §ã§Ó§ñ§Ù§Ú §ã §Ü§Ý§ð§é§Ö§Ó§í§Þ §ã§Ý§à§Ó§à§Þ ?implements?.
type Film @key(fields: "id") @extends {
id: ID! @external
reviews: [Review] @requires(fields: "id")
}
type Review @key(fields: "id") {
id: ID!
text: String!
user: User! @provides(fields: "name")
}
type User @key(fields: "id") {
id: ID! @external
name: String @external
reviews: [Review] @requires(fields: "id")
}
Review GraphQL serviceUser GraphQL service
type User {
id: ID!
name: String
rating: Float
}
type Film@key(fields: "id"){
id: ID!
name: name
}
type Query {
getFilm(
filmName: String): [Film]
}
Film GraphQL service
@external
@external ¨C §Õ§Ú§â§Ö§Ü§ä§Ú§Ó§Ñ, §å§Ü§Ñ§Ù§í§Ó§Ñ§ð§ë§Ñ§ñ §á§à§Ý§ñ, §Ü§à§ä§à§â§í§Ö §á§â§Ö§Õ§à§ã§ä§Ñ§Ó§Ý§ñ§ð§ä§ã§ñ
§Õ§â§å§Ô§Ú§Þ §ã§Ö§â§Ó§Ú§ã§à§Þ §Ó §æ§Ö§Õ§Ö§â§Ñ§è§Ú§Ú.
Apollo Federated Schema
type Film @key(fields: "id") @extends {
id: ID! @external
reviews: [Review] @requires(fields: "id")
}
type Review @key(fields: "id") {
id: ID!
text: String!
user: User! @provides(fields: "name")
}
type User @key(fields: "id") {
id: ID! @external
name: String @external
reviews: [Review] @requires(fields: "id")
}
Review GraphQL serviceUser GraphQL service
type User {
id: ID!
name: String
rating: Float
}
type Film@key(fields: "id"){
id: ID!
name: name
}
type Query {
getFilm(
filmName: String): [Film]
}
Film GraphQL service
@requires(fields: "id")
@requires ¨C §à§Ò§à§Ù§ß§Ñ§é§Ñ§Ö§Þ §à§Ò§ñ§Ù§Ñ§ä§Ö§Ý§î§ß§í§Ö @external §á§à§Ý§ñ §ä§Ú§á§Ñ, §Ü§à§ä§à§â§í§Ö
§ß§Ö§à§Ò§ç§à§Õ§Ú§Þ§à §á§Ö§â§Ö§Õ§Ñ§ä§î §Ó §Ù§Ñ§á§â§à§ã§Ö §Õ§Ý§ñ §Ó§í§á§à§Ý§ß§Ö§ß§Ú§ñ §æ§å§ß§Ü§è§Ú§Ú.
Apollo Federated Schema
type Film @key(fields: "id") @extends {
id: ID! @external
reviews: [Review] @requires(fields: "id")
}
type Review @key(fields: "id") {
id: ID!
text: String!
user: User! @provides(fields: "name")
}
type User @key(fields: "id") {
id: ID! @external
name: String @external
reviews: [Review] @requires(fields: "id")
}
Review GraphQL serviceUser GraphQL service
type User {
id: ID!
name: String
rating: Float
}
type Film@key(fields: "id"){
id: ID!
name: name
}
type Query {
getFilm(
filmName: String): [Film]
}
Film GraphQL service
@provides(fields: "name")
@provides ¨C §Õ§Ú§â§Ö§Ü§ä§Ú§Ó§Ñ, §Ü§à§ä§à§â§Ñ§ñ §å§Ü§Ñ§Ù§í§Ó§Ñ§Ö§ä §ß§Ñ§Ò§à§â @external §á§à§Ý§Ö§Û,
§Ü§à§ä§à§â§í§Ö §ã§Ö§â§Ó§Ú§ã §Þ§à§Ø§Ö§ä §á§â§Ö§Õ§à§ã§ä§Ñ§Ó§Ú§ä§î §Ó§ß§å§ä§â§Ú §ã§Ö§Ò§ñ.
Apollo Federated Schema
Apollo
Gateway
Apollo Gateway
Apollo Gateway Features
Easy to create and deploy
§±§à§Õ§Õ§Ö§â§Ø§Ü§Ñ Persisted queries §Ò§Ö§Ù §Õ§à§á. §ß§Ñ§ã§ä§â§à§Ö§Ü
§±§à §ã§â§Ö§Õ§ã§ä§Ó§à§Þ §Ú§ã§á§à§Ý§î§Ù§à§Ó§Ñ§ß§Ú§ñ @cacheControl §Õ§Ú§â§Ö§Ü§ä§Ú§Ó§í
§±§à§Õ§Õ§Ö§â§Ø§Ü§Ñ §Ü§ï§ê§Ú§â§à§Ó§Ñ§ß§Ú§ñ §ä§Ú§á§à§Ó §Ú §á§à§Ý§Ö§Û
AWS API Gateway ¨C AWS Lambda ( )¨C GraphQL Service
§£§à§Ù§Þ§à§Ø§ß§à§ã§ä§î §Ú§ã§á§à§Ý§î§Ù§à§Ó§Ñ§ä§î §Ü§Ñ§Ü Serverless app.
§£§à§Ù§Þ§à§Ø§ß§à§ã§ä§î §Ú§ß§ä§Ö§Ô§â§Ñ§è§Ú§Ú §ã CDN §ã§Ö§â§Ó§Ú§ã§Ñ§Þ§Ú §Õ§Ý§ñ §Ü§ï§ê§Ñ
§¡§Ó§ä§à§Þ§Ñ§ä§Ú§é§Ö§ã§Ü§Ú §â§Ñ§ã§á§â§Ö§Õ§Ö§Ý§ñ§Ö§ä §Ù§Ñ§á§â§à§ã§í §á§à §ã§Ö§â§Ó§Ú§ã§Ñ§Þ
GraphQL Persisted Queries
Apollo
Gateway
GraphQL
Service
Apollo Federation CONs
Apollo Gateway §á§à§Õ§Õ§Ö§â§Ø§Ú§Ó§Ñ§Ö§ä §ä§à§Ý§î§Ü§à NodeJS
§´§â§Ö§Ò§å§Ö§ä §Ù§ß§Ñ§ß§Ú§Ö §Ú §á§à§ß§Ú§Þ§Ñ§ß§Ú§Ö §Ó§ã§Ö§Û GraphQL §ã§ç§Ö§Þ§í
§¢§à§Ý§î§ê§à§Ö §Ü§à§Ý§Ú§é§Ö§ã§ä§Ó§à ¡°issues¡± §ß§Ñ GitHub (>200)
§ª§ß§ä§Ö§â§Ö§ã§ß§í§Ö §ã§ã§í§Ý§Ü§Ú
GraphQL tutorial for Java:
https://www.graphql-java.com/documentation/v11/schema/
How to migrate to GraphQL from REST API:
https://blog.apimatic.io/moving-to-graphql-from-soap-or-rest-2383f7dc6523
GraphQL:
https://graphql.org/
Apollo GraphQL Federation example and GraphQL fast run:
https://github.com/vladislav1995?tab=repositories
Solve problem N+1 requests via DataLoaders:
https://github.com/graphql-java/java-dataloader#examples
§ª§ß§ä§Ö§â§Ö§ã§ß§í§Ö §ã§ã§í§Ý§Ü§Ú
Apollo Gateway Caching:
https://www.apollographql.com/docs/apollo-server/performance/caching/
Apollo GraphQL Federation:
https://www.apollographql.com/docs/apollo-server/federation/core-
concepts/
Apollo Gateway request processing:
https://www.apollographql.com/docs/apollo-
server/federation/implementing/#customizing-outgoing-responses
How to deploy Apollo Gateway on AWS:
https://www.apollographql.com/docs/apollo-server/deployment/lambda/
§³§±§¡§³§ª§¢§°
§©§¡
§£§¯§ª§®§¡§¯§ª§¦
§£§°§±§²§°§³§½
§ª
§°§´§£§¦§´§½
Ad

Recommended

??????????? PSS ?? ?? ? ??? ??? ?? 'PSSD warm up exercises' - ??? PSSD lab. ??
??????????? PSS ?? ?? ? ??? ??? ?? 'PSSD warm up exercises' - ??? PSSD lab. ??
???????? ????????PD
?
JSON in Redis - When to use RedisJSON by Jay Won of Coupang - Redis Day Seatt...
JSON in Redis - When to use RedisJSON by Jay Won of Coupang - Redis Day Seatt...
Redis Labs
?
Graph Features in Spark 3.0: Integrating Graph Querying and Algorithms in Spa...
Graph Features in Spark 3.0: Integrating Graph Querying and Algorithms in Spa...
Databricks
?
¥Ç©`¥¿·ÖÎö¤Ë±ØÒª¤Ê¥¹¥­¥ë¤ò¤Ä¤±¤ë¤¿¤á¤Î¥Ä©`¥ë¡«Jupyter notebook¡¢rßBЯ¡¢™CеѧÁ•¤«¤éspark¤Þ¤Ç¡«
¥Ç©`¥¿·ÖÎö¤Ë±ØÒª¤Ê¥¹¥­¥ë¤ò¤Ä¤±¤ë¤¿¤á¤Î¥Ä©`¥ë¡«Jupyter notebook¡¢rßBЯ¡¢™CеѧÁ•¤«¤éspark¤Þ¤Ç¡«
The Japan DataScientist Society
?
DevOps Taiwan Monitor Tools ´óyôY - Prometheus
DevOps Taiwan Monitor Tools ´óyôY - Prometheus
Adam Chen
?
Yang detail introduction
Yang detail introduction
Gyewan An
?
Apache spark its place within a big data stack
Apache spark its place within a big data stack
Junjun Olympia
?
???????? ???? - ??? ??
???????? ???? - ??? ??
The Innovation Lab
?
Training Week: Introduction to Neo4j
Training Week: Introduction to Neo4j
Neo4j
?
Rethinking Cloud Proxies
Rethinking Cloud Proxies
Mikey Cohen - Hiring Amazing Engineers
?
Kong API Gateway.pdf
Kong API Gateway.pdf
AvinashUpadhyaya3
?
Kong
Kong
Troublemaker Khunpech
?
Knowledge graphs for knowing more and knowing for sure
Knowledge graphs for knowing more and knowing for sure
Steffen Staab
?
IPëŠÔ’½»“Q™C¥½¥Õ¥È Asterisk ¤Ë¤Ä¤¤¤Æ
IPëŠÔ’½»“Q™C¥½¥Õ¥È Asterisk ¤Ë¤Ä¤¤¤Æ
Retrieva inc.
?
MLOps - Build pipelines with Tensor Flow Extended & Kubeflow
MLOps - Build pipelines with Tensor Flow Extended & Kubeflow
Jan Kirenz
?
Kubernetes ¤ÇŒg¼ù¤¹¤ë¥¯¥é¥¦¥É¥Í¥¤¥Æ¥£¥Ö DevOps "±OÒ•¤È¥ª¥Ö¥¶©`¥Ð¥Ó¥ê¥Æ¥£"¾Ž / Cloud Native DevOps with K...
Kubernetes ¤ÇŒg¼ù¤¹¤ë¥¯¥é¥¦¥É¥Í¥¤¥Æ¥£¥Ö DevOps "±OÒ•¤È¥ª¥Ö¥¶©`¥Ð¥Ó¥ê¥Æ¥£"¾Ž / Cloud Native DevOps with K...
Preferred Networks
?
Rego Deep Dive
Rego Deep Dive
Torin Sandall
?
´àÈõÐÔÊÂÀý¤Ëѧ¤Ö¥»¥­¥å¥¢¥³©`¥Ç¥£¥ó¥°¡¸SSL/TLSÔ^Ã÷•ø—ÊÔ^¡¹¾Ž (JavaDayTokyo2015)
´àÈõÐÔÊÂÀý¤Ëѧ¤Ö¥»¥­¥å¥¢¥³©`¥Ç¥£¥ó¥°¡¸SSL/TLSÔ^Ã÷•ø—ÊÔ^¡¹¾Ž (JavaDayTokyo2015)
JPCERT Coordination Center
?
±·´¡µþ³§³ó´Ç·É±¨¸æ£º¥Þ¥ë¥Á°ä¶Ù±·¤È×îÐÂ¥¹¥È¥ê©`¥ß¥ó¥°¥×¥í¥È¥³¥ë
±·´¡µþ³§³ó´Ç·É±¨¸æ£º¥Þ¥ë¥Á°ä¶Ù±·¤È×îÐÂ¥¹¥È¥ê©`¥ß¥ó¥°¥×¥í¥È¥³¥ë
Tomohiro Matsuzawa
?
Introduction to GraphQL (or How I Learned to Stop Worrying about REST APIs)
Introduction to GraphQL (or How I Learned to Stop Worrying about REST APIs)
Hafiz Ismail
?
Confluent Workshop Series: ksqlDB? ???? ? ??
Confluent Workshop Series: ksqlDB? ???? ? ??
confluent
?
Anand Bagmar - Behavior Driven Testing (BDT) in Agile
Anand Bagmar - Behavior Driven Testing (BDT) in Agile
Anand Bagmar
?
????? ??
????? ??
keunbong kwak
?
´ÎÊÀ´úWeb¥³¥ó¥Æ¥Ê Undertow¤Ë¤Ä¤¤¤Æ
´ÎÊÀ´úWeb¥³¥ó¥Æ¥Ê Undertow¤Ë¤Ä¤¤¤Æ
Yoshimasa Tanabe
?
HDFS User Reference
HDFS User Reference
Biju Nair
?
Machine configoperator¤Î¤Á¤ç¤Ã¤È¥¤¥¤¤«¤â¤·¤ì¤Ê¤¤Ô’
Machine configoperator¤Î¤Á¤ç¤Ã¤È¥¤¥¤¤«¤â¤·¤ì¤Ê¤¤Ô’
Toshihiro Araki
?
Full Stack Graph in the Cloud
Full Stack Graph in the Cloud
Neo4j
?
Graph protocol for accessing information about blockchains and d apps
Graph protocol for accessing information about blockchains and d apps
Gene Leybzon
?
GraphQL API: Patterns | §¡§ß§Õ§â§Ö§Û §¹§Ú§Ø | Zlit Tech
GraphQL API: Patterns | §¡§ß§Õ§â§Ö§Û §¹§Ú§Ø | Zlit Tech
Zlit
?
GraphQL §Õ§Ý§ñ FrontEnd §â§Ñ§Ù§â§Ñ§Ò§à§ä§é§Ú§Ü§Ñ
GraphQL §Õ§Ý§ñ FrontEnd §â§Ñ§Ù§â§Ñ§Ò§à§ä§é§Ú§Ü§Ñ
Artjoker
?

More Related Content

What's hot (20)

Training Week: Introduction to Neo4j
Training Week: Introduction to Neo4j
Neo4j
?
Rethinking Cloud Proxies
Rethinking Cloud Proxies
Mikey Cohen - Hiring Amazing Engineers
?
Kong API Gateway.pdf
Kong API Gateway.pdf
AvinashUpadhyaya3
?
Kong
Kong
Troublemaker Khunpech
?
Knowledge graphs for knowing more and knowing for sure
Knowledge graphs for knowing more and knowing for sure
Steffen Staab
?
IPëŠÔ’½»“Q™C¥½¥Õ¥È Asterisk ¤Ë¤Ä¤¤¤Æ
IPëŠÔ’½»“Q™C¥½¥Õ¥È Asterisk ¤Ë¤Ä¤¤¤Æ
Retrieva inc.
?
MLOps - Build pipelines with Tensor Flow Extended & Kubeflow
MLOps - Build pipelines with Tensor Flow Extended & Kubeflow
Jan Kirenz
?
Kubernetes ¤ÇŒg¼ù¤¹¤ë¥¯¥é¥¦¥É¥Í¥¤¥Æ¥£¥Ö DevOps "±OÒ•¤È¥ª¥Ö¥¶©`¥Ð¥Ó¥ê¥Æ¥£"¾Ž / Cloud Native DevOps with K...
Kubernetes ¤ÇŒg¼ù¤¹¤ë¥¯¥é¥¦¥É¥Í¥¤¥Æ¥£¥Ö DevOps "±OÒ•¤È¥ª¥Ö¥¶©`¥Ð¥Ó¥ê¥Æ¥£"¾Ž / Cloud Native DevOps with K...
Preferred Networks
?
Rego Deep Dive
Rego Deep Dive
Torin Sandall
?
´àÈõÐÔÊÂÀý¤Ëѧ¤Ö¥»¥­¥å¥¢¥³©`¥Ç¥£¥ó¥°¡¸SSL/TLSÔ^Ã÷•ø—ÊÔ^¡¹¾Ž (JavaDayTokyo2015)
´àÈõÐÔÊÂÀý¤Ëѧ¤Ö¥»¥­¥å¥¢¥³©`¥Ç¥£¥ó¥°¡¸SSL/TLSÔ^Ã÷•ø—ÊÔ^¡¹¾Ž (JavaDayTokyo2015)
JPCERT Coordination Center
?
±·´¡µþ³§³ó´Ç·É±¨¸æ£º¥Þ¥ë¥Á°ä¶Ù±·¤È×îÐÂ¥¹¥È¥ê©`¥ß¥ó¥°¥×¥í¥È¥³¥ë
±·´¡µþ³§³ó´Ç·É±¨¸æ£º¥Þ¥ë¥Á°ä¶Ù±·¤È×îÐÂ¥¹¥È¥ê©`¥ß¥ó¥°¥×¥í¥È¥³¥ë
Tomohiro Matsuzawa
?
Introduction to GraphQL (or How I Learned to Stop Worrying about REST APIs)
Introduction to GraphQL (or How I Learned to Stop Worrying about REST APIs)
Hafiz Ismail
?
Confluent Workshop Series: ksqlDB? ???? ? ??
Confluent Workshop Series: ksqlDB? ???? ? ??
confluent
?
Anand Bagmar - Behavior Driven Testing (BDT) in Agile
Anand Bagmar - Behavior Driven Testing (BDT) in Agile
Anand Bagmar
?
????? ??
????? ??
keunbong kwak
?
´ÎÊÀ´úWeb¥³¥ó¥Æ¥Ê Undertow¤Ë¤Ä¤¤¤Æ
´ÎÊÀ´úWeb¥³¥ó¥Æ¥Ê Undertow¤Ë¤Ä¤¤¤Æ
Yoshimasa Tanabe
?
HDFS User Reference
HDFS User Reference
Biju Nair
?
Machine configoperator¤Î¤Á¤ç¤Ã¤È¥¤¥¤¤«¤â¤·¤ì¤Ê¤¤Ô’
Machine configoperator¤Î¤Á¤ç¤Ã¤È¥¤¥¤¤«¤â¤·¤ì¤Ê¤¤Ô’
Toshihiro Araki
?
Full Stack Graph in the Cloud
Full Stack Graph in the Cloud
Neo4j
?
Graph protocol for accessing information about blockchains and d apps
Graph protocol for accessing information about blockchains and d apps
Gene Leybzon
?
Training Week: Introduction to Neo4j
Training Week: Introduction to Neo4j
Neo4j
?
Knowledge graphs for knowing more and knowing for sure
Knowledge graphs for knowing more and knowing for sure
Steffen Staab
?
IPëŠÔ’½»“Q™C¥½¥Õ¥È Asterisk ¤Ë¤Ä¤¤¤Æ
IPëŠÔ’½»“Q™C¥½¥Õ¥È Asterisk ¤Ë¤Ä¤¤¤Æ
Retrieva inc.
?
MLOps - Build pipelines with Tensor Flow Extended & Kubeflow
MLOps - Build pipelines with Tensor Flow Extended & Kubeflow
Jan Kirenz
?
Kubernetes ¤ÇŒg¼ù¤¹¤ë¥¯¥é¥¦¥É¥Í¥¤¥Æ¥£¥Ö DevOps "±OÒ•¤È¥ª¥Ö¥¶©`¥Ð¥Ó¥ê¥Æ¥£"¾Ž / Cloud Native DevOps with K...
Kubernetes ¤ÇŒg¼ù¤¹¤ë¥¯¥é¥¦¥É¥Í¥¤¥Æ¥£¥Ö DevOps "±OÒ•¤È¥ª¥Ö¥¶©`¥Ð¥Ó¥ê¥Æ¥£"¾Ž / Cloud Native DevOps with K...
Preferred Networks
?
´àÈõÐÔÊÂÀý¤Ëѧ¤Ö¥»¥­¥å¥¢¥³©`¥Ç¥£¥ó¥°¡¸SSL/TLSÔ^Ã÷•ø—ÊÔ^¡¹¾Ž (JavaDayTokyo2015)
´àÈõÐÔÊÂÀý¤Ëѧ¤Ö¥»¥­¥å¥¢¥³©`¥Ç¥£¥ó¥°¡¸SSL/TLSÔ^Ã÷•ø—ÊÔ^¡¹¾Ž (JavaDayTokyo2015)
JPCERT Coordination Center
?
±·´¡µþ³§³ó´Ç·É±¨¸æ£º¥Þ¥ë¥Á°ä¶Ù±·¤È×îÐÂ¥¹¥È¥ê©`¥ß¥ó¥°¥×¥í¥È¥³¥ë
±·´¡µþ³§³ó´Ç·É±¨¸æ£º¥Þ¥ë¥Á°ä¶Ù±·¤È×îÐÂ¥¹¥È¥ê©`¥ß¥ó¥°¥×¥í¥È¥³¥ë
Tomohiro Matsuzawa
?
Introduction to GraphQL (or How I Learned to Stop Worrying about REST APIs)
Introduction to GraphQL (or How I Learned to Stop Worrying about REST APIs)
Hafiz Ismail
?
Confluent Workshop Series: ksqlDB? ???? ? ??
Confluent Workshop Series: ksqlDB? ???? ? ??
confluent
?
Anand Bagmar - Behavior Driven Testing (BDT) in Agile
Anand Bagmar - Behavior Driven Testing (BDT) in Agile
Anand Bagmar
?
´ÎÊÀ´úWeb¥³¥ó¥Æ¥Ê Undertow¤Ë¤Ä¤¤¤Æ
´ÎÊÀ´úWeb¥³¥ó¥Æ¥Ê Undertow¤Ë¤Ä¤¤¤Æ
Yoshimasa Tanabe
?
HDFS User Reference
HDFS User Reference
Biju Nair
?
Machine configoperator¤Î¤Á¤ç¤Ã¤È¥¤¥¤¤«¤â¤·¤ì¤Ê¤¤Ô’
Machine configoperator¤Î¤Á¤ç¤Ã¤È¥¤¥¤¤«¤â¤·¤ì¤Ê¤¤Ô’
Toshihiro Araki
?
Full Stack Graph in the Cloud
Full Stack Graph in the Cloud
Neo4j
?
Graph protocol for accessing information about blockchains and d apps
Graph protocol for accessing information about blockchains and d apps
Gene Leybzon
?

Similar to Apollo GraphQL Federation (8)

GraphQL API: Patterns | §¡§ß§Õ§â§Ö§Û §¹§Ú§Ø | Zlit Tech
GraphQL API: Patterns | §¡§ß§Õ§â§Ö§Û §¹§Ú§Ø | Zlit Tech
Zlit
?
GraphQL §Õ§Ý§ñ FrontEnd §â§Ñ§Ù§â§Ñ§Ò§à§ä§é§Ú§Ü§Ñ
GraphQL §Õ§Ý§ñ FrontEnd §â§Ñ§Ù§â§Ñ§Ò§à§ä§é§Ú§Ü§Ñ
Artjoker
?
§³§à§Ó§â§Ö§Þ§Ö§ß§ß§í§Û graphql §ß§Ñ §Ò§Ö§Ü§Ö§ß§Õ§Ö §Ú §æ§â§à§ß§ä§Ö§ß§Õ§Ö. §´§Ö§ã§ä§Ú§â§à§Ó§Ñ§ß§Ú§Ö, §ã§Ö§Ü§î§ð§â§Ú§ä§Ú, §ß§à§Ó§í§Ö §Ó§à...
§³§à§Ó§â§Ö§Þ§Ö§ß§ß§í§Û graphql §ß§Ñ §Ò§Ö§Ü§Ö§ß§Õ§Ö §Ú §æ§â§à§ß§ä§Ö§ß§Õ§Ö. §´§Ö§ã§ä§Ú§â§à§Ó§Ñ§ß§Ú§Ö, §ã§Ö§Ü§î§ð§â§Ú§ä§Ú, §ß§à§Ó§í§Ö §Ó§à...
Mad Devs
?
§²§Ñ§ã§ê§Ú§â§Ö§ß§Ú§Ö §Ò§Ú§Ò§Ý§Ú§à§ä§Ö§Ü§Ú Slick
§²§Ñ§ã§ê§Ú§â§Ö§ß§Ú§Ö §Ò§Ú§Ò§Ý§Ú§à§ä§Ö§Ü§Ú Slick
§¡§â§ã§Ö§ß§Ú§Û §¨§Ú§Ø§Ö§Ý§Ö§Ó
?
WebCamp2016:Front-End_§²§à§Þ§Ñ§ß §Á§Ü§à§Ò§é§å§Ü_Relay, GraphQL §Ú §à§ã§ä§Ñ§Ý§î§ß§í§Ö §â§Ñ§Õ§à§ã§ä§Ú §ã§à§Ó§â§Ö§Þ...
WebCamp2016:Front-End_§²§à§Þ§Ñ§ß §Á§Ü§à§Ò§é§å§Ü_Relay, GraphQL §Ú §à§ã§ä§Ñ§Ý§î§ß§í§Ö §â§Ñ§Õ§à§ã§ä§Ú §ã§à§Ó§â§Ö§Þ...
WebCamp
?
JS Fest 2018. §£§Ý§Ñ§Õ§Ú§Þ§Ú§â §©§Ñ§Ö§è. GraphQL - §å§Õ§à§Ò§ß§à§Ö API §Ú§Ý§Ú §ç§Ñ§Û§á?
JS Fest 2018. §£§Ý§Ñ§Õ§Ú§Þ§Ú§â §©§Ñ§Ö§è. GraphQL - §å§Õ§à§Ò§ß§à§Ö API §Ú§Ý§Ú §ç§Ñ§Û§á?
JSFestUA
?
§£§Ý§Ñ§Õ§Ú§Þ§Ú§â §©§Ñ§Ö§è "GraphQL - §ß§à§Ó§í§Û §Ó§Ù§Ô§Ý§ñ§Õ §ß§Ñ API."
§£§Ý§Ñ§Õ§Ú§Þ§Ú§â §©§Ñ§Ö§è "GraphQL - §ß§à§Ó§í§Û §Ó§Ù§Ô§Ý§ñ§Õ §ß§Ñ API."
Fwdays
?
Scala and LiftWeb presentation (Russian)
Scala and LiftWeb presentation (Russian)
Dmitry Stropalov
?
GraphQL API: Patterns | §¡§ß§Õ§â§Ö§Û §¹§Ú§Ø | Zlit Tech
GraphQL API: Patterns | §¡§ß§Õ§â§Ö§Û §¹§Ú§Ø | Zlit Tech
Zlit
?
GraphQL §Õ§Ý§ñ FrontEnd §â§Ñ§Ù§â§Ñ§Ò§à§ä§é§Ú§Ü§Ñ
GraphQL §Õ§Ý§ñ FrontEnd §â§Ñ§Ù§â§Ñ§Ò§à§ä§é§Ú§Ü§Ñ
Artjoker
?
§³§à§Ó§â§Ö§Þ§Ö§ß§ß§í§Û graphql §ß§Ñ §Ò§Ö§Ü§Ö§ß§Õ§Ö §Ú §æ§â§à§ß§ä§Ö§ß§Õ§Ö. §´§Ö§ã§ä§Ú§â§à§Ó§Ñ§ß§Ú§Ö, §ã§Ö§Ü§î§ð§â§Ú§ä§Ú, §ß§à§Ó§í§Ö §Ó§à...
§³§à§Ó§â§Ö§Þ§Ö§ß§ß§í§Û graphql §ß§Ñ §Ò§Ö§Ü§Ö§ß§Õ§Ö §Ú §æ§â§à§ß§ä§Ö§ß§Õ§Ö. §´§Ö§ã§ä§Ú§â§à§Ó§Ñ§ß§Ú§Ö, §ã§Ö§Ü§î§ð§â§Ú§ä§Ú, §ß§à§Ó§í§Ö §Ó§à...
Mad Devs
?
WebCamp2016:Front-End_§²§à§Þ§Ñ§ß §Á§Ü§à§Ò§é§å§Ü_Relay, GraphQL §Ú §à§ã§ä§Ñ§Ý§î§ß§í§Ö §â§Ñ§Õ§à§ã§ä§Ú §ã§à§Ó§â§Ö§Þ...
WebCamp2016:Front-End_§²§à§Þ§Ñ§ß §Á§Ü§à§Ò§é§å§Ü_Relay, GraphQL §Ú §à§ã§ä§Ñ§Ý§î§ß§í§Ö §â§Ñ§Õ§à§ã§ä§Ú §ã§à§Ó§â§Ö§Þ...
WebCamp
?
JS Fest 2018. §£§Ý§Ñ§Õ§Ú§Þ§Ú§â §©§Ñ§Ö§è. GraphQL - §å§Õ§à§Ò§ß§à§Ö API §Ú§Ý§Ú §ç§Ñ§Û§á?
JS Fest 2018. §£§Ý§Ñ§Õ§Ú§Þ§Ú§â §©§Ñ§Ö§è. GraphQL - §å§Õ§à§Ò§ß§à§Ö API §Ú§Ý§Ú §ç§Ñ§Û§á?
JSFestUA
?
§£§Ý§Ñ§Õ§Ú§Þ§Ú§â §©§Ñ§Ö§è "GraphQL - §ß§à§Ó§í§Û §Ó§Ù§Ô§Ý§ñ§Õ §ß§Ñ API."
§£§Ý§Ñ§Õ§Ú§Þ§Ú§â §©§Ñ§Ö§è "GraphQL - §ß§à§Ó§í§Û §Ó§Ù§Ô§Ý§ñ§Õ §ß§Ñ API."
Fwdays
?
Scala and LiftWeb presentation (Russian)
Scala and LiftWeb presentation (Russian)
Dmitry Stropalov
?
Ad

More from Vitebsk Miniq (20)

Runtime compilation and code execution in groovy
Runtime compilation and code execution in groovy
Vitebsk Miniq
?
The 5 Laws of Software Estimates
The 5 Laws of Software Estimates
Vitebsk Miniq
?
Latest & Greatest Observability Release 7.9
Latest & Greatest Observability Release 7.9
Vitebsk Miniq
?
§´§Ö§ã§ä§Ú§â§à§Ó§Ñ§ß§Ú§Ö Spring-based §á§â§Ú§Ý§à§Ø§Ö§ß§Ú§Û
§´§Ö§ã§ä§Ú§â§à§Ó§Ñ§ß§Ú§Ö Spring-based §á§â§Ú§Ý§à§Ø§Ö§ß§Ú§Û
Vitebsk Miniq
?
§³§Ö§Þ§Ñ§ß§ä§Ú§é§Ö§ã§Ü§Ú§Û §á§à§Ú§ã§Ü - §é§ä§à §ï§ä§à, §Ü§Ñ§Ü §â§Ñ§Ò§à§ä§Ñ§Ö§ä §Ú §é§Ö§Þ §à§ä§Ý§Ú§é§Ñ§Ö§ä§ã§ñ §à§ä §á§â§à§ã§ä§à §á§à§Ú§ã§Ü§Ñ
§³§Ö§Þ§Ñ§ß§ä§Ú§é§Ö§ã§Ü§Ú§Û §á§à§Ú§ã§Ü - §é§ä§à §ï§ä§à, §Ü§Ñ§Ü §â§Ñ§Ò§à§ä§Ñ§Ö§ä §Ú §é§Ö§Þ §à§ä§Ý§Ú§é§Ñ§Ö§ä§ã§ñ §à§ä §á§â§à§ã§ä§à §á§à§Ú§ã§Ü§Ñ
Vitebsk Miniq
?
§­§à§Ü§Ñ§Ý§Ú§Ù§Ñ§è§Ú§à§ß§ß§à§Ö §ä§Ö§ã§ä§Ú§â§à§Ó§Ñ§ß§Ú§Ö - §ï§ä§à §ß§Ö §ä§à§Ý§î§Ü§à §á§Ö§â§Ö§Ó§à§Õ
§­§à§Ü§Ñ§Ý§Ú§Ù§Ñ§è§Ú§à§ß§ß§à§Ö §ä§Ö§ã§ä§Ú§â§à§Ó§Ñ§ß§Ú§Ö - §ï§ä§à §ß§Ö §ä§à§Ý§î§Ü§à §á§Ö§â§Ö§Ó§à§Õ
Vitebsk Miniq
?
ISTQB §³§Ö§â§ä§Ú§æ§Ú§Ü§Ñ§è§Ú§ñ §ä§Ö§ã§ä§Ú§â§à§Ó§ë§Ú§Ü§à§Ó: §Ò§í§ä§î §Ú§Ý§Ú §ß§Ö §Ò§í§ä§î?
ISTQB §³§Ö§â§ä§Ú§æ§Ú§Ü§Ñ§è§Ú§ñ §ä§Ö§ã§ä§Ú§â§à§Ó§ë§Ú§Ü§à§Ó: §Ò§í§ä§î §Ú§Ý§Ú §ß§Ö §Ò§í§ä§î?
Vitebsk Miniq
?
Who is a functional tester
Who is a functional tester
Vitebsk Miniq
?
Crawling healthy
Crawling healthy
Vitebsk Miniq
?
§£§á§Ö§â§Ö§Õ §Ó §á§â§à§ê§Ý§à§Ö
§£§á§Ö§â§Ö§Õ §Ó §á§â§à§ê§Ý§à§Ö
Vitebsk Miniq
?
CloudFormation experience
CloudFormation experience
Vitebsk Miniq
?
Learning Intelligence: the story of mine
Learning Intelligence: the story of mine
Vitebsk Miniq
?
§¬§Ñ§Ü §á§â§à§Ô§â§Ñ§Þ§Þ§Ú§ã§ä§í §Þ§à§Ô§å§ä §ã§á§Ñ§ã§ä§Ú §Þ§Ú§â
§¬§Ñ§Ü §á§â§à§Ô§â§Ñ§Þ§Þ§Ú§ã§ä§í §Þ§à§Ô§å§ä §ã§á§Ñ§ã§ä§Ú §Þ§Ú§â
Vitebsk Miniq
?
§ª§ã§á§à§Ý§î§Ù§à§Ó§Ñ§ß§Ú§Ö AzureDevOps §á§â§Ú §â§Ñ§Ù§â§Ñ§Ò§à§ä§Ü§Ö §Þ§Ú§Ü§â§à§ã§Ö§â§Ó§Ú§ã§ß§í§ç §á§â§Ú§Ý§à§Ø§Ö§ß§Ú§Û
§ª§ã§á§à§Ý§î§Ù§à§Ó§Ñ§ß§Ú§Ö AzureDevOps §á§â§Ú §â§Ñ§Ù§â§Ñ§Ò§à§ä§Ü§Ö §Þ§Ú§Ü§â§à§ã§Ö§â§Ó§Ú§ã§ß§í§ç §á§â§Ú§Ý§à§Ø§Ö§ß§Ú§Û
Vitebsk Miniq
?
Distributed tracing system in action. Instana Tracing.
Distributed tracing system in action. Instana Tracing.
Vitebsk Miniq
?
§¯§Ñ§ã§à§â§Ú§Ý - §å§Ò§Ö§â§Ú!
§¯§Ñ§ã§à§â§Ú§Ý - §å§Ò§Ö§â§Ú!
Vitebsk Miniq
?
Styled-components. §¹§ä§à? §¬§à§Ô§Õ§Ñ? §ª §Ù§Ñ§é§Ö§Þ?
Styled-components. §¹§ä§à? §¬§à§Ô§Õ§Ñ? §ª §Ù§Ñ§é§Ö§Þ?
Vitebsk Miniq
?
§¬§â§Ñ§ã§ß§í§Ö §æ§Ý§Ñ§Ô§Ú §Ú §â§à§Ù§à§Ó§í§Ö §à§é§Ü§Ú
§¬§â§Ñ§ã§ß§í§Ö §æ§Ý§Ñ§Ô§Ú §Ú §â§à§Ù§à§Ó§í§Ö §à§é§Ü§Ú
Vitebsk Miniq
?
CSS. §±§â§Ñ§Ü§ä§Ú§Ü§Ñ
CSS. §±§â§Ñ§Ü§ä§Ú§Ü§Ñ
Vitebsk Miniq
?
§²§Ñ§Ù§Õ§Ö§Ý§ñ§Û §Ú §Ó§Ý§Ñ§ã§ä§Ó§å§Û!
§²§Ñ§Ù§Õ§Ö§Ý§ñ§Û §Ú §Ó§Ý§Ñ§ã§ä§Ó§å§Û!
Vitebsk Miniq
?
Runtime compilation and code execution in groovy
Runtime compilation and code execution in groovy
Vitebsk Miniq
?
The 5 Laws of Software Estimates
The 5 Laws of Software Estimates
Vitebsk Miniq
?
Latest & Greatest Observability Release 7.9
Latest & Greatest Observability Release 7.9
Vitebsk Miniq
?
§´§Ö§ã§ä§Ú§â§à§Ó§Ñ§ß§Ú§Ö Spring-based §á§â§Ú§Ý§à§Ø§Ö§ß§Ú§Û
§´§Ö§ã§ä§Ú§â§à§Ó§Ñ§ß§Ú§Ö Spring-based §á§â§Ú§Ý§à§Ø§Ö§ß§Ú§Û
Vitebsk Miniq
?
§³§Ö§Þ§Ñ§ß§ä§Ú§é§Ö§ã§Ü§Ú§Û §á§à§Ú§ã§Ü - §é§ä§à §ï§ä§à, §Ü§Ñ§Ü §â§Ñ§Ò§à§ä§Ñ§Ö§ä §Ú §é§Ö§Þ §à§ä§Ý§Ú§é§Ñ§Ö§ä§ã§ñ §à§ä §á§â§à§ã§ä§à §á§à§Ú§ã§Ü§Ñ
§³§Ö§Þ§Ñ§ß§ä§Ú§é§Ö§ã§Ü§Ú§Û §á§à§Ú§ã§Ü - §é§ä§à §ï§ä§à, §Ü§Ñ§Ü §â§Ñ§Ò§à§ä§Ñ§Ö§ä §Ú §é§Ö§Þ §à§ä§Ý§Ú§é§Ñ§Ö§ä§ã§ñ §à§ä §á§â§à§ã§ä§à §á§à§Ú§ã§Ü§Ñ
Vitebsk Miniq
?
§­§à§Ü§Ñ§Ý§Ú§Ù§Ñ§è§Ú§à§ß§ß§à§Ö §ä§Ö§ã§ä§Ú§â§à§Ó§Ñ§ß§Ú§Ö - §ï§ä§à §ß§Ö §ä§à§Ý§î§Ü§à §á§Ö§â§Ö§Ó§à§Õ
§­§à§Ü§Ñ§Ý§Ú§Ù§Ñ§è§Ú§à§ß§ß§à§Ö §ä§Ö§ã§ä§Ú§â§à§Ó§Ñ§ß§Ú§Ö - §ï§ä§à §ß§Ö §ä§à§Ý§î§Ü§à §á§Ö§â§Ö§Ó§à§Õ
Vitebsk Miniq
?
ISTQB §³§Ö§â§ä§Ú§æ§Ú§Ü§Ñ§è§Ú§ñ §ä§Ö§ã§ä§Ú§â§à§Ó§ë§Ú§Ü§à§Ó: §Ò§í§ä§î §Ú§Ý§Ú §ß§Ö §Ò§í§ä§î?
ISTQB §³§Ö§â§ä§Ú§æ§Ú§Ü§Ñ§è§Ú§ñ §ä§Ö§ã§ä§Ú§â§à§Ó§ë§Ú§Ü§à§Ó: §Ò§í§ä§î §Ú§Ý§Ú §ß§Ö §Ò§í§ä§î?
Vitebsk Miniq
?
Who is a functional tester
Who is a functional tester
Vitebsk Miniq
?
§£§á§Ö§â§Ö§Õ §Ó §á§â§à§ê§Ý§à§Ö
§£§á§Ö§â§Ö§Õ §Ó §á§â§à§ê§Ý§à§Ö
Vitebsk Miniq
?
CloudFormation experience
CloudFormation experience
Vitebsk Miniq
?
Learning Intelligence: the story of mine
Learning Intelligence: the story of mine
Vitebsk Miniq
?
§¬§Ñ§Ü §á§â§à§Ô§â§Ñ§Þ§Þ§Ú§ã§ä§í §Þ§à§Ô§å§ä §ã§á§Ñ§ã§ä§Ú §Þ§Ú§â
§¬§Ñ§Ü §á§â§à§Ô§â§Ñ§Þ§Þ§Ú§ã§ä§í §Þ§à§Ô§å§ä §ã§á§Ñ§ã§ä§Ú §Þ§Ú§â
Vitebsk Miniq
?
§ª§ã§á§à§Ý§î§Ù§à§Ó§Ñ§ß§Ú§Ö AzureDevOps §á§â§Ú §â§Ñ§Ù§â§Ñ§Ò§à§ä§Ü§Ö §Þ§Ú§Ü§â§à§ã§Ö§â§Ó§Ú§ã§ß§í§ç §á§â§Ú§Ý§à§Ø§Ö§ß§Ú§Û
§ª§ã§á§à§Ý§î§Ù§à§Ó§Ñ§ß§Ú§Ö AzureDevOps §á§â§Ú §â§Ñ§Ù§â§Ñ§Ò§à§ä§Ü§Ö §Þ§Ú§Ü§â§à§ã§Ö§â§Ó§Ú§ã§ß§í§ç §á§â§Ú§Ý§à§Ø§Ö§ß§Ú§Û
Vitebsk Miniq
?
Distributed tracing system in action. Instana Tracing.
Distributed tracing system in action. Instana Tracing.
Vitebsk Miniq
?
§¯§Ñ§ã§à§â§Ú§Ý - §å§Ò§Ö§â§Ú!
§¯§Ñ§ã§à§â§Ú§Ý - §å§Ò§Ö§â§Ú!
Vitebsk Miniq
?
Styled-components. §¹§ä§à? §¬§à§Ô§Õ§Ñ? §ª §Ù§Ñ§é§Ö§Þ?
Styled-components. §¹§ä§à? §¬§à§Ô§Õ§Ñ? §ª §Ù§Ñ§é§Ö§Þ?
Vitebsk Miniq
?
§¬§â§Ñ§ã§ß§í§Ö §æ§Ý§Ñ§Ô§Ú §Ú §â§à§Ù§à§Ó§í§Ö §à§é§Ü§Ú
§¬§â§Ñ§ã§ß§í§Ö §æ§Ý§Ñ§Ô§Ú §Ú §â§à§Ù§à§Ó§í§Ö §à§é§Ü§Ú
Vitebsk Miniq
?
CSS. §±§â§Ñ§Ü§ä§Ú§Ü§Ñ
CSS. §±§â§Ñ§Ü§ä§Ú§Ü§Ñ
Vitebsk Miniq
?
§²§Ñ§Ù§Õ§Ö§Ý§ñ§Û §Ú §Ó§Ý§Ñ§ã§ä§Ó§å§Û!
§²§Ñ§Ù§Õ§Ö§Ý§ñ§Û §Ú §Ó§Ý§Ñ§ã§ä§Ó§å§Û!
Vitebsk Miniq
?
Ad

Apollo GraphQL Federation

  • 2. Apollo GraphQL Federation Miniq #23 27 §¶§Ö§Ó§â§Ñ§Ý§ñ 2020
  • 3. §¯§Ö§Þ§ß§à§Ô§à §à §ã§Ö§Ò§Ö: §±§Ý§ñ§ã§à§Ó §£§Ý§Ñ§Õ§Ú§ã§Ý§Ñ§Ó - §²§Ñ§Ù§â§Ñ§Ò§à§ä§é§Ú§Ü §Ó §Ü§à§Þ§á§Ñ§ß§Ú§Ú EPAM - 2+ §Ý§Ö§ä §â§Ñ§Ù§â§Ñ§Ò§à§ä§Ü§Ú §ß§Ñ Java - §±§Ú§ê§å §ß§Ñ GraphQL
  • 5. §±§Ý§Ñ§ß §ß§Ñ§ê§Ú§ç §Õ§Ö§Û§ã§ä§Ó§Ú§Û §ß§Ñ §ã§Ö§Ô§à§Õ§ß§ñ: Houston, we don¡¯t have problems I¡¯m a tiger, Rrrrrr Your GraphQL federation, Sir ++
  • 6. §±§Ý§Ñ§ß §ß§Ñ§ê§Ú§ç §Õ§Ö§Û§ã§ä§Ó§Ú§Û §ß§Ñ §ã§Ö§Ô§à§Õ§ß§ñ: Apollo Gateway +
  • 10. §°§ã§ß§à§Ó§ß§í§Ö §Ù§Ñ§Õ§Ñ§é§Ú GraphQL §µ§ß§Ú§æ§Ú§è§Ú§â§à§Ó§Ñ§ä§î §á§â§Ö§Õ§à§ã§ä§Ñ§Ó§Ý§ñ§Ö§Þ§í§Ö §Õ§Ñ§ß§ß§í§Ö §¬§Ý§Ú§Ö§ß§ä §ã§Ñ§Þ §â§Ö§ê§Ñ§Ö§ä, §é§ä§à §à§ß §ç§à§é§Ö§ä §Ó§Ú§Õ§Ö§ä§î §Ó §à§ä§Ó§Ö§ä§Ö §¦§Õ§Ú§ß§Ñ§ñ §ä§à§é§Ü§Ñ §Ó§ç§à§Õ§Ñ §³§à§Ü§â§Ñ§ä§Ú§ä§î §Ü§à§Ý§Ú§é§Ö§ã§ä§Ó§à §Ù§Ñ§á§â§à§ã§à§Ó §ß§Ñ §ã§Ö§â§Ó§Ö§â
  • 12. Facade pattern System Client side UI Server side GraphQL RESTful service 1 RESTful service 2 Database
  • 13. Composite pattern System Client side UI Server side GraphQL RESTful serviceSQL RPC
  • 15. GraphQL Schema language type QueryType { get(params: Int!): String } schema { query: QueryType mutation: MutationType } type MutationType { put(param: ID!): ID }
  • 16. scalar Date type Types { id: ID! int: Int float: Float boolean: Boolean string: String array1: [String!] array2: [String]! scalarDate: Date func(param: String): Int } ? GraphQL Schema language
  • 17. interface BasicType { id: ID! int: Int } type Implementation implements BasicType { id: ID! int: Int string: String someFunction(param: String!): Int } GraphQL Schema language
  • 18. GraphQL Schema language type Obj { id: ID! fieldOne: Int fieldTwo: String } input InputType { fieldOne: Int fieldTwo: String } type Mutation { putObj(inputType: InputType): Obj }
  • 19. GraphQL Schema language type TypeOne { fieldOne: String } type TypeTwo { fieldTwo: Int } union UnionType = TypeOne | TypeTwo type Query { search(params: Int!): UnionType }
  • 20. GraphQL Schema language enum Enumeration { A B C } type TypeOne { id: ID! field: Enumeration! } type Query { request(param: Enumeration!): String }
  • 22. GraphQL REST Endpoint { "operationName": "{opName}", "query": "{queryString}", "variables": { "variable": "variable" } } Request body Method: POST Path: /graphql
  • 23. GraphQL Function Resolvers type Response { id: ID! method: String! statusCode: Int! message: String! } type Query { getResponse(id: ID!): Response getByMethod(method: String!): [Response] }
  • 24. GraphQL Function Resolvers type Response { id: ID! method: String! statusCode: Int! message: String! } public class Response { private Long id; private String method; private Integer statusCode; private String message; ¡­ }
  • 25. GraphQL Function Resolvers getResponse(id: ID!): Response public class QueryResolver { ¡­ public DataFetcher<Response> getResponse() { return dataFetchingEnvironment -> { String id = dataFetchingEnvironment.getArgument("id"); return responseService.get(id); }; }
  • 26. GraphQL Schema provider public class SchemaProvider { private GraphQL graphQL; public GraphQL getGraphql() { return graphQL; } private RuntimeWiring buildWiring() { return RuntimeWiring.newRuntimeWiring() .type(newTypeWiring("Query") .dataFetcher("getResponse", queryResolver.getResponse())) .build(); } ¡­ }
  • 27. GraphQL Schema provider public class SchemaProvider { private GraphQL graphQL; public GraphQL getGraphql() { return graphQL; } private void initGraphQLScheme() throws IOException { Resource sdl = new ClassPathResource("schema.graphqls"); GraphQLSchema schema = Federation.transform(sdl.getFile(), buildWiring()) .fetchEntities(dataFetchingEnvironment -> Collections.emptyList()) .resolveEntityType(typeResolutionEnvironment -> null) .build(); graphQL = GraphQL.newGraphQL(schema).build(); } ¡­ }
  • 29. GraphQL Query language type Response { id: ID! method: String! statusCode: Int! message: String! } type Query { getResponse(id: ID!): Response getByMethod(method: String!): [Response] }
  • 30. GraphQL Query language { "errors": [], "data": { "getType": { "id": 12, "method": "POST" } } } Response body: query GetResponse($id: ID!){ getResponse(id: $id) { id method } } query string: variables: { "id": 12 }
  • 31. Application Application layers (Java) GraphQL Services Repositories REST Client REST Endpoint Application Services Repositories REST Client REST Endpoints GraphQL RESTful GraphQL Resolvers
  • 36. §±§â§à§Ò§Ý§Ö§Þ§í §ã§Ú§ã§ä§Ö§Þ§í §±§â§à§Ò§Ý§Ö§Þ§Ñ N + 1 §Ù§Ñ§á§â§à§ã§à§Ó §±§â§Ú§Þ§Ö§â: §£§í§Ó§Ö§ã§ä§Ú §ã§á§Ú§ã§à§Ü §æ§Ú§Ý§î§Þ§à§Ó §ã 1 §à§ä§Ù§í§Ó§à§Þ §±§â§à§Ú§Ù§Ó§à§Õ§Ú§ä§Ö§Ý§î§ß§à§ã§ä§î §ã§Ú§ã§ä§Ö§Þ§í §±§â§à§á§å§ã§Ü§ß§Ñ§ñ §ã§á§à§ã§à§Ò§ß§à§ã§ä§î §ã§Ö§ä§Ú §¢§à§Ý§î§ê§à§Ö §Ü§à§Ý§Ú§é§Ö§ã§ä§Ó§à §Ù§Ñ§á§â§à§ã§à§Ó §ß§Ñ GraphQL §ã§Ö§â§Ó§Ú§ã§í §¬§Ý§Ú§Ö§ß§ä §å§á§â§Ñ§Ó§Ý§ñ§Ö§ä §á§â§à§è§Ö§ã§ã§à§Þ §ã§Ò§à§â§Ñ §Õ§Ñ§ß§ß§í§ç §´§â§Ö§Ò§å§Ö§ä§ã§ñ §Õ§à§á. §Ý§à§Ô§Ú§Ü§Ñ §Ó GraphQL §ã§Ö§â§Ó§Ú§ã§Ñ§ç
  • 39. §¯§Ö§Þ§ß§à§Ô§à §ä§Ö§â§Þ§Ú§ß§à§Ó Apollo GraphQL Federation ¨C ?§Þ§Ú§Ü§â§à§ã§Ö§â§Ó§Ú§ã§ß§Ñ§ñ? §ã§Ú§ã§ä§Ö§Þ§Ñ, §ã§à§ã§ä§à§ñ§ë§Ñ§ñ §Ú§Ù §ß§Ö§ã§Ü§à§Ý§î§Ü§Ú§ç GraphQL §ã§Ö§â§Ó§Ú§ã§à§Ó §Ú Apollo Gateway Apollo Gateway ¨C backend-for-frontend §á§â§Ú§Ý§à§Ø§Ö§ß§Ú§Ö, §Ü§à§ä§à§â§à§Ö §Ù§Ñ§ß§Ú§Þ§Ñ§Ö§ä§ã§ñ §à§Ò§â§Ñ§Ò§à§ä§Ü§à§Û GraphQL §Ù§Ñ§á§â§à§ã§à§Ó §Ú §á§Ö§â§Ö§Õ§Ñ§é§Ö§Û §Ú§ç §ß§Ñ §ã§à§à§ä§Ó§Ö§ä§ã§ä§Ó§å§ð§ë§Ú§Ö GraphQL §ã§Ö§â§Ó§Ú§ã§í §Ó §æ§Ö§Õ§Ö§â§Ñ§è§Ú§Ú. Apollo Federated Schema ¨C §°§Ò§ì§Ö§Õ§Ú§ß§Ö§ß§ß§í§Ö GraphQL §ã§ç§Ö§Þ§í §ã§à §Ó§ã§Ö§ç §ã§Ö§â§Ó§Ú§ã§à§Ó §æ§Ö§Õ§Ö§â§Ñ§è§Ú§Ú §Ó §à§Õ§ß§å §à§Ò§ë§å§ð. §¥§Ñ§ß§ß§Ñ§ñ §ã§ç§Ö§Þ§Ñ §ß§å§Ø§ß§Ñ Apollo Gateway §Õ§Ý§ñ §à§Ò§â§Ñ§Ò§à§ä§Ü§Ú §Ù§Ñ§á§â§à§ã§à§Ó.
  • 41. Apollo Federated Schema type Film @key(fields: "id") @extends { id: ID! @external reviews: [Review] @requires(fields: "id") } type Review @key(fields: "id") { id: ID! text: String! user: User! @provides(fields: "name") } type User @key(fields: "id") { id: ID! @external name: String @external reviews: [Review] @requires(fields: "id") } Review GraphQL serviceUser GraphQL service type User { id: ID! name: String rating: Float } type Film@key(fields: "id"){ id: ID! name: name } type Query { getFilm( filmName: String): [Film] } Film GraphQL service
  • 42. Apollo Federated Schema type Film @key(fields: "id") @extends { id: ID! @external reviews: [Review] @requires(fields: "id") } type Review @key(fields: "id") { id: ID! text: String! user: User! @provides(fields: "name") } type User @key(fields: "id") { id: ID! @external name: String @external reviews: [Review] @requires(fields: "id") } Review GraphQL serviceUser GraphQL service type User { id: ID! name: String rating: Float } type Film@key(fields: "id"){ id: ID! name: name } type Query { getFilm( filmName: String): [Film] } Film GraphQL service @key(fields: "id") @key ¨C §Õ§Ú§â§Ö§Ü§ä§Ú§Ó§Ñ, §à§Ò§à§Ù§ß§Ñ§é§Ñ§ð§ë§Ñ§ñ §Ü§Ý§ð§é/§Ú§Õ§Ö§ß§ä§Ú§æ§Ú§Ü§Ñ§ä§à§â GraphQL §ä§Ú§á§Ñ (§Þ§à§Ø§Ö§ä §Ò§í§ä§î §Ó§Ý§à§Ø§Ö§ß§ß§í§Þ §Ú §ã§à§Ó§Þ§Ö§ë§Ö§ß§ß§í§Þ).
  • 43. Apollo Federated Schema type Film @key(fields: "id") @extends { id: ID! @external reviews: [Review] @requires(fields: "id") } type Review @key(fields: "id") { id: ID! text: String! user: User! @provides(fields: "name") } type User @key(fields: "id") { id: ID! @external name: String @external reviews: [Review] @requires(fields: "id") } Review GraphQL serviceUser GraphQL service type User { id: ID! name: String rating: Float } type Film@key(fields: "id"){ id: ID! name: name } type Query { getFilm( filmName: String): [Film] } Film GraphQL service @extends @extends/extend ¨C §Õ§Ú§â§Ö§Ü§ä§Ú§â§Ñ/§Ü§Ý§ð§é§Ö§Ó§à§Ö §ã§Ý§à§Ó§à, §Ü§à§ä§à§â§Ñ§ñ §à§Ò§à§Ù§ß§Ñ§é§Ñ§Ö§ä, §é§ä§à §Õ§Ñ§ß§ß§í§Û §ã§Ö§â§Ó§Ú§ã §â§Ñ§ã§ê§Ú§â§ñ§Ö§ä §å§Ü§Ñ§Ù§Ñ§ß§ß§í§Û §ä§Ú§á §ã§Ó§à§Ú§Þ §æ§å§ß§Ü§è§Ú§à§ß§Ñ§Ý§à§Þ. §¯§Ö §Ú§Þ§Ö§Ö§ä §ã§Ó§ñ§Ù§Ú §ã §Ü§Ý§ð§é§Ö§Ó§í§Þ §ã§Ý§à§Ó§à§Þ ?implements?.
  • 44. type Film @key(fields: "id") @extends { id: ID! @external reviews: [Review] @requires(fields: "id") } type Review @key(fields: "id") { id: ID! text: String! user: User! @provides(fields: "name") } type User @key(fields: "id") { id: ID! @external name: String @external reviews: [Review] @requires(fields: "id") } Review GraphQL serviceUser GraphQL service type User { id: ID! name: String rating: Float } type Film@key(fields: "id"){ id: ID! name: name } type Query { getFilm( filmName: String): [Film] } Film GraphQL service @external @external ¨C §Õ§Ú§â§Ö§Ü§ä§Ú§Ó§Ñ, §å§Ü§Ñ§Ù§í§Ó§Ñ§ð§ë§Ñ§ñ §á§à§Ý§ñ, §Ü§à§ä§à§â§í§Ö §á§â§Ö§Õ§à§ã§ä§Ñ§Ó§Ý§ñ§ð§ä§ã§ñ §Õ§â§å§Ô§Ú§Þ §ã§Ö§â§Ó§Ú§ã§à§Þ §Ó §æ§Ö§Õ§Ö§â§Ñ§è§Ú§Ú. Apollo Federated Schema
  • 45. type Film @key(fields: "id") @extends { id: ID! @external reviews: [Review] @requires(fields: "id") } type Review @key(fields: "id") { id: ID! text: String! user: User! @provides(fields: "name") } type User @key(fields: "id") { id: ID! @external name: String @external reviews: [Review] @requires(fields: "id") } Review GraphQL serviceUser GraphQL service type User { id: ID! name: String rating: Float } type Film@key(fields: "id"){ id: ID! name: name } type Query { getFilm( filmName: String): [Film] } Film GraphQL service @requires(fields: "id") @requires ¨C §à§Ò§à§Ù§ß§Ñ§é§Ñ§Ö§Þ §à§Ò§ñ§Ù§Ñ§ä§Ö§Ý§î§ß§í§Ö @external §á§à§Ý§ñ §ä§Ú§á§Ñ, §Ü§à§ä§à§â§í§Ö §ß§Ö§à§Ò§ç§à§Õ§Ú§Þ§à §á§Ö§â§Ö§Õ§Ñ§ä§î §Ó §Ù§Ñ§á§â§à§ã§Ö §Õ§Ý§ñ §Ó§í§á§à§Ý§ß§Ö§ß§Ú§ñ §æ§å§ß§Ü§è§Ú§Ú. Apollo Federated Schema
  • 46. type Film @key(fields: "id") @extends { id: ID! @external reviews: [Review] @requires(fields: "id") } type Review @key(fields: "id") { id: ID! text: String! user: User! @provides(fields: "name") } type User @key(fields: "id") { id: ID! @external name: String @external reviews: [Review] @requires(fields: "id") } Review GraphQL serviceUser GraphQL service type User { id: ID! name: String rating: Float } type Film@key(fields: "id"){ id: ID! name: name } type Query { getFilm( filmName: String): [Film] } Film GraphQL service @provides(fields: "name") @provides ¨C §Õ§Ú§â§Ö§Ü§ä§Ú§Ó§Ñ, §Ü§à§ä§à§â§Ñ§ñ §å§Ü§Ñ§Ù§í§Ó§Ñ§Ö§ä §ß§Ñ§Ò§à§â @external §á§à§Ý§Ö§Û, §Ü§à§ä§à§â§í§Ö §ã§Ö§â§Ó§Ú§ã §Þ§à§Ø§Ö§ä §á§â§Ö§Õ§à§ã§ä§Ñ§Ó§Ú§ä§î §Ó§ß§å§ä§â§Ú §ã§Ö§Ò§ñ. Apollo Federated Schema
  • 49. Apollo Gateway Features Easy to create and deploy §±§à§Õ§Õ§Ö§â§Ø§Ü§Ñ Persisted queries §Ò§Ö§Ù §Õ§à§á. §ß§Ñ§ã§ä§â§à§Ö§Ü §±§à §ã§â§Ö§Õ§ã§ä§Ó§à§Þ §Ú§ã§á§à§Ý§î§Ù§à§Ó§Ñ§ß§Ú§ñ @cacheControl §Õ§Ú§â§Ö§Ü§ä§Ú§Ó§í §±§à§Õ§Õ§Ö§â§Ø§Ü§Ñ §Ü§ï§ê§Ú§â§à§Ó§Ñ§ß§Ú§ñ §ä§Ú§á§à§Ó §Ú §á§à§Ý§Ö§Û AWS API Gateway ¨C AWS Lambda ( )¨C GraphQL Service §£§à§Ù§Þ§à§Ø§ß§à§ã§ä§î §Ú§ã§á§à§Ý§î§Ù§à§Ó§Ñ§ä§î §Ü§Ñ§Ü Serverless app. §£§à§Ù§Þ§à§Ø§ß§à§ã§ä§î §Ú§ß§ä§Ö§Ô§â§Ñ§è§Ú§Ú §ã CDN §ã§Ö§â§Ó§Ú§ã§Ñ§Þ§Ú §Õ§Ý§ñ §Ü§ï§ê§Ñ §¡§Ó§ä§à§Þ§Ñ§ä§Ú§é§Ö§ã§Ü§Ú §â§Ñ§ã§á§â§Ö§Õ§Ö§Ý§ñ§Ö§ä §Ù§Ñ§á§â§à§ã§í §á§à §ã§Ö§â§Ó§Ú§ã§Ñ§Þ
  • 51. Apollo Federation CONs Apollo Gateway §á§à§Õ§Õ§Ö§â§Ø§Ú§Ó§Ñ§Ö§ä §ä§à§Ý§î§Ü§à NodeJS §´§â§Ö§Ò§å§Ö§ä §Ù§ß§Ñ§ß§Ú§Ö §Ú §á§à§ß§Ú§Þ§Ñ§ß§Ú§Ö §Ó§ã§Ö§Û GraphQL §ã§ç§Ö§Þ§í §¢§à§Ý§î§ê§à§Ö §Ü§à§Ý§Ú§é§Ö§ã§ä§Ó§à ¡°issues¡± §ß§Ñ GitHub (>200)
  • 52. §ª§ß§ä§Ö§â§Ö§ã§ß§í§Ö §ã§ã§í§Ý§Ü§Ú GraphQL tutorial for Java: https://www.graphql-java.com/documentation/v11/schema/ How to migrate to GraphQL from REST API: https://blog.apimatic.io/moving-to-graphql-from-soap-or-rest-2383f7dc6523 GraphQL: https://graphql.org/ Apollo GraphQL Federation example and GraphQL fast run: https://github.com/vladislav1995?tab=repositories Solve problem N+1 requests via DataLoaders: https://github.com/graphql-java/java-dataloader#examples
  • 53. §ª§ß§ä§Ö§â§Ö§ã§ß§í§Ö §ã§ã§í§Ý§Ü§Ú Apollo Gateway Caching: https://www.apollographql.com/docs/apollo-server/performance/caching/ Apollo GraphQL Federation: https://www.apollographql.com/docs/apollo-server/federation/core- concepts/ Apollo Gateway request processing: https://www.apollographql.com/docs/apollo- server/federation/implementing/#customizing-outgoing-responses How to deploy Apollo Gateway on AWS: https://www.apollographql.com/docs/apollo-server/deployment/lambda/