Feature/graphql (#312)
* #298 initial hacking around better aggregation * #298 bit more hacking around * #298 abstraction over httpresponsemessage * #298 tidying up * #298 docs * #298 missed this * #306 example of how to do GraphQLpull/314/head 5.5.2
parent
a15f75dda8
commit
b46ef1945d
@ -0,0 +1,15 @@
|
||||
GraphQL
|
||||
=======
|
||||
|
||||
OK you got me Ocelot doesn't directly support GraphQL but so many people have asked about it I wanted to show how easy it is to integrate
|
||||
the `graphql-dotnet <https://github.com/graphql-dotnet/graphql-dotnet>`_ library.
|
||||
|
||||
|
||||
Please see the sample project `OcelotGraphQL <https://github.com/ThreeMammals/Ocelot/tree/develop/samples/OcelotGraphQL>`_.
|
||||
Using a combination of the graphql-dotnet project and Ocelot's DelegatingHandler features this is pretty easy to do.
|
||||
However I do not intend to integrate more closely with GraphQL at the moment. Check out the samples readme and that should give
|
||||
you enough instruction on how to do this!
|
||||
|
||||
Good luck and have fun :>
|
||||
|
||||
|
@ -0,0 +1,18 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk.Web">
|
||||
<PropertyGroup>
|
||||
<TargetFramework>netcoreapp2.0</TargetFramework>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<None Update="configuration.json;appsettings.json">
|
||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||
</None>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Folder Include="wwwroot\"/>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Microsoft.AspNetCore.All" Version="2.0.6"/>
|
||||
<PackageReference Include="Ocelot" Version="5.5.1"/>
|
||||
<PackageReference Include="GraphQL" Version="2.0.0-alpha-870"/>
|
||||
</ItemGroup>
|
||||
</Project>
|
@ -0,0 +1,71 @@
|
||||
# Ocelot using GraphQL example
|
||||
|
||||
Loads of people keep asking me if Ocelot will every support GraphQL, in my mind Ocelot and GraphQL are two different things that can work together.
|
||||
I would not try and implement GraphQL in Ocelot instead I would either have Ocelot in front of GraphQL to handle things like authorisation / authentication or I would
|
||||
bring in the awesome [graphql-dotnet](https://github.com/graphql-dotnet/graphql-dotnet) library and use it in a [DelegatingHandler](http://ocelot.readthedocs.io/en/latest/features/delegatinghandlers.html). This way you could have Ocelot and GraphQL without the extra hop to GraphQL. This same is an example of how to do that.
|
||||
|
||||
## Example
|
||||
|
||||
If you run this project with
|
||||
|
||||
$ dotnet run
|
||||
|
||||
Use postman or something to make the following requests and you can see Ocelot and GraphQL in action together...
|
||||
|
||||
GET http://localhost:5000/graphql?query={ hero(id: 4) { id name } }
|
||||
|
||||
RESPONSE
|
||||
```json
|
||||
{
|
||||
"data": {
|
||||
"hero": {
|
||||
"id": 4,
|
||||
"name": "Tom Pallister"
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
POST http://localhost:5000/graphql
|
||||
|
||||
BODY
|
||||
```json
|
||||
{ hero(id: 4) { id name } }
|
||||
```
|
||||
|
||||
RESPONSE
|
||||
```json
|
||||
{
|
||||
"data": {
|
||||
"hero": {
|
||||
"id": 4,
|
||||
"name": "Tom Pallister"
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## Notes
|
||||
|
||||
Please note this project never goes out to another service, it just gets the data for GraphQL in memory. You would need to add the details of your GraphQL server in configuration.json e.g.
|
||||
|
||||
```json
|
||||
{
|
||||
"ReRoutes": [
|
||||
{
|
||||
"DownstreamPathTemplate": "/graphql",
|
||||
"DownstreamScheme": "http",
|
||||
"DownstreamHostAndPorts": [
|
||||
{
|
||||
"Host": "yourgraphqlhost.com",
|
||||
"Port": 80
|
||||
}
|
||||
],
|
||||
"UpstreamPathTemplate": "/graphql",
|
||||
"DelegatingHandlers": [
|
||||
"GraphQlDelegatingHandler"
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
@ -0,0 +1,19 @@
|
||||
{
|
||||
"ReRoutes": [
|
||||
{
|
||||
"DownstreamPathTemplate": "/",
|
||||
"DownstreamScheme": "http",
|
||||
"DownstreamHostAndPorts": [
|
||||
{
|
||||
"Host": "jsonplaceholder.typicode.com",
|
||||
"Port": 80
|
||||
}
|
||||
],
|
||||
"UpstreamPathTemplate": "/graphql",
|
||||
"DelegatingHandlers": [
|
||||
"GraphQlDelegatingHandler"
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
|
Loading…
Reference in New Issue