mirror of
https://github.com/vale981/apollo-server
synced 2025-03-06 02:01:40 -05:00
154 lines
4.2 KiB
Markdown
154 lines
4.2 KiB
Markdown
---
|
|
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-functions");
|
|
|
|
// 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-functions');
|
|
|
|
// 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-functions');
|
|
|
|
// 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!
|