node.js에서 graphql API를 생성하는 실용적인 접근 방식 - 1부(스키마 및 쿼리)

아주 오랫동안 REST API는 클라이언트와 서버 간의 통신을 위한 가장 인기 있는 인터페이스였습니다.

그러나 최근 몇 년 동안 Facebook에서 개발한 Graphql이 점차 각광을 받고 있습니다.

이 게시물에서는 그 이유와 모든 이론적인 내용에 대해 많이 다루지 않고 구현을 이해하기 위해 연락처 목록 API를 만들 것입니다. 그래서 우리는 간다

쿼리 및 스키마
스키마는 모든 graphql 애플리케이션의 기반입니다. 클라이언트와 서버 간에 전송되는 각 데이터를 정의하고 설명합니다.
아래 연락처 목록의 스키마는 다음과 같습니다.

type Contact {
  name: String!
  phoneNo: String
  address: String!
  id: ID! 
}

type Query {
  countContact: Int!
  allContacts: [Contact!]!
  findContact(name: String!): Contact
}


위의 스키마는 두 가지 유형을 정의합니다. 첫 번째는 속성 name , phoneNo 및 나머지가 있는 연락처 유형입니다.

모든 속성은 유형과 연결됩니다. name 속성은 graphql의 Scalar 유형 중 하나인 String 유형입니다.

id 필드는 고유 식별자를 나타내는 graphql의 스칼라 유형이기도 한 ID 유형입니다. 단순화를 위해 ID 유형은 고유한 문자열 유형입니다.

그러나 Contact 유형에서 phoneNo를 제외한 모든 필드에 값을 지정해야 한다는 점에 유의하는 것이 중요합니다. 이것은 스키마에서 느낌표(!) 표시로 표시됩니다.

스키마에 정의된 두 번째 유형은 쿼리입니다. 모든 graphql 스키마에는 수행할 수 있는 작업(쿼리)을 설명하는 쿼리 스키마가 포함되어 있습니다.

스키마는 세 가지 쿼리를 정의합니다. countContact는 정수를 반환하고 allContacts는 연락처 개체의 배열(목록)을 반환하고 findContact는 이름 매개 변수를 가져와서 연락처 개체를 반환합니다.

각 쿼리에서 느낌표(null이 아님)를 기록해 두는 것도 중요합니다. countContact는 확실히 정수 필드를 반환하고 allContacts는 연락처 개체 목록을 반환하며 목록에는 null 값이 포함되지 않습니다. findContact에는 문자열 매개 변수가 지정되어야 하며 연락처 개체 또는 null을 반환해야 합니다.

따라서 스키마는 클라이언트가 서버에 보낼 수 있는 쿼리, 쿼리가 가질 수 있는 매개 변수의 종류, 쿼리가 반환하는 데이터의 종류를 설명합니다.

쿼리 샘플
이미 저장된 데이터가 있다고 가정합니다. 실행할 수 있는 몇 가지 쿼리와 응답을 살펴보겠습니다.

쿼리 스키마에 정의된 쿼리 중에서 가장 간단한 것은 countContact입니다.

query {
  countContact
}


다음과 같이 반환됩니다

{
  "data": {
    "countContact": 1
  }
}


다음은 allContacts 쿼리입니다. countContact 쿼리는 매우 간단하고 간단하지만 allContacts는 약간 복잡합니다. 연락처 개체 목록을 반환하고 graphql에서 반환하려는 개체의 필드를 정의해야 하기 때문입니다. 여기에는 큰 이점이 있지만 자세한 내용은 다루지 않겠습니다.

query {
  allContacts{
    name
    address
  }
}


이 샘플의 연락처 개체에서 반환하려는 필드를 추가하거나 제거할 수 있습니다. 이름 및 주소 필드만 선택합니다.

응답은 다음과 같습니다.

{
  "data": {
    "allContacts": [
      {
        "name": "Prince Whyte",
        "address": "Portharcourt Nigeria"
      }
    ]
  }
}


마지막 쿼리 findContact는 이름 매개변수를 받고 세부정보를 반환합니다.

query {
  findContact (name: "Prince Whyte") {
    address
    phoneNo
    id
  }
}


_연락처 개체에서 반환하려는 필드를 추가하거나 제거할 수 있습니다. _

레코드가 발견되면 응답은 다음과 같습니다.

{
  "data": {
    "findContact ": {
      "address": "Portharcourt Nigeria",
      "phoneNo": "018267368",
      "id": "4c431436-4650-bc57-11e9-8b80ba53d593"
    }
  }
}


반환 값이 null 허용으로 표시되었으므로 알 수 없는 항목의 세부 정보를 검색하면

응답은 다음과 같습니다.

{
  "data": {
    "findContact": null
  }
}


결론적으로 Graphql과 관련하여 온라인에서 찾은 내용은 다음과 같습니다.

As you can see, there is a direct link between a GraphQL query and the returned JSON object. One can think that the query describes what kind of data it wants as a response. The difference to REST queries is stark. With REST, the URL and the type of the request have nothing to do with the form of the returned data.



GraphQL 쿼리는 서버와 클라이언트 간에 이동하는 데이터만 설명합니다. 서버에서 데이터를 원하는 방식으로 구성하고 저장할 수 있습니다.

이름에도 불구하고 GraphQL은 실제로 데이터베이스와 관련이 없습니다. 데이터가 저장되는 방식은 상관하지 않습니다. GraphQL API가 사용하는 데이터는 관계형 데이터베이스, 문서 데이터베이스 또는 GraphQL 서버가 예를 들어 REST를 통해 액세스할 수 있는 다른 서버에 저장할 수 있습니다.

다음으로 우리는 apollo-server를 살펴볼 것입니다.

좋은 웹페이지 즐겨찾기