Graphene Node에 대해 공부하기에 앞서 GraphQL에서 사용하는 cursor 개념 자체를 먼저 알아보도록 한다.
페이지네이션에는 두 가지 개념이 있다.
[그림1]
[그림2]
페이스북과 같이 사용자가 특정 정보를 보았는지/ 아닌지가 중요한 서비스의 경우 위와 같은 상황은 달가운 상황이 아닐 것이다. 이러한 상황을 피하기 위해 페이스북에서 만든 것이 connection/edge/node 개념을 이용한 cursor 기반의 페이지네이션이다.
Apollographql 제공에서 가져왔다.
Node
는 graphene.relay
가 제공하는 interface로, 해당 interface는id
필드만을 포함하고 있다.relay.Node
를 interface로 갖는 object는 id를 이용해 Node
를 알아내기 위해 get_node
메소드를 가져야 한다.class Ship(graphene.ObjectType):
'''A ship in the Star Wars saga'''
class Meta:
interfaces = (relay.Node, )
name = graphene.String(description='The name of the ship.')
@classmethod
def get_node(cls, info, id):
return get_ship(id)
Ship
타입이 반환하는 id
는 스칼라이다.Ship(id=1)
인스턴스는 Ship:1
에 대한 base64 인코딩 값에 해당하는 "U2hpcDox"를 반환할 것이며 이는 node를 id로 쿼리 했을 때 유용하게 사용될 수 있다.