2016-12-20 1 views
1

단일 트랜잭션에서 전체 변이 조작을 실행하는 GraphQL 서비스를 제공하려고합니다.단일 트랜잭션에서 GraphQL 돌연변이 연산

최상위 필드는 단일 트랜잭션에서 순차적으로 처리되고 이에 따라 데이터베이스가 변경됩니다. 실행 중에 오류가없는 경우에만 변경 사항을 데이터베이스에 커밋해야하며 그렇지 않은 경우에는 모두 롤백해야합니다.

지금 나는 두 가지 질문이 다음 GraphQL 사양에 따라

  1. 를, 최상위 필드의 직렬 실행은 각 최상위 필드가 그 전에, 그 수정 후 상태를 반영하는 값으로 채워된다는 것을 의미합니다 나중에 필드가 오류를 일으키는 경우 알려줍니다. 나중 상위 필드가 트랜잭션을 롤백하는 오류를 일으킬 때 이것이 필드의 실제 값이 아닌가?

  2. 최상위 필드의 변경이 실패한 경우 트랜잭션이 이후 처리를 방해하는 상태가되어 모든 변경 사항이 롤백되기 때문에 다음 최상위 필드를 실행하는 것은 의미가 없습니다. GraphQL 의미론에 따라 해당 필드의 실행을 건너 뛰어도 괜찮습니까 (null을 반환하고 오류 목록에 항목을 반환 할 수 있습니까)?

+1

그것은 모두 UR 백엔드 구현에 따라 다르며 GraphQL과는 아무런 관련이 없습니다. GraphQL은 백엔드와 상호 작용하는 방법에 대한 인터페이스 일뿐입니다. – Mox

+0

예, 좋습니다.하지만 API 우수 사례/API 사용자 기대 사항에 대한 질문이기도합니다. – Leisetreter

답변

2

GraphQL 사양의 일부를 잘못 이해하게되었습니다. 귀하의 질문을 이해하는 경우 DB 쓰기/트랜잭션 작업을 별도의 돌연변이로 생각하고 있습니다.

GraphQL에는 하나 이상의 최상위 필드를 포함 할 수있는 변형 루트 객체가 있습니다. 이 최상위 필드는 개별적인 변이입니다. 우리가 트랜잭션 행위를 가진 서비스를 원한다면, 우리는 그것을 하나의 변이로 구현할 것이다. 백 엔드 구현은 트랜잭션 동작을 보장하는 방법을 처리해야합니다.

당신이 혼란스러워하는 부분은 여러 개의 돌연변이 최상위 필드 (선택 설정)가있을 때 일어나는 일과 관련이 있습니다. 각 돌연변이는 독립적입니다.

+0

필자는이 스펙을 다음과 같이 해석합니다. GraphQL 요청에 하나의 GraphQL 연산이 있습니다. 이는 변이입니다. 돌연변이는 최상위 필드를 순차적으로 수정합니다 (필드 해결의 부작용에 의해 서버에서 구현 됨). 이제 모든 최상위 필드 수정 사항을 하나의 트랜잭션에 넣고 싶습니다. 그렇다면 최상위 필드가 오류가 발생하면 최상위 필드를 분석 할 때 부작용이 발생하지 않도록 해석 될 수 있습니까? – Leisetreter

+0

아니요, 사양을 그런 식으로 해석해서는 안됩니다. GraphQL은 트랜잭션과 관련이 없습니다. 선택한 저장소 (영구적 또는 비 영구적)를 사용하여 장면 뒤에 저장된 데이터에 대한 인터페이스 일뿐입니다. 거래는 GraphQL 레이어를 지나쳐야합니다. –

관련 문제