Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Federation: handle distributed unions and interfaces that do not shar… #6189

Merged
merged 3 commits into from
May 17, 2024

Conversation

ardatan
Copy link
Owner

@ardatan ardatan commented May 16, 2024

Handle interface types with non-shared implementations;

For example, you have the following services, where Node is implemented in both services, but Foo and Bar are only implemented in one service.
And when the gateway receives the following query, it should be converted to this because Node is not implemented as Bar in Service 1 while implemented in Service 2.

Query conversion;

# Gateway request
query {
  fooBar(id: "1") {
    ... on Node {
      id
    }
  }
}
# Service 1 Request
query {
  fooBar(id: "1") {
    ... on Foo {
      id
    }
    ... on Bar {
      id
    }
  }
}

Services;

# Service 1

union FooBar = Foo | Bar

interface Node {
  id: ID!
}

type Foo implements Node {
  id: ID!
}

type Bar {
  id: ID!
}

type Query {
  fooBar(id: ID!): FooBar
}
# Service 2
interface Node {
  id: ID!
}

type Foo implements Node {
  id: ID!
}

type Bar implements Node {
  id: ID!
}

Copy link

changeset-bot bot commented May 16, 2024

🦋 Changeset detected

Latest commit: 2d6d466

The changes in this PR will be included in the next version bump.

This PR includes changesets to release 3 packages
Name Type
@graphql-tools/federation Patch
@graphql-tools/delegate Patch
federation-benchmark Patch

Not sure what this means? Click here to learn what changesets are.

Click here if you're a maintainer who wants to add another changeset to this PR

Copy link
Contributor

github-actions bot commented May 16, 2024

✅ Benchmark Results

     ✓ no_errors
     ✓ expected_result

     checks.........................: 100.00% ✓ 338       ✗ 0  
     data_received..................: 39 MB   3.9 MB/s
     data_sent......................: 145 kB  14 kB/s
     http_req_blocked...............: avg=3.91µs   min=2.06µs   med=2.55µs  max=182.28µs p(90)=3.72µs   p(95)=4.19µs  
     http_req_connecting............: avg=721ns    min=0s       med=0s      max=121.92µs p(90)=0s       p(95)=0s      
     http_req_duration..............: avg=55.24ms  min=47.67ms  med=51.71ms max=153.62ms p(90)=59.21ms  p(95)=85.67ms 
       { expected_response:true }...: avg=55.24ms  min=47.67ms  med=51.71ms max=153.62ms p(90)=59.21ms  p(95)=85.67ms 
     http_req_failed................: 0.00%   ✓ 0         ✗ 169
     http_req_receiving.............: avg=127.68µs min=100.14µs med=125.7µs max=268.18µs p(90)=142.64µs p(95)=150.84µs
     http_req_sending...............: avg=26.3µs   min=18.44µs  med=24.09µs max=336.51µs p(90)=30.56µs  p(95)=33.7µs  
     http_req_tls_handshaking.......: avg=0s       min=0s       med=0s      max=0s       p(90)=0s       p(95)=0s      
     http_req_waiting...............: avg=55.09ms  min=47.53ms  med=51.55ms max=153.3ms  p(90)=59.04ms  p(95)=85.5ms  
     http_reqs......................: 169     16.796765/s
     iteration_duration.............: avg=59.51ms  min=51.35ms  med=55.91ms max=159.36ms p(90)=65.98ms  p(95)=90.14ms 
     iterations.....................: 169     16.796765/s
     vus............................: 1       min=1       max=1
     vus_max........................: 1       min=1       max=1

Base automatically changed from shared-root to master May 17, 2024 13:57
@ardatan ardatan force-pushed the union-intersection-distributed branch from 9ea51d8 to 2d6d466 Compare May 17, 2024 13:59
Copy link
Contributor

🚀 Snapshot Release (alpha)

The latest changes of this PR are available as alpha on npm (based on the declared changesets):

Package Version Info
@graphql-tools/delegate 10.0.11-alpha-20240517140204-2d6d4662583e2d6ac1cce26995e8f461000b1ab5 npm ↗︎ unpkg ↗︎
@graphql-tools/federation 1.1.36-alpha-20240517140204-2d6d4662583e2d6ac1cce26995e8f461000b1ab5 npm ↗︎ unpkg ↗︎
@graphql-tools/stitch 9.2.9-alpha-20240517140204-2d6d4662583e2d6ac1cce26995e8f461000b1ab5 npm ↗︎ unpkg ↗︎
@graphql-tools/utils 10.2.1-alpha-20240517140204-2d6d4662583e2d6ac1cce26995e8f461000b1ab5 npm ↗︎ unpkg ↗︎

Copy link
Contributor

💻 Website Preview

The latest changes are available as preview in: https://4cb3dcdc.graphql-tools.pages.dev

@ardatan ardatan merged commit 0134f7f into master May 17, 2024
28 of 29 checks passed
@ardatan ardatan deleted the union-intersection-distributed branch May 17, 2024 14:04
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

2 participants