-
Notifications
You must be signed in to change notification settings - Fork 2k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
apollo-server-azure-function v2 implementation. (#1753)
Closes #1752.
- Loading branch information
1 parent
c757fe5
commit 5b64cf9
Showing
16 changed files
with
803 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,6 @@ | ||
* | ||
!src/**/* | ||
!dist/**/* | ||
dist/**/*.test.* | ||
!package.json | ||
!README.md |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,154 @@ | ||
--- | ||
title: Azure Functions | ||
description: Setting up Apollo Server with Azure Functions | ||
--- | ||
|
||
This is the Azure functions integration of GraphQL Server. Apollo Server is a community-maintained open-source GraphQL server that works with many Node.js HTTP server frameworks. [Read the docs](https://www.apollographql.com/docs/apollo-server/v2). [Read the CHANGELOG](https://github.com/apollographql/apollo-server/blob/master/CHANGELOG.md). | ||
|
||
```sh | ||
npm install apollo-server-azure-functions@alpha graphql | ||
``` | ||
|
||
## Writing azure function | ||
|
||
Azure functions currently support two runtime versions. This package assumes that function is running under **runtime 2.0**. | ||
|
||
Azure functions typically consist of at least 2 files - index.js (function handler definition) and function.json (function settings and bindings). | ||
For more information about azure functions development model in general, refer to [official Azure functions docs](https://docs.microsoft.com/en-us/azure/azure-functions/functions-reference-node). | ||
|
||
Example index.js: | ||
|
||
```js | ||
const { gql, ApolloServer } = require("apollo-server-azure-function"); | ||
|
||
// Construct a schema, using GraphQL schema language | ||
const typeDefs = gql` | ||
type Query { | ||
hello: String | ||
} | ||
`; | ||
|
||
// A map of functions which return data for the schema. | ||
const resolvers = { | ||
Query: { | ||
hello: () => "world" | ||
} | ||
}; | ||
|
||
const server = new ApolloServer({ typeDefs, resolvers }); | ||
|
||
module.exports = server.createHandler(); | ||
``` | ||
|
||
Example function.json: | ||
```json | ||
{ | ||
"disabled": false, | ||
"bindings": [ | ||
{ | ||
"authLevel": "function", | ||
"type": "httpTrigger", | ||
"direction": "in", | ||
"name": "req", | ||
"methods": [ | ||
"get", | ||
"post" | ||
] | ||
}, | ||
{ | ||
"type": "http", | ||
"direction": "out", | ||
"name": "$return" | ||
} | ||
] | ||
} | ||
``` | ||
|
||
It is important to set output binding name to '$return' for apollo-server-azure-function to work correctly. | ||
|
||
## Modifying the Azure Function Response (Enable CORS) | ||
|
||
To enable CORS the response HTTP headers need to be modified. To accomplish this use the `cors` option. | ||
|
||
```js | ||
const { ApolloServer, gql } = require('apollo-server-azure-function'); | ||
|
||
// Construct a schema, using GraphQL schema language | ||
const typeDefs = gql` | ||
type Query { | ||
hello: String | ||
} | ||
`; | ||
|
||
// Provide resolver functions for your schema fields | ||
const resolvers = { | ||
Query: { | ||
hello: () => 'Hello world!', | ||
}, | ||
}; | ||
|
||
const server = new ApolloServer({ | ||
typeDefs, | ||
resolvers, | ||
}); | ||
|
||
module.exports = server.createHandler({ | ||
cors: { | ||
origin: '*', | ||
credentials: true, | ||
}, | ||
}); | ||
``` | ||
|
||
To enable CORS response for requests with credentials (cookies, http authentication) the allow origin header must equal the request origin and the allow credential header must be set to true. | ||
|
||
```js | ||
const { ApolloServer, gql } = require('apollo-server-azure-function'); | ||
|
||
// Construct a schema, using GraphQL schema language | ||
const typeDefs = gql` | ||
type Query { | ||
hello: String | ||
} | ||
`; | ||
|
||
// Provide resolver functions for your schema fields | ||
const resolvers = { | ||
Query: { | ||
hello: () => 'Hello world!', | ||
}, | ||
}; | ||
|
||
const server = new ApolloServer({ | ||
typeDefs, | ||
resolvers, | ||
}); | ||
|
||
module.exports = server.createHandler({ | ||
cors: { | ||
origin: true, | ||
credentials: true, | ||
}, | ||
}); | ||
``` | ||
|
||
### Cors Options | ||
|
||
The options correspond to the [express cors configuration](https://github.com/expressjs/cors#configuration-options) with the following fields(all are optional): | ||
|
||
* `origin`: boolean | string | string[] | ||
* `methods`: string | string[] | ||
* `allowedHeaders`: string | string[] | ||
* `exposedHeaders`: string | string[] | ||
* `credentials`: boolean | ||
* `maxAge`: number | ||
|
||
## Principles | ||
|
||
GraphQL Server is built with the following principles in mind: | ||
|
||
* **By the community, for the community**: GraphQL Server's development is driven by the needs of developers | ||
* **Simplicity**: by keeping things simple, GraphQL Server is easier to use, easier to contribute to, and more secure | ||
* **Performance**: GraphQL Server is well-tested and production-ready - no modifications needed | ||
|
||
Anyone is welcome to contribute to GraphQL Server, just read [CONTRIBUTING.md](https://github.com/apollographql/apollo-server/blob/master/CONTRIBUTING.md), take a look at the [roadmap](https://github.com/apollographql/apollo-server/blob/master/ROADMAP.md) and make your first PR! |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,33 @@ | ||
{ | ||
"name": "apollo-server-azure-function", | ||
"version": "2.2.0-alpha.2", | ||
"description": "Production-ready Node.js GraphQL server for Azure Functions", | ||
"keywords": [ "GraphQL", "Apollo", "Server", "Azure", "Javascript" ], | ||
"author": "opensource@apollographql.com", | ||
"license": "MIT", | ||
"repository": { | ||
"type": "git", | ||
"url": "https://github.com/apollographql/apollo-server/tree/master/packages/apollo-server-azure-function" | ||
}, | ||
"homepage": "https://github.com/apollographql/apollo-server#readme", | ||
"bugs": { | ||
"url": "https://github.com/apollographql/apollo-server/issues" | ||
}, | ||
"main": "dist/index.js", | ||
"types": "dist/index.d.ts", | ||
"engines": { | ||
"node": ">=6" | ||
}, | ||
"dependencies": { | ||
"@apollographql/graphql-playground-html": "^1.6.4", | ||
"apollo-server-core": "file:../apollo-server-core", | ||
"apollo-server-env": "file:../apollo-server-env", | ||
"graphql-tools": "^4.0.0" | ||
}, | ||
"devDependencies": { | ||
"apollo-server-integration-testsuite": "file:../apollo-server-integration-testsuite" | ||
}, | ||
"peerDependencies": { | ||
"graphql": "^0.12.0 || ^0.13.0 || ^14.0.0" | ||
} | ||
} |
Oops, something went wrong.