노드에서 API 클라이언트에 자체 개발을 구축합니다.js

📣 이 글은 최초로 Build your own API client in Node.js에 나왔다The Bearer Blog.
주의: 최근에 우리는 큰 업데이트를 보았기 때문에 이것은 위대한 시간이다.
REST API와 상호 작용할 때 API Provider를 직접 호출하거나 사용하는 클라이언트입니까?많은 API가 클라이언트, 패키지 또는 SDK를 제공합니다.이런 상황에서 이 용어들의 의미는 모두 같다.클라이언트를 제공하지 않는 API를 사용하는 경우 어떻게 됩니까?필요하십니까?무슨 좋은 점이 있습니까?본고에서, 우리는 당신이 응용 프로그램을 구축하고자 하는 몇 가지 원인을 탐구할 것입니다.또한 보다 포괄적인 API를 기반으로 하는 예제 API 클라이언트를 구축합니다.

용례
API 클라이언트(API SDK 또는 API 패키지라고도 함)는 API와 간접적으로 상호 작용하는 인터페이스입니다.API 클라이언트의 일반적인 기능은 다음과 같습니다.
  • 중앙 집중식 인증 및 설정
  • 빠른 성장
  • 오류 논리 처리 및 사용자 정의 오류 제공
  • 특정 언어의 약정 집행
  • 대부분의 API 클라이언트의 주요 목표는 개발을 단순화하는 것입니다.이렇게 하면 API의 새 사용자가 더욱 빨리 시작하고 실행할 수 있습니다.만약 당신이 API의 공급자라면 클라이언트를 고려하면 매우 유용할 것이다.만약 API 사용자라면, 패키지를 만들어서 다시 사용하는 기능을 추상화할 수 있습니다.심지어 일부 도구는 이 과정을 자동화할 수 있다.만약 API가 OpenAPI 표준을 사용한다면 Swagger's Codegen 등 도구는 여러 언어에 SDK를 생성할 수 있습니다.
    이 점을 감안하여, Node에 우리의 API 클라이언트를 처음부터 어떻게 만드는지 살펴봅시다.js와 브라우저.

    계획 및 설정
    이 예에서 우리는 몇 가지 핵심 기능을 중점적으로 소개하고 싶다.
  • 중앙 집중식 설정 및 인증
  • 단순화된 REST 상호 작용
  • 우리는 또한 우리의 요구에 부합되는 요청 라이브러리를 선택하고 싶다.Fetch는 브라우저의 표준 설정이기 때문에 사용할 것입니다.우리는 isomorphic-unfetch 와 같은 라이브러리를 포함하여 유류 지원과 노드를 관리할 것이다.js 지원.원한다면 본고에서 언급한 모든 개념을 library of choice로 개편할 수 있습니다.노드에 포함된 https 모듈을 사용할 수도 있습니다.서버 사용에만 관심이 있다면
    ⚠️ 주의: 우리가 구축하고 있는 클라이언트가 브라우저와 노드에서 일할 때.js에서 중요한 것은 클라이언트 자바스크립트에서 API 키를 공개하지 않는 것입니다.클라이언트 호출을 수행하기 전에 사용 중인 API를 사용하여 기본 설정 키 사용법을 확인하십시오.
    시작하려면 노드가 있는지 확인하십시오.js 및 NPM이 설치되어 있습니다.그리고 새 노드를 설정합니다.다음 터미널 명령을 사용하는 js 항목:
    # Make a new directory
    mkdir node-api-client-demo
    
    # Change to the new directory
    cd node-api-client-demo
    
    # Initialize a new Node.js project
    npm init -y
    
    다음에 index.js라는 새 파일을 만듭니다.사용하기 편리하도록 모든 코드를 파일에 넣을 것입니다. 그러나 원한다면 코드를 모듈로 분해할 수 있습니다.

    클라이언트 인터페이스 정의
    이 예에 대해 우리는 사용할 것이다.이것은 현재 키 기반 인증만 제공합니다. 이것은 우리의 예시를 간단명료하게 합니다.다음은 계정과 API 키가 필요합니다.당신은 아래의 순서에 따라 이 두 목표를 실현할 수 있습니다.또는 유사The Movie DB API 또는 유사 API 키 기반 플랫폼을 사용할 수 있습니다.
    포장기를 구축하기 전에 사용자가 어떻게 상호작용을 원하는지 봅시다.이것은 문서를 우선적으로 하는 방법이다.
    const api = new DevTo({
      api_key: "xxxxxxxxx"
    })
    
    api.getArticles(options).then(articles => {})
    api.getArticleById(id).then(article => {})
    
    api.createArticle(body).then(article => {})
    
    위 코드에서 우리는 DevTo류의 실례를 만들어 api_key에 전달했다.그런 다음 API와 상호 작용하는 다양한 방법을 볼 수 있습니다.간결하게 보기 위해서, 우리는 문장을 검색하고, 특정한 문장을 얻으며, 새로운 문장을 만드는 데 중점을 둘 것이다.문서 URL에 주의를 기울이면, 내부 Getter와setter가 같은 이름을 사용합니다.이것은 필수적인 것은 아니지만, 명명 방안은 상당히 흔하다.
    이제 우리는 우리 반을 건설하기 시작할 수 있다.

    클라이언트 클래스 구축
    앞의 index.js 파일을 열고 다음과 같이 클래스를 생성합니다.
    
    class DevTo {
      constructor(config) {
        this.api_key = config.api_key
        this.basePath = "https://dev.to/api"
      }
    }
    
    위의 코드는 DevTo클래스를 정의하고 구성 함수를 설정 수용 대상으로 설정합니다.그리고 설정api_key에서 설정하고 basePath 속성을 API 단점의 기본 URL으로 설정합니다.현재 설치 및 설치가 필요합니다HTTP library.우리는 이 예에서 isomorphic-unfetch 을 사용할 것이다. 왜냐하면 그것은 약속에 기초한 것이기 때문이다.
    설치isomorphic-unfetch:
    npm install isomorphic-unfetch
    
    index.js 파일 상단에 있는 패키지가 필요합니다.
    // index.js
    const fetch = require("isomorphic-unfetch")
    
    class DevTo {
      /*...*/
    }
    
    다음에 우리는 우리의 방법을 제정할 수 있다.우리는 구축과 요청을 처리하기 위해 상기 예시 중의 세 가지 방법과 다시 사용할 수 있는 request 방법이 필요합니다.
    
    class Devto{
      constructor(config) {
        this.api_key = config.api_key
        this.basePath = "https://dev.to/api"
      }
    
      request(endpoint, options) { /*...*/ }
    
      getArticles(options) {
        // 1. Convert options to query string
        // 2. return this.request
      }
      getArticleById(id) {
        // 1. Build endpoint based on id
        // 2. return this.request
      }
      createArticle(body) {
        // 1. Build endpoint
        // 2. return this.request with body attached
      }
     }
    
    우리 위의 방법은 모든 방법에 필요한 절차를 포함한다.우리는 단독으로 그것들을 구축할 것이다. 그러나 우선, 우리는 request 사용할 수 있도록 해야 한다.
    
    request(endpoint = "", options = {}) {
    
      let url = this.basePath + endpoint
    
      let headers = {
        'api_key': this.api_key,
        'Content-type': 'application/json'
      }
    
      let config = {
        ...options,
        ...headers
      }
    
    
      return fetch(url, config).then(r => {
        if (r.ok) {
          return r.json()
        }
        throw new Error(r)
      })
    }
    
    위의 코드 블록에 우리는 request의 기능을 기입했다.그것은 endpoint 문자열과 config 대상을 매개 변수로 한다.그리고 우리는 urlendpoint에서 basePath를 구축했다.Dev.to API는 api_key를 헤드로 사용하여 인증하기 때문에 우리는 이를 Content-Type와 함께 헤드로 정의하여 우리가 잠시 후에 보낼 POST 요청을 앞다투어 처리한다.다음에 우리는 spread operator를 사용하여 전송options 대상과 headers 대상을 새로운 config로 통합시켰다.
    마지막으로, 우리는 fetch 되돌아와서 간단한 오류 검사와 json 변환을 진행했다.이것은 중요한 부분이다.Return, 그리고 우리의 다른 방법의 보답은 사용자와 우리의 고객이 다른 약속과 상호작용을 할 수 있도록 허용할 것이다.링크then를 통해async/await를 사용하거나
    다음은 getArticles 방법을 정의합시다.이를 위해, 옵션의 대상을 검색 문자열에 통합하는 작은 보조 도구가 필요합니다.브라우저에서 one of the libraries on NPM를 사용하거나 사용자 고유의 를 작성할 수 있습니다.Node에 있는 경우 내장형querystring 모듈을 사용할 수 있습니다.
    먼저 모듈은 위쪽에 있어야 합니다isomorphic-unfetch.
    const querystring = require("querystring")
    
    그런 다음 getArticles 메서드를 입력합니다.
    getArticles(options) {
      let qs = options ? "?" + querystring.stringify(options) : ""
    
      let url = "/articles" + qs
      let config = {
        method: 'GET'
      }
      return this.request(url, config)
    }
    
    여기에서 사용자가 입력한 모든 옵션에 따라 검색 문자열을 만듭니다.상당히 많은 검색 매개 변수를 사용할 수 있습니다.사용자가 객체로 제공하지만 API가 이해할 수 있는 질의 문자열로 처리할 수 있습니다.그리고 단점에 추가하고 기본 설정을 설정합니다. methodGET 로 정의합니다.GET가 기본값이므로 필요하면 비활성화할 수 있습니다.
    다음은 위에서 조금 다른 버전에 대해 우리는 getArticleById 방법을 기입할 수 있다.
    getArticleById(id) {
      let url = "/articles/" + id
      return this.request(url, {})
    }
    
    여기서 URL을 구성하는 동일한 패턴을 따르고 적절한 매개변수가 있는 request 방법을 반환합니다.
    마지막으로 createArticle 방법을 구축합시다.
    createArticle(body) {
      const options = {
        method: 'POST',
        body: JSON.stringify(body)
      }
      return this.request('/articles', options)
      // Optional: add your own .catch to process/deliver errors or fallbacks specific to this resource
    }
    
    결과는 앞의 방법과 같다.유일한 차이점은 현재 설정methodPOST로 설정하고article 대상 문자열을 body로 바꾸는 것입니다.모든 반환 후, 자원에 대한 오류 처리를 처리하기 위해 링크 catch 를 선택할 수 있습니다.그렇지 않으면 사용자는 모든 오류를 처리해야 합니다.

    이 모든 것을 결합시키다
    클라이언트가 설치된 후 우리는 최초의 클라이언트 실현 예시로 돌아갈 수 있다.
    const api = new DevTo({
      api_key: "XXXXXXXXX"
    })
    
    api.getArticles({ username: "bearer", page: 1 }).then(data => console.log(data))
    
    이것은 문장의 첫 페이지로 되돌아갈 것이다.이 클라이언트의 소비자는 다음과 같이 API 호출을 모니터링하기 위해 Bearer을 추가로 사용할 수 있습니다.
    const Bearer = require("@bearer/node-agent")
    
    Bearer.init({
      secretKey: "YOUR-SECRET-KEY"
    }).then(() => {
      const api = new DevTo({
        api_key: "XXXXXXXXX"
      })
    
      api
        .getArticles({ username: "bearer", page: 1 })
        .then(data => console.log(data))
    })
    
    이것은 단지 시작일 뿐이다.API 클라이언트는 다양한 반복 용례를 처리할 수 있습니다.이것은 API 버전을 클라이언트 버전으로 잠그고 더 많은 것을 허용할 수 있으며 사용자의 요구에 따라 개발자 체험을 맞춤형으로 할 수 있습니다.전화번호complex authentication methods입니다.자주 사용하는 API 주위에 패키지가 구축되어 있습니까?API 사용에 대한 자세한 내용은 full code from our example를 참조하십시오.

    좋은 웹페이지 즐겨찾기