전단 에 알 아야 할 GraphQL
GraphQL 이 왜 필요 합 니까?
제 블 로 그 를 예 로 들 면 현재 목록 페이지 에서 모든 글 에 필요 한 데이터 구 조 는 다음 과 같 습 니 다.
{
"title": " GraphQL",
"updatedAt": "2018-04-22T03:46:34Z",
"bodyText": " ...",
}
한편, 글 상세 페이지 의 데이터 구 조 는 다음 과 같다.
{
"title": " GraphQL",
"updatedAt": "2018-04-22T03:46:34Z",
"bodyHTML": " ...",
}
또 글 의 조회 수 를 기록 하여 나중에 큰 V 가 되 어 hhh 를 보 여 드 리 고 싶 습 니 다 ~
{
"title": " GraphQL",
"updatedAt": "2018-04-22T03:46:34Z",
"bodyHTML": " ...",
"view": "29898",
}
그러면 문제 가 생 겼 습 니 다. 두 페이지 의 데이터 구조 title 과 updateAt 의 데 이 터 는 중복 되 고 body 는 다 릅 니 다. 그리고 지금 은 나중에 필요 할 때 사용 할 view 필드 를 설계 하고 싶 습 니 다.편 의 를 위해 인터페이스 하나만 쓰 고 bodyText 와 bodyHTML 로 돌아 가면 데이터 가 남아 도 는 것 도 불합리 하 다.그러나 두 개의 인 터 페 이 스 를 나 누 면 좀 번 거 롭 고 낭비 적 이다.
이 는 단순 한 예 일 뿐 평소 개발 과정 에서 수요 변화 가 특히 잦 고 문제 가 더 복잡 해 질 수 있 으 며, 현재 주류 인 RESTful API 가 드 러 내 는 문제 도 점점 뚜렷 해 지고 있다.
원천 에서 출발 할 수 있다 면 인터페이스 가 되 돌아 오 는 데 이 터 는 생산 자 (백 엔 드) 가 아니 라 사용 자 (전단) 가 결정 하면 보 이 는 대로 얻 는 효 과 를 얻 을 수 있 고 이때 GrapQL 도 이에 따라 생 겨 났 다.
GraphQL 이란 무엇 입 니까?
먼저 홈 페이지: 영어 | 중국어.
GraphQL 은 API 에 사용 되 는 조회 언어 이자 데이터 조 회 를 만족 시 키 는 실행 시 입 니 다.GraphQL 은 API 의 데이터 에 대해 이해 하기 쉬 운 완전한 설명 을 제공 하여 클 라 이언 트 가 필요 한 데 이 터 를 정확하게 얻 을 수 있 고 불필요 하지 않 으 며 API 가 시간 이 지 날수 록 쉽게 발전 할 수 있 으 며 강력 한 개발 자 도 구 를 구축 하 는 데 도 사용 할 수 있 습 니 다.
즉, GraphQL 은 api 를 호출 할 때 api 가 돌아 오 는 데이터 구 조 를 결정 하여 필요 한 데 이 터 를 정확 하고 불필요 하 게 얻 을 수 있 습 니 다.GraphQL 이 이렇게 대단한 데 어떻게 했 을까요?우 리 는 먼저 나의 블 로그 글 상세 페이지 인터페이스 에 착안 하여 GraphQL 의 여산 정 체 를 밝 혔 다.
let data = {
query: `query {
repository(owner:"simbawus", name: "blog") {
issue(number: ${articleId}) {
title
updatedAt
bodyHTML
}
}
}`
};
Actions.getIssues(data).then((res) => {
let issue = res.data.data.repository.issue;
this.setState({
title: issue.title,
updatedAt: new Date(issue.updatedAt).format('yyyy-MM-dd'),
bodyHTML: issue.bodyHTML
})
})
이것 은 GitHub GraphQL API 를 기반 으로 하 는 요청 입 니 다. 일반 요청 과 유일한 차이 점 은 JSON 대상 이 아니 라 문자열 입 니 다. 이 문자열 은 클 라 이언 트 가 서버 에서 데 이 터 를 되 돌려 주 기 를 원 하 는 구체 적 인 구 조 를 설명 합 니 다. 다음 JSON:
{
"data": {
"repository": {
"issue": {
"bodyHTML": " ...",
"title": " GraphQL",
"updatedAt": "2018-04-22T03:46:34Z",
}
}
}
}
이 예 를 들 어 GraphQL 의 몇 가지 핵심 개념 을 소개 하 겠 습 니 다.
query & mutation
query 의 중국어 뜻 은 검색 을 하면 RESTful 표준 중의 get 에 대응 하고 mutation 은 변경 을 의미 하 며 post, delete, patch 와 put 에 대응 합 니 다.
connection
connection 은 같은 요청 에서 관련 대상 을 조회 할 수 있 도록 합 니 다.connection 을 통 해 하나의 Graph QL 요청 만으로 RESTful API 의 여러 요청 을 수행 할 수 있 습 니 다.
예 를 들 어 GitHub GraphQL API 문서 에서 저 희 는 issue 대상 을 조회 하 는 동시에 labels 대상 도 찾 을 수 있 습 니 다.
let data = {
query: `query {
repository(owner:"simbawus", name: "blog") {
issue(number: ${articleId}) {
title
updatedAt
bodyHTML
}
labels(first: 100){
nodes{
name
}
}
}
}`
};
field
field 는 대상 에서 가 져 올 수 있 는 데이터 셀 입 니 다.GraphQL 공식 문서 에서 말 한 것 처럼 "GraphQL 조회 언어 는 본질 적 으로 대상 에서 field 를 선택 하 는 것 이다."모든 GraphQL 작업 은 응답 결과 의 구조 가 틀 리 지 않도록 맨 밑 에 있 는 field 를 가리 키 고 반환 값 을 스칼라 로 해 야 합 니 다.
argument
argument 는 RESTful API 표준 과 일치 합 니 다. 이 인 터 페 이 스 를 요청 하 는 매개 변수 입 니 다. 예 를 들 어 위의 issue 의 number 매개 변 수 는 요청 한 제
${articleId}
번 째 issue 를 표시 합 니 다.전단 에 있어 GraphQL API 를 조회 할 때 위 에서 말 한 이 몇 가지 개념 을 기본적으로 알 아야 합 니 다. 구체 적 인 응용 은 제 글 이 GitHub GraphQL API 를 어떻게 이용 하여 개인 블 로 그 를 개발 하 는 지 참고 할 수 있 습 니 다.자세 한 코드 는 제 github: simbawus / blog 를 볼 수 있 습 니 다. star, fork 를 환영 합 니 다.
GraphQL 의 미래
GraphQL 의 장점 은 모두 가 알 고 있 을 것 입 니 다. 그런데 왜 이렇게 좋 은 기술 은 광범 위 한 응용 과 홍 보 를 얻 지 못 했 습 니까?
이상 을 바탕 으로 GrapQL 은 현재 기본적으로 기술적 추구 와 실력 이 있 는 창업 회사 와 일 선 공장 에서 사용 되 고 있 으 며 페 이 스 북 이 더욱 진일보 하여 클 라 우 드 기반 의 해결 방안 을 제시 하여 전단 을 해방 시 키 기 를 바란다.
토론 을 환영 합 니 다. 좋아요 하고 가세 요 ~
배 고 파 요. 배 고 파 요.
simbawu | github | segmentfault | 알 고 있 습 니까?
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Thymeleaf 의 일반 양식 제출 과 AJAX 제출텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.