# Multiple operations per request

The GraphQL standard generally assumes there will be one server request for each client operation you want to perform (such as a query or mutation). This is conceptually simple but has the potential to be inefficent.

Some client libraries such as [apollo-link-batch-http](https://www.apollographql.com/docs/link/links/batch-http.html) have added the ability to batch operations in a single HTTP request to save network round-trips and potentially increase performance. There are some [tradeoffs](https://blog.apollographql.com/batching-client-graphql-queries-a685f5bcd41b) that should be considered before batching requests.

Juniper's server integration crates support multiple operations in a single HTTP request using JSON arrays. This makes them compatible with client libraries that support batch operations without any special configuration.

Server integration crates maintained by others are **not required** to support batch requests. Batch requests aren't part of the official GraphQL specification.

Assuming an integration supports batch requests, for the following GraphQL query:

```graphql
{
  hero {
    name
  }
}
```

The json data to POST to the server for an individual request would be:

```json
{
  "query": "{hero{name}}"
}
```

And the response would be of the form:

```json
{
  "data": {
    "hero": {
      "name": "R2-D2"
    }
  }
}
```

If you wanted to run the same query twice in a single HTTP request, the batched json data to POST to the server would be:

```json
[
  {
    "query": "{hero{name}}"
  },
  {
    "query": "{hero{name}}"
  }
]
```

And the response would be of the form:

```json
[
  {
    "data": {
      "hero": {
        "name": "R2-D2"
      }
    }
  },
  {
    "data": {
      "hero": {
        "name": "R2-D2"
      }
    }
  }
]
```