Node.js 를 사용 하여 API 게 이 트 웨 이 를 만 듭 니 다.

7250 단어 전단node.js
  • 원문 주소:Node.js 를 사용 하여 API 게 이 트 웨 이 구축
  • 원문 저자:P é ter M á rton금 을 파 는 번역 계획본 고의 영구 링크:https://github.com/xitu/gold-miner/blob/master/TODO/building-an-api-gateway-using-nodejs.md
    번역자:MuYunyun교정 자:jasonxia 23,CACppuccino\#Node.js 를 사용 하여 API 게 이 트 웨 이 를 만 듭 니 다.
    외부 클 라 이언 트 가 마이크로 서비스 구조 중의 서 비 스 를 방문 할 때 서버 는 인증 과 전송 에 대해 흔히 볼 수 있 는 요 구 를 가진다.API 게 이 트 웨 이 는 서비스 프로 토 콜 간 의 차 이 를 처리 하고 특정 클 라 이언 트(예 를 들 어 데스크 톱 브 라 우 저,모 바 일 장치,오래된 시스템)의 요 구 를 만족 시 키 는 공유 층 을 제공 합 니 다.
    마이크로 서비스 와 소비자
    마이크로 서 비 스 는 서 비 스 를 대상 으로 하 는 구조 로 팀 은 응용 프로그램 을 독립 적 으로 디자인 하고 개발 하 며 발표 할 수 있다.이 는 시스템 각 차원 에서 의 기술 다양성 을 허용 하고 팀 은 주어진 기술적 문제 에서 최고의 언어,데이터 베이스,협의 와 전송 층 을 사용 하여 이익 을 얻 을 수 있다.예 를 들 어 한 팀 은 HTTP REST 의 JSON 을 사용 할 수 있 고 다른 팀 은 HTTP/2 의 gRPC 나 RabbitMQ 등 메시지 대 리 를 사용 할 수 있다.
    어떤 상황 에서 서로 다른 데이터 의 직렬 화 와 협 의 를 사용 하 는 것 은 강력 할 수 있 지만 우리 제품 을 사용 하려 는 고객 은 서로 다른 수요 가 있 을 수 있 습 니 다.이 문 제 는 데스크 톱 브 라 우 저 에서 모 바 일 기기 와 게임 기 를 통 해 남 겨 진 시스템 까지 동 질 기술 스 택 을 가 진 시스템 에서 도 발생 할 수 있다.한 고객 은 XML 형식 을 원 할 수도 있 고,다른 고객 은 JSON 을 원 할 수도 있다.많은 상황 에서 당신 은 그것들 을 동시에 지지 해 야 합 니 다.
    고객 이 마이크로 서 비 스 를 사용 하려 고 할 때 직면 할 수 있 는 또 다른 도전 은 일반적인 공유 논리(예 를 들 어 인증)에서 비롯 됩 니 다.모든 서비스 에서 똑 같은 일 을 다시 실현 하고 싶 지 않 기 때 문 입 니 다.
    요약:우 리 는 우리 의 마이크로 서비스 구조 에서 우리 의 내부 서 비 스 를 실현 하고 여러 클 라 이언 트 를 지원 하 며 똑 같은 논 리 를 반복 할 수 있 도록 하고 싶 지 않다.이것 이 바로 API 게 이 트 웨 이 가 나타 난 원인 으로 서비스 프로 토 콜 간 의 차 이 를 공유 층 으로 처리 하고 특정 클 라 이언 트 의 요 구 를 만족 시 키 는 것 이다.
    API 게 이 트 웨 이 가 무엇 입 니까?
    API 게 이 트 웨 이 는 마이크로 서비스 구조의 서비스 로 클 라 이언 트 에 내부 서비스 와 통신 할 수 있 도록 공유 층 과 API 를 제공 합 니 다.API 게 이 트 웨 이 는 인증 과 속도 제한 기 등 공유 논 리 를 수행 할 수 있 습 니 다.
    API 게 이 트 웨 이 를 우리 의 마이크로 서비스 세계 의 입구 로 볼 수 있 습 니 다.
    우리 시스템 은 하나 이상 의 API 게 이 트 웨 이 를 가 질 수 있 고 구체 적 으로 고객 의 수요 에 달 려 있다.예 를 들 어 데스크 톱 브 라 우 저,모 바 일 애플 리 케 이 션,공공 API 에 별도의 게 이 트 웨 이 를 제공 할 수 있 습 니 다.
    API 게 이 트 웨 이 는 마이크로 서비스의 접점 으로 한다.
    Node.js 는 전단 팀 의 API 게 이 트 웨 이 에 사 용 됩 니 다.
    API 게 이 트 웨 이 는 클 라 이언 트 응용 프로그램(예 를 들 어 브 라 우 저)에 기능 을 제공 하기 때문에 전단 응용 프로그램 을 개발 하 는 팀 이 실시 하고 관리 할 수 있 습 니 다.
    API Gateway 를 어떤 언어 로 구현 할 지 는 특정 고객 을 담당 하 는 팀 이 선택해 야 한 다 는 뜻 이기 도 하 다.자바 스 크 립 트 는 브 라 우 저 응용 프로그램 을 개발 하 는 주요 언어 이기 때문에 마이크로 서비스 구조 가 서로 다른 언어 로 개발 되 더 라 도 Node.js 는 API 게 이 트 웨 이 를 실현 하 는 절 호의 선택 이 될 수 있 습 니 다.
    넷 플 릭 스 는 Node.js API 게 이 트 웨 이와 자바 백 엔 드 를 성공 적 으로 사용 하여 광범 위 한 클 라 이언 트 를 지원 합 니 다.-그들 에 대한 방법 을 더 알 아 보고 The"Paved Road"PaaS for Microservices at Netflix 라 는 글 을 읽 습 니 다.
    넷 플 릭 스 가 서로 다른 클 라 이언 트 를 처리 하 는 방법,자원
    API 게 이 트 웨 이 기능
    이전에 논 의 했 듯 이 유 니 버 설 공유 논 리 를 API 게 이 트 웨 이 에 넣 을 수 있 습 니 다.이 절 은 가장 흔히 볼 수 있 는 게 이 트 웨 이 직책 을 소개 합 니 다.
    경로 및 버 전 관리
    저 희 는 API 게 이 트 웨 이 를 귀하 의 마이크로 서비스의 입구 점 으로 정의 합 니 다.게 이 트 웨 이 서비스 에서 클 라 이언 트 경로 에서 특정 서비스 로 가 는 경로 요청 을 지정 할 수 있 습 니 다.루트 처리 버 전이 나 백 엔 드 인 터 페 이 스 를 변경 할 수도 있 고,공 개 된 인 터 페 이 스 는 변 하지 않 을 수도 있 습 니 다.또한 API 게 이 트 웨 이에 서 여러 서비스 와 조 화 를 이 루 는 새로운 단 서 를 정의 할 수 있 습 니 다.
    API 게 이 트 웨 이 는 마이크로 서비스 입구 점 으로 한다.
    게 이 트 웨 이 디자인 의 업그레이드
    API 게 이 트 웨 이 방법 도 전체 프로그램 을 분해 하 는 데 도움 을 줄 수 있 습 니 다.대부분의 상황 에서 마이크로 서버 에서 시스템 을 재 구성 하 는 것 은 좋 은 생각 이 아니 라 불가능 하 다.왜냐하면 우 리 는 재 구성 기간 에 업무 에 새로운 기능 과 기 존의 기능 을 보 내야 하기 때문이다.
    이러한 상황 에서 저 희 는 프 록 시 나 API 게 이 트 웨 이 를 전체 응용 프로그램 에 두 기 전에 새로운 기능 을 마이크로 서비스 로 실현 하고 새로운 터미널 을 새로운 서비스 로 이동 시 키 는 동시에 기 존의 경로 로 서 비 스 를 통 해 오래된 터미널 로 이동 할 수 있 습 니 다.이렇게 되면 우 리 는 기 존의 기능 을 새로운 서비스 로 바 꾸 어 전 체 를 분해 할 수 있다.
    게 이 트 웨 이 디자인 의 업그레이드 에 따라 우 리 는 전체적인 구조 가 마이크로 서비스 로 의 부 드 러 운 과 도 를 실현 할 수 있다.
    API 게 이 트 웨 이 디자인 업그레이드
    인증
    대부분의 마이크로 서비스 인 프 라 는 인증 이 필요 하 다.공유 논리(예 를 들 어 인증)를 API 게 이 트 웨 이 에 추가 하면 서비스의 부피 가 작 아 지고 집중 적 으로 관리 할 수 있 습 니 다.
    마이크로 서비스 구조 에서 귀 하 는 네트워크 설정 을 통 해 귀하 의 서 비 스 를 DMZ(보호 구역)에 보호 하고 API 게 이 트 웨 이 를 통 해 고객 에 게 공개 할 수 있 습 니 다.이 게 이 트 웨 이 는 여러 개의 인증 방법 도 처리 할 수 있다.예 를 들 어 쿠키 와 token 기반 인증 을 동시에 지원 할 수 있 습 니 다.
    인증 기능 이 있 는 API 게 이 트 웨 이
    데이터 집계
    마이크로 서비스 구조 에서 클 라 이언 트 가 필요 로 하 는 데이터 의 집합 단계 가 다 를 수 있다.예 를 들 어 각종 마이크로 서비스 에서 발생 하 는 비 규범 화 된 데이터 실체 등 이다.이러한 상황 에서 저 희 는 API 네트워크 를 사용 하여 이러한 의존 관 계 를 해결 하고 여러 서비스 에서 데 이 터 를 수집 할 수 있 습 니 다.
    다음 그림 에서 API 게 이 트 웨 이 가 사용자 와 신용 정 보 를 클 라 이언 트 에 게 어떻게 데이터 로 되 돌려 주 는 지 볼 수 있 습 니 다.이 데 이 터 는 서로 다른 마이크로 서비스 가 소유 하고 관리 하 는 것 을 주의 하 십시오.
    직렬 화 형식 변환
    클 라 이언 트 의 서로 다른 데이터 직렬 화 형식 을 지원 해 야 합 니 다.
    우리 의 마이크로 서비스 가 JSON 을 사용 하 는 상황 을 상상 해 보 세 요.그러나 우리 의 고객 은 XML API 만 사용 할 수 있 습 니 다.이 경우 모든 마이크로 서버 에서 각각 구현 되 는 것 이 아니 라 API 게 이 트 웨 이 에서 JSON 을 XML 로 변환 할 수 있 습 니 다.
    프로 토 콜 변환
    마이크로 서비스 구 조 는 다 중 채널 프로 토 콜 전송 을 허용 하여 다양한 기술 의 장점 을 얻 을 수 있다.그러나 대부분의 클 라 이언 트 는 하나의 프로 토 콜 만 지원 합 니 다.이런 상황 에서 우 리 는 클 라 이언 트 의 서비스 협 의 를 바 꿔 야 한다.
    API 게 이 트 웨 이 는 클 라 이언 트 와 마이크로 서버 간 의 프로 토 콜 전환 도 처리 할 수 있다.
    다음 그림 에서 클 라 이언 트 가 HTTP REST 를 통 해 원 하 는 모든 통신 을 볼 수 있 고 내부 의 마이크로 서 비 스 는 gRPC 와 GraphQL 을 사용 합 니 다.
    속도 제한 및 캐 시
    앞의 예 에서 API 게 이 트 웨 이 에 일반적인 공유 논리(예 를 들 어 인증)를 두 는 것 을 볼 수 있 습 니 다.인증 을 제외 하고 API 게 이 트 웨 이 에서 속도 제한,캐 시 및 각종 신뢰성 기능 을 실현 할 수 있 습 니 다.
    과부하 API 게 이 트 웨 이
    API 게 이 트 웨 이 를 실현 할 때 비 통용 논리(예 를 들 어 특정 데이터 변환)를 게 이 트 웨 이 에 넣 는 것 을 피해 야 합 니 다.
    서 비 스 는 항상 그들의 데이터 필드 의 모든 소유권 을 가 져 야 한다.과부하 API 게 이 트 웨 이 를 구축 하여 마이크로 서비스 팀 이 통제 하도록 하 는 것 은 마이크로 서비스의 이념 에 위배 된다.
    이것 이 바로 API 게 이 트 웨 이의 데이터 집합 에 관심 을 가 져 야 하 는 이유 입 니 다.-특정한 데이터 변환 이나 규칙 처리 논 리 를 포함 할 수 있 는 많은 논리 가 있 는 것 을 피해 야 합 니 다.
    항상 API 게 이 트 웨 이 에 대한 명확 한 책임 을 정의 하고 유 니 버 설 공유 논리 만 포함 합 니 다.
    Node.js API 게 이 트 웨 이
    API 게 이 트 웨 이에 서 간단 한 작업 을 수행 하고 싶 을 때,예 를 들 어 요청 루트 를 특정 서비스 로 이동 시 키 려 면 nginx 와 같은 역방향 에이 전 트 를 사용 할 수 있 습 니 다.그러나 어떤 때 는 일반 에이전트 가 지원 하지 않 는 논 리 를 실현 해 야 할 수도 있 습 니 다.이 경우 Node.js 에서 자신의 API 게 이 트 웨 이 를 실현 할 수 있 습 니 다.
    Node.js 에 서 는 http-proxy 패 키 지 를 사용 하여 특정 서비스 에 대한 요청 을 간단하게 대리 할 수 있 고 더 많은 기능 을 가 진 express-gateway 를 사용 하여 API 게 이 트 웨 이 를 만 들 수 있 습 니 다.
    첫 번 째 API 게 이 트 웨 이 예제 에서 저 희 는 코드 를 user 서비스 에 의뢰 하기 전에 인증 요청 을 합 니 다.
        const express = require('express')
        const httpProxy = require('express-http-proxy')
        const app = express()
    
        const userServiceProxy = httpProxy('https://user-service')
    
        //     
        app.use((req, res, next) => {
          // TODO:       
          next()
        })
    
        //     
        app.get('/users/:userId', (req, res, next) => {
          userServiceProxy(req, res, next)
        })

    다른 예제 에 서 는 API 게 이 트 웨 이에 서 새로운 요청 을 하고 클 라 이언 트 에 응답 을 되 돌려 줄 수 있 습 니 다.
        const express = require('express')
        const request = require('request-promise-native')
        const app = express()
    
        //   : GET /users/me
        app.get('/users/me', async (req, res) => {
          const userId = req.session.userId
          const uri = `https://user-service/users/${userId}`
          const user = await request(uri)
          res.json(user)
        })

    Node.js API 게 이 트 웨 이 요약
    API 게 이 트 웨 이 는 마이크로 서비스 구 조 를 통 해 고객 의 수 요 를 만족 시 킬 수 있 는 공유 층 을 제공 합 니 다.그것 은 당신 의 서 비 스 를 작 게 유지 하고 집중 하 는 데 도움 이 됩 니 다.서로 다른 유 니 버 설 논 리 를 API 게 이 트 웨 이 에 넣 을 수 있 지만 API 게 이 트 웨 이 의 과도 한 사용 은 피해 야 합 니 다.많은 논리 가 서비스 팀 에서 제어 할 수 있 기 때 문 입 니 다.
    ---
    굴 금 번역 계획 은 양질 의 인터넷 기술 문장 을 번역 하 는 지역사회 로 글 의 출처 는 굴 금 상의 영문 공유 문장 이다.내용 은 안 드 로 이 드,iOS,React,전단,백 엔 드,제품,디자인 등 분 야 를 커버 합 니 다.더 많은 양질 의 번역문 을 보 려 면 금 발굴 번역 계획,공식 웨 이 보,지식 칼럼 에 지속 적 으로 관심 을 가 져 주 십시오.

    좋은 웹페이지 즐겨찾기