GraphQL이란?ASP에서 사용하는 방법NET 코어 웹에이피?간단하게 설명해 드릴게요..

14636 단어 apigraphqldotnet
ASP 에서 왔습니다.NET 웹 양식에서 ASP로 이동합니다.NET AJAX, 그 다음은 ASP입니다.NET MVC 및 ASP.NET 웹 API, 구축 API는 이미 매우 큰 발전을 이루었다.API는 처음에 다른 컴퓨터에서 실행할 수 있는 기능으로 대규모의 발전을 거쳐 현재 응용 프로그램의 수요에 적응했다.
내가 참여하는 모든 프로젝트에서 REST API는 항상 사용됩니다.REST API 아키텍처는 간단명료하고 새로운 개발자가 이해하기 쉬우며 모든 API가 같은 구조를 가지기 때문에 오류가 발생하기 쉽다.
일반적인 REST API에서는 각 객체 유형마다 별도의 끝점이 있습니다.이 끝점은 사용자의 구현을 바탕으로 GET, POST, PUT, PATCH 및 DELETE 작업을 제공합니다.이 외에도 ID 또는 날짜 기반 등의 데이터를 필터링할 수 있는 쿼리 매개 변수를 가져올 수 있습니다.그러나 당신이 결과를 얻을 때, 당신은 모든 물체를 얻을 수 있다.영역별 설계 아키텍처를 사용하고 수백만/수십억 개의 집합 대상을 처리할 때 더 큰 문제가 될 수 있습니다.

GraphQL에 진입 중...


GraphQL is a query language for APIs. GraphQL gives clients the power to ask for exactly what they need and nothing more, makes it easier to evolve APIs over time, and enables powerful developer tools.

graphql.org


페이스북은 2012년 이 같은 문제를 해결하기 위해 GraphQL을 구축했다.GraphQL은 보통 단점이 있습니다.그리고 이 단점은 조회를 받아들인다.지금까지 그다지 매력적이지는 않았지만, 진정한 아름다움은 내가 방금 언급한 의문에 있다.검색에서 원하는 유형, 필터로 사용할 속성 값, 되돌려 주고 싶은 유형의 속성을 언급합니다.

GraphQL은 어떻게 일합니까?


예상한 바와 같이, 한 개 이상의 유형을 요청할 수 있으며, 모든 속성에 따라 검색/선별할 수 있으며, 관심 있는 속성만 얻을 수 있습니다.질의는 JSON 형식으로, 결과를 JSON 형식으로 반환합니다.이는 서버의 왕복을 여러 번 절약하고 서버 부하, 네트워크 유량과 지연을 줄일 수 있다.
나는 네가 조회 예시를 보고 매우 기뻐하는 것을 안다.내가 너희들에게 알려줄게.

묻다


query PersonAndFriends {
   person (id: 2001) {
      name
      friends {
         name
      }
   }
}

결실


{
   "data": {
   "person": {
       "name": "Rose DeWitt",
       "friends": [
       {
          "name": "Jack Dawson"
       },
       {
          "name": "Cal Hockley"
       },
       {
          "name": "Ruth DeWitt"
       }
     ]
    }
  }
}
위에서 나는'Person And Friends'라는 검색어를 정의했다. 내가 요청한 사람은 ID=2001인데 나는 그 이름과 친구 필드를 되돌려 주고 싶다.friends (그룹일 수 있음) 에서name 필드만 되돌려 달라고 요구합니다.이외에도 GraphQL 조회의 모양은 조회 결과와 매우 일치합니다.멋있지 않아요?
세 가지 유형의 조회가 있다.조회 자체, 변이 및 구독조회는 데이터를 요청하는 방식이고mutate는 데이터를 변경하는 방식(예를 들어 신기록 만들기, 갱신 기록, 삭제 기록)이다.
검색은 변수를 받아들인다. 이렇게 하면 문자열을 조작해서 파라미터를 동적으로 배치할 필요가 없다.

변수 포함 질의


query PersonQuery($id: ID!) {
  person(id: $id) {
    name
  }
}

{
  "id": 2001
}
{
"id": 2001
}

결실


{
  "data": {
    "person": {
      "name": "Rose DeWitt",
    }
  }
}
내부에서, 검색과 형식의 모든 필드는 Resolver라는 단독 함수로 지원되며, 이 함수는 개발자가GraphQL에 제공합니다.쿼리의 실행은 들어오는 매개 변수를 사용하여 쿼리를 호출하는 해상도 함수로부터 시작됩니다.함수가 객체를 반환하면 GraphQL은 해당 객체로 전송되는 파서를 실행합니다.선택한 필드마다 GraphQL은 값을 얻기 위해 해상도 함수를 호출합니다.모든 분석 프로그램이 대상이 아닌 표량 형식을 되돌릴 때까지 이 과정은 계속될 것입니다.이것은 GraphQL이 모든 잎을 덮을 때까지 그림의 뿌리부터 훑어보는 것과 같아서,graph 검색 언어라고 명명됩니다.

GraphQL은 어떻게 사용합니까?


GraphQL을 사용하기 위해서는 두 가지를 제공해서 GraphQL 서버를 구축해야 한다.우선, 대상 유형, 어떤 데이터를 조회할 수 있는지, 그리고 어떻게 조회할 수 있는지.GraphQL에서 질의를 검증하고 실행하는 데 도움이 되는 유형 및 패턴을 정의합니다.그 다음에 모든 유형과 필드의 해상도 함수입니다.

유형 정의


type Query {
  actor(episode: Episode): Cast
  car(id: ID!): Vehicle
}

type Cast {
  id: ID!
  name: String!
  episode: [Episode!]!
  height(unit: LengthUnit = METER): Float
}

enum Episode {
  PILOT
  ONE
  FINALE
}
"!"필드 유형 뒤에 표시 필드를 비워둘 수 없으며 필드를 질의할 때 항상 값이 있습니다.[과]는 배열을 나타냅니다.필드에는 매개 변수가 있을 수 있고 매개 변수에는 기본값(예: 높이 필드)이 있을 수 있습니다.내장 눈금 유형은 Int(32비트 정수), Float, String, Boolean 및 ID(인간이 읽을 수 없는 고유 문자열)일 수 있습니다.
검색 구조는 실제로는'query'라는 또 다른 유형이다.그것은 어떤 필드가 조회될 수 있는지, 그리고 필드마다 어떤 파라미터를 받아들일 수 있는지 정의한다.또한 비워둘 수 없는 필드와 매개변수를 정의합니다.돌연변이도 같은 방식으로 정의된다.
GraphQL에서는 질의나 변이에 매개 변수로 전달할 수 있는 입력 객체 유형을 정의할 수 있습니다.입력 유형은 입력 키워드를 사용하여 개별적으로 정의해야 합니다.입력 유형은 다른 입력 유형과 관계가 있지만 객체 유형이나 매개변수를 참조할 수 없습니다.
input FoodReviewInput {
  stars: Int!
  comment: String
}

파서 함수 정의하기


이것은 매우 간단합니다. 함수부터 검색어를 해석하십시오.
Query: {
  actor(obj, args, context, info) {
    return context.db.getActorByID(args.id).then(
      response => new Actor(response)
    )
  }
}
모든 함수에는 네 개의 매개 변수가 있는데 obj는 전 함수를 실행한 후에 생성된 대상이고args는 필드나 조회 매개 변수이며 context는 로그인 사용자 등 정보를 포함하는 상하문 대상이며 info는 조회와 그 유형에 대한 정보를 포함한다.
이와 같이 유형과 필드에 대한 나머지 함수를 정의할 수 있습니다.
Actor: {
  name(obj, args, context, info) {
    return obj.name
  }
Vehicle(obj, args, context, info) {
    return obj.vehicleIDs.map(
      id => context.db.getVehicleByID(id).then(
        response => new Vehicle(response)
      )
    )
  } 
}

하지만 이것은 매우 큰 일인 것 같다!


네, 하지만 좋은 소식은 많은 사용 가능한 라이브러리들이 복잡성에서 벗어날 수 있다는 것입니다.대상의 정의, 권한 부여, 안전성, 페이지 나누기, 캐시 등을 담당합니다.GraphQL 사이트는 선택한 프로그래밍 언어 here 에서 사용할 수 있는 라이브러리와 도구 목록을 제공합니다.

에서 GraphQL을 사용하는 방법순핵심?


나는 hotchocolate library를 찾았는데, 대부분의 작업을 완성했고, 곧 깔끔한GraphQL 서버를 만들었다.나는 그것의 강좌가 매우 간결하다는 것을 발견했다. 너는 그것을 찾을 수 있다. here

설계자 토론: GraphQL은 언제 사용합니까?



다른 어떤 기술과 마찬가지로 GraphQL도 장단점이 있다.당신이 구조 결정을 내리고 싶을 때, 이러한 장점과 단점을 의식하고, 이 기술이 당신이 이루고자 하는 목표를 실현할 수 있도록 확보해야 한다.GraphQL 및 REST Api의 다음 사항을 알아냈습니다.

당신이 얻은 것은:

  • 무엇을 필요로 하는지 묻는다. 알다시피 GraphQL에서 당신에게 되돌려주고 싶은 필드를 언급했는데 이것은 GraphQL을 사용하는 주요한 장점 중 하나이다.특히 대형 집합 대상을 처리할 때 공공 인터넷을 통해 데이터를 전송해야 하기 때문에 매우 유익하다.REST API 자체에는 이 기능이 없지만 기술적으로는 OData을 사용하여 REST API를 조회할 수 있습니다.그러나 내가 보기에 GraphQL은 이 방면의 표준과 같아서 기술보다 좋은 표준에 의존한다.
  • n+1 문제 해결: 이런 상황을 상상해 보세요. 당신은 하나의 루트 대상(예를 들어 한 사람)을 얻은 다음에 그의 프렌즈 집합을 반복해서 훑어보고 다른 요청을 보내서 각각 프렌즈 대상을 얻습니다.GraphQL은 검색에서 원하는 내용을 언급할 수 있기 때문에 이 문제를 해결했습니다.
  • 조합 조회: 조합 조회는 같은 조회에서 단독, 상관없는 대상을 요청하는 것을 말한다.예를 들어, 귀환 인원과 서적에 대한 조회를 작성할 수 있습니다.보통 두 개의 단독 API 호출이 필요하지만 GraphQL을 사용하면 한 검색에서 완성할 수 있습니다.
  • API 버전 제어:GraphQL 조회, 그 결과는 JSON 형식입니다.따라서 모드에 변경 사항이 있으면 JSON에서 이러한 변경 사항을 처리합니다.그리고 GraphQL 단점을 사용하는 모든 후속 시스템은 JSON을 사용하기 때문에 그것들에게도 안전하다.분명히 한 필드를 삭제하거나 이름을 바꾸면, 이것은 여전히 돌파적인 변화이다.
  • 참고 사항:

  • 캐시: REST API는 주로 HTTP의 작업 방식을 바탕으로 하고 HTTP는 좋은 캐시 메커니즘을 가지고 있다.그러나 GraphQL은 자신의 캐시를 실현하기 위해 더 많은 작업을 필요로 한다.
  • 더 사용하기 어려워요Microservice Architecture: 서로 다른 집합에 단독 마이크로 서비스를 제공할 때 REST API에서 단독 URL을 호출하여 이 두 대상을 얻을 수 있습니다.그러나GraphQL에서는 하나의 단점만 처리하기 때문에, GraphQL은 백엔드에서 각각 이 단점을 호출하여 데이터를 모아서 당신에게 보내야 합니다.이것은 일부 해결 방안에서 결코 이상적이지 않을 수도 있다.
  • 조합 조회: 조합 조회는 좋은 기능이지만 조심하지 않으면 일부 데이터를 사용자에게 노출시킬 수 있습니다. 이 사용자들은 이 부분의 데이터에 접근해서는 안 됩니다.
  • 모니터링: REST API는 HTTP 프로토콜을 바탕으로 하기 때문에 많은 층의 모니터링이 이를 둘러싸고 구축되었다.REST API 호출을 내부 및 외부에서 모니터링 및 로깅할 수 있습니다.그러나GraphQL의 모니터링 도구는 여전히 매우 얇습니다. 만약 해결 방안에 모니터링과 로그 기록이 필요하다면, 사용할 수 있는 것이 무엇인지 고려해야 합니다.
  • 어떻게 더 많이 알아요...

  • https://graphql.org/learn
  • https://graphql.org/code
  • https://chillicream.com/docs/hotchocolate/get-started/
  • 워리아!읽어주셔서 감사합니다.

    좋은 웹페이지 즐겨찾기