오픈 API 3를 활용하여 소프트웨어 개발 프로세스 가속화

개원 도구를 사용하여 Kubernetes에서 아날로그 서버, APIClient SDK 및 라이브 API 문서를 쉽게 만드는 방법


사진작가Toine GUnsplash
나는 개원 세계에 대해 매우 흥미를 느낀다.Linux, Kubernetes, Docker, NodeJS, Golang 등 훌륭한 무료 소스 오픈 도구가 많이 있습니다.이 생태계는 계속 성장하여 세계(소프트웨어 공학 세계)에 새로운 기술과 해결 방안을 가져왔다.
오늘 나는 개발자에게 유용할 수 있는 개원 프로젝트를 탐색할 것이다.만약 우리가 Kurio 에서 사용한 API 구동 개발 실천을 읽었다면, 개방식 API 3, 아날로그 서버와 SDK 생성기 같은 용어를 발견할 수 있을 것이다.그러나 그 글에서 나는 개방식 API 3를 이용하거나 아날로그 서버를 만들거나 SDK를 만드는 것과 같은 일을 설명하지 않았다.
본고에서 저는 아날로그 서버를 만들고 무료 도구(개원 프로젝트라고도 함)를 사용하여 API SDK를 생성하고 이를 Kubernetes(K8s) 집단에 위탁 관리하는 방법을 소개하겠습니다.이런 상황에 대해 나는 나의 Kubernetes 집단을 사용할 것이다.
아래의 모든 절차는 K8s 집단을 사용할 것입니다. 저는 당신이 이미 현장과 생산이 준비된 K8s 집단을 가지고 있다고 가정할 것입니다.
탐색에 편리하도록 개방식 API 3 규범의 예시를 준비했습니다. 본고에서 이 규범을 사용하겠습니다.이 규범은 myGithub repo에서 찾을 수 있다.
한 마디로 하면, 저는 여기서 오픈 API 규범을 사용하여 세 가지 일을 할 것입니다.
  • 오픈 API 3 사양에 따라 실시간 API 문서 작성
  • 개방형 API 3
  • 으로부터 빠르고 가벼운 아날로그 서버 생성
  • 오픈 API 3 사양
  • 으로부터 HTTP SDK 클라이언트 생성

    실시간 API 문서 작성


    준비할 도구:
  • Swagger UI
  • 개방형 API의 전체/기존 설치
  • 현장 및 생산 준비가 완료된 K8s 클러스터(또는 최소 준비 스테이션)
  • 가장 간단한 방법은 실시간 API 문서를 만드는 것입니다.실시간 API 문서를 통해 모든 개발자가 우리의 API, 작업 방식, 요청과 응답을 읽고 이해할 수 있기를 바랍니다.우리는 많은 도구를 사용할 수 있지만, 본고에서, 나는 Swagger가 제공하는 기본 도구, 즉 Swagger UI를 사용할 것이다.
    그들은 우리가 사용할 수 있는 공공 docker 이미지를 제공했다.따라서 K8s 클러스터가 있는 경우 K8s 클러스터에 배치하기만 하면 됩니다.식은 죽 먹기다

    첫 번째 단계: Swagger UI의 Docker 이미지 만들기


    K8s 클러스터에 사용되고 배포될 Docker 미러를 만들어야 합니다.Swagger UI를 기본 docker 이미지로 사용하는 것을 잊지 마십시오.
    다음은 내 Dockerfile 예제입니다.
    FROM swaggerapi/swagger-ui:v3.23.1
    
    ADD **tweetor.yaml** /usr/share/nginx/html/tweetor.yaml
    # Add another spec here
    
  • 트위터.yaml은 나의 오픈 API 규범이다.기본 이미지 폴더에 추가하기만 하면 됩니다.전체 파일here을 찾을 수 있습니다.
  • 기본 이미지 swaggerapi/swagger ui: v3.23.1에서 NGinx를 사용했기 때문에 NGinx 폴더에 규범을 추가해야 합니다. 이 폴더는/usr/share/NGinx/html/에 있습니다.
  • 그런 다음 개인 컨테이너 레지스트리 (GCR을 개인 docker 레지스트리에 사용합니다) 로 전송할 수 있습니다.
    $ docker build -t asia.gcr.io/kube-xmas/tweetor-docs:latest .
    //docker build process will happen here...
    
    $ docker push asia.gcr.io/kube-xmas/tweetor-docs:latest
    //docker push process will happen here...
    

    2단계: Swagger UI를 위한 Kubernetes 배포 구성 만들기


    다음은 K8s 배포 구성 요소를 만듭니다.
    Kubernetes에서 배포 수행 및 실행:
    $ kubectl apply -f swagger\_ui\_deployment.yaml
    
    $ kubectl get pods --namespace=tweetor-docs
    NAME READY STATUS RESTARTS AGE
    tweetor-docs-786d889d67-65h45 1/1 Running 0 14m
    
    따라서 위의 배치에서 나는 이름 공간, 배치와 서비스 (노드 포트) 세 개의 구성 요소만 사용했다.마지막 단계는 모든 엔지니어가 문서를 볼 수 있도록 포털 구성 요소를 서비스에 추가하는 것이다.
    $ kubectl apply -f ingress\_swagger\_docs.yaml
    
    이제 엔지니어라면 누구나 이 서류들을 사용할 수 있다.

    *참고: API 문서에 액세스할 때 Petstore 흔들림이 발생하면 docker 파일에서 만든 흔들림 yaml 이름을 입력하십시오.나로서는 트위터를 사용한다.yaml, 검색 표시줄/조회에서 볼 수 있습니다.모든 문서는 docker 용기에 위탁 관리할 수 있습니다.시간이 있으면 색인 페이지의 기본 흔들림 파일을 변경하십시오.
    이렇게 간단해.

    경량급 빠른 아날로그 서버 만들기


    준비할 도구:
  • API Sprout
  • 개방형 API의 전체/기존 설치
  • 현장 및 생산 준비가 완료된 K8s 클러스터(또는 최소 준비 스테이션)
  • 또 다른 소프트웨어 개발에 유용한 기교는 아날로그 서버를 만드는 것이다.아날로그 서버는 실제 서버를 나타내지만 일반적으로 특정한 논리가 없는 가상 서버이다.그들은 어떤 요구도 받아들일 수 있지만, 응답은 통상적으로 정적이다.
    왜 우리는 아날로그 서버가 필요합니까?너는 나의 과거 문장에서 더 많은 세부 사항을 찾을 수 있지만, 나는 여기서 간략하게 소개할 것이다.
    내가 생각할 수 있는 가장 간단한 예는 우리가 두 팀 사이에서 일한다고 가정하면 하나는 백엔드에 있고, 다른 하나는 전방에 있다.두 팀은 모두 같은 스퍼트 단계에서 출발한다.일반적으로 프런트엔드 팀은 API를 먼저 준비해야 일을 할 수 있지만, 같은 sprint에서 일할 때, 백엔드가 여전히 API를 실현하지 못하기 때문에 막을 수 있다.이것은 아날로그 서버가 유용할 때다.
    그렇다면 우리는 어떻게 쉽게 아날로그 서버를 만들 수 있습니까?

    첫 번째 단계: Dockerfile 만들기


    나는 이미 실시간 Kubernetes 집단과 Open API 3 specs의 기존 사본을 가지고 있다.
    좋은 도구/라이브러리가 있습니다here.이것은 오픈 API 3 규범을 바탕으로 하는 간단한 아날로그 서버 생성기입니다.코드는 매우 간단합니다. Golang으로 작성되었습니다.만약 내가 먼저 이런 생각을 가지고 있었다면, 아마도 내가 이 도구를 발명했을 것이다.하지만 괜찮아요. 바퀴를 재발명하지 않을 거예요. 제가 직접 쓸 거예요.
    내가 해야 할 일은 Docker 이미지를 만들고 나의 오픈 API 규범을 Docker 이미지에 추가하는 것이다.
    이것은 내 Dockerfile입니다.
    FROM danielgtaylor/apisprout
    
    ADD tweetor.yaml /data/tweetor.yaml
    
    Docker 이미지를 작성하여 Docker 레지스트리로 밀어넣습니다.
    $ docker build -t asia.gcr.io/kube-xmas/tweetor-mock:latest .
    //docker build process will happen here...
    
    $ docker push asia.gcr.io/kube-xmas/tweetor-mock:latest
    //docker push process will happen here...
    
    이렇게 하면 Kubernetes에 배포 파일을 추가하기만 하면 됩니다.

    2단계: 아날로그 서버를 위한 Kubernetes 배포 만들기


    이제 K8 배포를 추가합니다.이것은 내 배포 구성입니다.
    $ kubectl apply -f mock\_tweetor\_deployment.yaml
    
    DNS 관리에 포털을 추가하면 이제 아날로그 서버에 액세스할 수 있습니다.
    $ curl mock.tweetor.xyz/tweets
    [
      {
        "createdTime": "2018-12-24T09:21:41.827Z",
        "id": "abc-f45def-5sdaf-5636f",
        "text": "Merry Christmast Everyone!!!"
      },
      {
        "createdTime": "2018-12-23T09:21:41.827Z",
        "id": "abc-f45def-5sdaf-5636f",
        "text": "I believe santa will give me a great present"
      },
      {
        "createdTime": "2018-12-22T09:21:41.827Z",
        "id": "abc-f45def-5sdaf-5636f",
        "text": "Hello my secret santa. Thank you!!!"
      }
    ]
    
    이제 프런트엔드 팀은 아날로그 API를 사용하여 프런트엔드를 개발할 수 있습니다.

    HTTP SDK 클라이언트 생성


    준비할 도구:
  • Open API Generator
  • 고급 사용법에 대해 본고에서 나는 CI/CD를 사용하지 않을 것이다.
  • 마지막으로 HTTP 클라이언트 SDK를 생성하는 데 도움이 되는 개방형 API 사양을 활용하는 방법에 대해 살펴보겠습니다.SDK는 소프트웨어 개발 도구 패키지를 대표하는데, 라이브러리나 우리가 어떤 서비스나 도구를 통합하거나 사용할 수 있도록 도와줄 수 있는 다른 것을 가리킨다.
    마이크로서비스 세계에서 이렇게 많은 서비스가 서로 다른 임무를 조작하고 처리하고 있다.모든 서비스는 그 단점이 있다. 이런 단점은 다른 서비스와 다를 수 있지만, 그 차이에서 그들은 여전히 같은 모델을 가지고 있다. (내가 가리키는 것은 RESTfull 마이크로서비스이다.)그들은 HTTP 동사(GET, POST, PUT, DELETE)와 상태 코드(2001, 2012, 2004, 2004, 04, 140, 34, 5050 등)를 사용한다.
    모든 서비스는 하나의 서비스에만 의존할 수 있을 뿐만 아니라, 모든 서비스를 다른 서비스에 연결할 때, 프로그래머는 일반적으로 그들의 기능을 구축하여 HTTP 요청을 실행한다.
    서비스 A와 B는 C에 의존
    위 그림의 예:

    Let’s say that Service A and Service B is connected to Service C. Now imagine a programmer built the connector (REST HTTP Client) manually from Service A. That programmer also built the connector from Service B. And imagine there are also numerous services that will be connected to Service C and all the connector was built manually.


    위의 예시에서 우리는 불필요한 숙제를 보았다.만약 연결기가 단독이고 라이브러리로 우리의 프로젝트에 가져온다면 어떻게 해야 합니까?만약 우리가 수동으로 연결기를 구축할 필요가 없고 자동으로 그것을 생성할 수 있다면?
    이것이 바로 오픈 API가 이곳에서 사용하는 방식이다.이전에는 오픈 API 3의 이전 버전인 Swagger 2에서 HTTP 클라이언트 SDK를 생성하는 것이 흔했습니다.그러나 개방형 API 3에서는 여전히 새로운 기능입니다.
    다행히도 지역사회에 좋은 도구가 만들어졌다here.그것은 오픈되어 무료이며 사용하기 매우 쉽다.특히 CLI 및 Docker 이미지가 지원되기 때문입니다.

    Docker를 사용하여 SDK 생성


    나는 Docker와 함께 사용하는 것을 더욱 좋아한다. 왜냐하면 그것은 CI/CD에서 사용할 수 있기 때문이다. 특히 CI/CD가 버디와 같은 용기화를 지원하는 상황에서.그리고 Docker, Java SDK를 설치할 필요가 없습니다. CLI를 사용하여 설치하려면 Java SDK를 설치해야 하기 때문입니다.추가 작업을 추가하고 싶지 않으므로 Docker 방법만 사용합니다.
  • 변경./트위터.yaml과 당신의 오픈 API 규범.

  • -g: 생성된 SDK의 프로그래밍 언어를 지정합니다.지원되는 프로그래밍 언어 here 를 볼 수 있습니다.위의 예에서 Golang을 위해 HTTP 클라이언트 SDK를 생성하고 싶습니다.

  • -o: 생성된 SDK의 대상 폴더를 지정합니다.
  • 생성된 HTTP 클라이언트 SDK의 미리보기입니다.Go에서 클라이언트를 생성한 폴더 구조의 예입니다.
    .
    ├── README.md
    ├── api
    │ └── openapi.yaml
    ├── api\_tweet.go
    ├── client.go
    ├── configuration.go
    ├── docs
    │ ├── Tweet.md
    │ └── TweetApi.md
    ├── git\_push.sh
    ├── go.mod
    ├── go.sum
    ├── model\_tweet.go
    └── response.go
    
    코드가 어떻게 생성되었는지 정확히 알려줄 수는 없지만, 직접 시도하고 생성된 SDK를 볼 수 있습니다.우리가 많은 마이크로서비스에서 일할 때, 이것은 정말 도움이 되고, 우리가 더욱 빨리 프로젝트를 개발하는 데 도움을 준다.
    그러나 앞으로 생성된 SDK에 문제가 발생할 수 있습니다.

  • 대상 API의 버전을 유지합니다.이것은 생성된 HTTP 클라이언트 SDK이기 때문에 버전 제어를 처리하기 어려울 수 있습니다.따라서 가장 좋은 해결 방안은 우리가 SDK를 생성한 후에 Git 저장소로 전송하고 생성된 모든 SDK에 Git 표시를 추가하는 것이다. (실제로 셸 스크립트는 생성된 폴더에 준비되어 있기 때문에 해결했다:D)
  • 다음은 뭐예요?


    오픈 API나 Swagger와 관련된 많은 도구가 우리에게 유용할 수 있습니다.여기에 열거된 모든 도구를 찾을 수 있습니다: https://openapi.tools.
    다음 단계는 CI/CD 자동화 프로세스를 사용하므로 엔지니어가 개방형 API 사양을 업데이트하면 모든 API 문서, 아날로그 서버 및 생성된 SDK가 자동으로 업데이트됩니다.
    나는 이미 내가 쓴 모든 과정의 자동화 과정을 완성했지만, 나는 여전히 적당한 시간을 찾아 쓰고 있다.🤧🤕

    좋은 웹페이지 즐겨찾기