Serving GraphQL with HTTP
Web Request Pipeline
- 최신 웹 프레임워크들은 대부분 미들웨어 스택을 통과하는 파이프라인 모델을 사용한다.
- 이 때 GraphQL은 모든 인증 미들웨어의 뒤쪽에 위치해야 한다.
- GraphQL을 이용해 HTTP 엔드포인트 핸들러에서와 동일한 세션, 사용자 정보에 접근할 수 있다.
URIs, Routes
- GraphQL은 REST에서와 달리 개념 모델이 엔티티 그래프이다(REST는 리소스).
- GraphQL의 엔티티는 URL로 식별되지 않으며 따라서 주어진 서비스에 대한 모든 요청은 관습적으로 /graphql
엔드포인트 하나에서 수행 된다.
HTTP Requests
GET
- HTTP GET 요청을 수신할 경우 GraphQL 요청을
query
쿼리스트링에 지정해야 한다.
만약 아래와 같은 쿼리를 실행하고자 한다면
{
me {
name
}
}
해당 요청은 아래의 URL과 같이 쿼리파라미터를 통해 전송 된다.
http://myapi/graphql?query={me{name}}
POST
- 표준 GraphQL POST 요청은
application/json
content-type을 사용한다.
- 바디에는 아래와 같은 json 타입이 들어가며
operationName
, variables
는 선택적으로 사용할 수 있다.
- operationName
의 경우 쿼리에 여러 작업이 있을 경우에 사용한다.
- 만약 쿼리 스트링 파라미터를 사용한다면 GET에서와 같은 방식으로 처리 된다.
- header의 content-type을
application/graphql
으로 사용할 수도 있는데, 이 경우 바디의 내용을 GraphQL 쿼리 스트링으로 처리한다.
Response
- json 형식으로 반환 되며 데이터와 오류가 반환될 수 있다(오류는 오류가 있는 경우만).
- 아래 예시의 경우 만약 오류가 없다면 errors
필드는 없어야 한다.
{
"data": { ... },
"errors": [ ... ]
}