apollo-server/docs/source/essentials/server.md
2018-04-23 19:04:03 +03:00

85 lines
No EOL
3.2 KiB
Markdown

---
title: Running a server
description: All of the things you need with no configuration needed!
---
## Overview
Apollo Server provides an easy way for a brand new application to get up and running quickly by providing an integrated web-server with minimal configuration.
> Running a dedicated GraphQL server is a great choice for many deployments, however, if you're looking to add Apollo Server functionality to an **existing webserver**, follow the [Middleware](./middleware.html) installation instructions instead.
## Prerequisites
* You have designed type definitions. ([Type definitions]())
* You have _resolvers_ for your type definitions. ([Resolvers]())
If you don't meet or don't understand all of these prerequisites, we recommend you start at the [Getting Started]() page for a more complete example. Alternatively, visit the links to the right of the prerequisites above to find out more information.
## Installation
There are two packages which must be installed for Apollo Server to function:
* [`apollo-server`](//npm.im/apollo-server): The actual Apollo Server package.
* [`graphql`](//npm.im/graphql): The supporting GraphQL JavaScript library which is a peer dependency of `apollo-server` and shared amongst the various GraphQL-related components in your project. We won't use this package directly, but a single copy of it must be installed in the application.
To install, run:
npm install --save apollo-server graphql
### Importing
Start by importing the `ApolloServer` class:
```js
const { ApolloServer } = require('apollo-server');
```
### Import your type definitions
For this example, we'll import type definitions and resolvers from a file called `schema` which lives alongside the main server code.
```js
// Make sure you've created this file and defined type
// definitions along with their resolvers!
const { typeDefs, resolvers } = require('./schema');
```
### Instantiating
Now, using the `ApolloServer` class, pass in the type definitions (`typeDefs`) and resolvers (`resolvers`), which were imported in the previous section, to the `ApolloServer` constructor:
```js
const server = new ApolloServer({
typeDefs,
resolvers,
});
```
> See the [API Reference]() for additional options which can be passed to the `ApolloServer` constructor and instructions for creating the options based on the incoming request.
### Listening for requests
Finally, when you're ready to start accepting connections, call the `listen` method on the instance of `ApolloServer` which was created in the previous step:
```js
server.listen({ port: 3000 });
```
> If the `port` is omitted, port 4000 will be used. For additional options available on the `listen` method, see the [API reference]().
## Next steps
Once you have a GraphQL server up and running, there are a number of configurable options worth considering. Some great resources for additional information are:
* [API documentation]()
* [Schema design]()
* [Schema directives]()
* [Deploying]()
### TODO
* Evans thinks this should go into advanced/as an anti pattern
* best practice dictates that you should have your GraphQL server separate from other services and have a single endpoint
* the advanced section could talk about this in the case that you are doing something special, such as SSR