새로운 디지털 해양 애플리케이션 플랫폼으로 Go 웹 API 구축

최근 디지털 오션은 new application platform으로 PaaS 시장에 진출할 것이라고 발표했다.여러 해 동안 그들은 가상 머신(Drops)과 Kubernetes 기반 서비스를 위탁 관리해 왔지만, 지금은 클릭만 하면 프로그램을 시작하고 실행할 수 있는 플랫폼을 만들고 있다.
그래서 해보기로 했어요.이 강좌에서, 우리는 이 플랫폼에서 응용 프로그램을 구축할 것이다.Go를 사용하여 SQLite 데이터베이스에서 지원하는 소형 웹 API를 만들 것입니다.플랫폼에 응용 프로그램을 배치하는 것이 얼마나 쉬운지 보여 드리겠습니다.
우리는 소형 서비스를 만들 것이다.
  • 도시 명칭을 입력으로
  • 검색 데이터베이스
  • 이 도시의 우편 번호와 기타 정보
  • 이 강좌를 계속 공부하려면 다음과 같이 하십시오.
  • 컴퓨터, 설치 Go
  • A Digital Ocean 계좌

  • SQL Lite용 DB Browser
  • Download this CSV
  • 저장소 만들기


    우리가 해야 할 첫 번째 일은 GitHub에 저장소를 만드는 것이다.Digital Ocean 응용 프로그램 플랫폼은 리셋 프로토콜을 사용하여 코드를 추출하여 구축합니다.

    이제 디지털 해양 샘플 라이브러리를 다른 폴더로 복제합니다.
    git clone https://github.com/digitalocean/sample-golang.git
    
    지금 너는 포크로 이것을 포크할 수 있다.그러나 우리는 환매 협의에 대해 변화를 주지 않을 것이기 때문에, 우리는 그 속에서 변화를 얻고 싶지 않다. 이것은 본질적으로 새로운 프로젝트이다.그래서 나는 환매 협의서의 서류를 나의 서류로 복사할 것이다.
    git clone https://github.com/JeremyMorgan/GoZipCodeDigitalOcean.git
    
    cp -r /sample-golang/* /GoZipCodeDigitalOcean
    
    현재 나는 자신의 환매 협의에 예시 코드를 가지고 있다.

    쿨, 이제 Github로 밀어보자.
    git add .
    git commmit -m "Initial Commit"
    git push origin main
    
    현재 예시 항목은 나의 Github에서 사용할 수 있으며, 나는 거기에서 그것에 연결할 수 있다.

    디지털 해양 응용 프로그램 설정


    https://cloud.digitalocean.com/apps으로 이동
    그런 다음 응용 프로그램 시작 을 클릭합니다.

    이제 Github를 디지털 바다로 연결합니다.
    모든 저장소에 권한을 부여하거나 일부 저장소에만 권한을 부여할 수 있습니다(권장).

    다음은 응용 프로그램과 그 안에 배치할 지점을 만듭니다.나의 예에서 나는'메인'을 선택했다.

    여기에 코드 변경을 자동으로 배치할지 여부를 선택할 수 있습니다.다음을 클릭합니다.
    다음 화면에서 내용을 설정할 수 있습니다.Go가 감지되어 웹 서비스로 설정되었는지 확인합니다.
    여기에 데이터베이스를 추가할 수 있지만, 이 동작을 건너뛰고 "다음"을 누르십시오.

    그런 다음 계획을 선택합니다.정적 사이트는 무료지만 Go 서비스는 아니기 때문에 나는 이곳에서 5달러의 계획을 선택했다.이것은 개념과 개발 사이트를 증명하기에 충분하다.

    "다음"을 누르면 사이트가 자동으로 배치를 시작합니다.

    우리 일어났어!테스트해 봅시다.

    테스트 프레젠테이션 사이트


    이제 프레젠테이션 사이트가 시작되고 실행되고 있지만 볼 만한 가치가 없습니다.

    Postman과 같은 도구를 사용하여 노선을 테스트할 수 있습니다.

    예제 응용 프로그램의 라우팅은 다음과 같습니다.
  • /
  • /캐시
  • /제목
  • /env
  • /상태
  • 좋아, 우리는 갈 수 있어.우리는 그것을 진정한 응용 프로그램으로 바꾸자.

    새 메서드 만들기


    우선, 우리는 응용 프로그램에 추가할 새로운 방법을 만들 것이다.우편 번호와 도시에 대한 다른 정보를 찾기 위해 새 노선을 추가합니다.저희 URL이 비슷해 보여요.

    https://(ourURL)/zip?city="(city we're searching for)"


    따라서 우리는 새로운 방법을 만들 것이다.
    http.HandleFunc("/zip", func(w http.ResponseWriter, r *http.Request) {
    }
    
    우리는 본 강좌의 잠시 후 이것에 대해 충실하게 진행할 것이다.

    데이터베이스 구축


    이 프로그램은 우편 번호에서 도시 이름을 가져옵니다.우리는 이 점을 실현하기 위해 데이터베이스를 사용할 것이다.
    이 응용 프로그램의 경우 SQLite 데이터베이스를 사용합니다.알아, 상투적이지만, 헤헤, 그것들은 아주 쓸모가 있어.
    나는 여기에 관련 우편 번호와 도시 정보를 포함하는 데이터베이스를 만들 것이다.나는 이 프로젝트를 위해 this zipcode database(CSV)의 개인 버전을 다운로드했다.
    내가 유일하게 한 것은 칼럼의 제목을 바꾸는 것이다.

    너는 마음대로 명명할 수 있다.
    다음으로 우리는 DB Browser for SQLite을 사용할 것이다.Windows, Mac 또는 Linux에서 이 기능을 실행할 수 있습니다.
    먼저 새 데이터베이스를 만듭니다.

    zipcode로 저장합니다.db.
    이제 CSV를 새 데이터베이스로 가져와야 합니다.
    CSV 파일에서 파일로 이동 -> 가져오기 -> 테이블

    구분자와 따옴표가 설정되어 있는지 확인하십시오.

    가져오기를 완료하고 변경 내용 쓰기를 클릭하여 변경 사항을 데이터베이스에 저장합니다.
    지금 우리는 데이터베이스가 생겼다.

    우리의 결과를 세우다


    네, 지금 데이터베이스를 만들었습니다.결과가 어떻게 될지 봅시다.나는 단지 한 도시의 우편 번호로 돌아가고 싶지만, 만약 우리가 여기에 더 많은 정보가 있다면, 왜 돌아오지 않겠습니까?
    이것은 내가 도시를 조회할 때 되돌아오기로 결정한 정보다.JSON으로 내보내겠습니다.
    다음과 같은 구조를 만듭니다.
    type city struct {
        Zip        string `json:"zip"`
        City       string `json:"city"`
        State      string `json:"state"`
        County     string `json:"county"`
        Timezone   string `json:"timezone"`
        Latitude   string `json:"latitude"`
        Longitude  string `json:"longitude"`
        Population string `json:"population"`
    }
    
    각 항목에 다음을 추가했습니다.
     `json:"zip"`
    
    이 기호를 사용하면 JSON 출력 이름의 모양을 지정할 수 있습니다.따라서 우리는 그것을 모두 소문자로 바꿀 수도 있고, 필요에 따라 이름을 완전히 바꿀 수도 있다.
    이것은 우리의 출력이 될 것이다.채우자!

    ZIP 구축 방법


    이것은 응용 프로그램을 어떻게 입력하는지 보여 주는 것입니다.네가 생산 중에 사용할 물건이 아니다.우리는 이 방법을 구축하여'도시에서 우편 번호로'기능을 봉인할 것이다.이 메서드는 다음을 수행합니다.
  • 도시 이름의 문자열 입력
  • SQLite db
  • 에 연결
  • 실행 조회
  • 수집 결과
  • 보관함
  • JSON
  • 으로 인코딩
  • 반환
  • 만약 이것이 한 가지 방법으로는 매우 어려운 것 같다면, 너는 옳다.실제 응용 프로그램에서 일부 직책을 분리하기를 원할 수도 있지만, 이것은 좋은 입문 프로젝트입니다.

    수입하다


    우리는 이 점을 실현하기 위해 소프트웨어 패키지를 좀 가지고 가야 한다.가져오기 선언에 다음 내용을 추가합니다.
    "database/sql"
    "encoding/json"
    "log"
    _ "github.com/mattn/go-sqlite3"
    
    이것은 우리가 응용 프로그램을 작업하는 데 사용할 패키지입니다.

    변수


    두 변수 선언을 메소드 맨 위에 추가합니다.
    // get the city from the URL
    reqCity, ok := r.URL.Query()["city"]
    // Collection of cities
    var cities []city
    
    첫 번째 변수 reqCity는 URL에서 찾을 도시입니다.
    다음, 도시, 도시의 집합.이것은 보통 몇 개의 도시가 동명이고 대도시에는 여러 개의 우편 번호가 있기 때문이다.

    따라서 우리는 그것들을 하나의 집합에 저장한 후에 돌려보낼 것이다.

    데이터베이스에 연결


    다음은 SQLite 데이터베이스에 연결합니다.
    // open up database
    db, err := sql.Open("sqlite3", "./zipcode.db")
    if err != nil {
      log.Fatal(err)
    }
    defer db.Close()
    
    이것은 매우 직접적인 관계다.SQLite 라이브러리를 사용하여 zipcode를 열고 있습니다.db.만약 그것이 존재하지 않거나 문제가 있다면, 우리는 프로그램을 붕괴시킬 것이다.우리는db를 미루고 싶습니다.Close() 메서드가 완료될 때 연결을 닫습니다.

    데이터베이스 조회


    다음에 우리는 데이터베이스에 대해 조회를 실행할 것이다.우리가 해야 할 첫 번째 일은 URL의 문자열에서 인용부호를 제거하는 것이다.
    searchCity := strings.Trim(reqCity[0], "\"")
    
    이것은 항상 필요한 것은 아니지만, 그것을 깨끗이 정리할 수 있어서 매우 기쁘다.만약 당신이 이것으로 진정한 프로그램을 만들고 싶다면, 이 문자열에 대해 추가 검사/정리를 해야 합니다.지금 우리는 인용을 없애기만 하면 된다.
    다음 질의를 실행합니다.
    rows, err := db.Query("select zip, primaryCity, state, county, timezone, latitude, longitude, irsEstimatedPopulation2015 from zip_code_database where primaryCity like '%' || ? || '%' and type = 'STANDARD'", searchCity)
    if err != nil {
      log.Fatal(err)
    }
    
    여기서, 우리는 데이터베이스에 select 문장을 실행하고, 그것을 줄로 되돌려줍니다.이것은 우리가 데이터를 되돌려 받은 후에 데이터를 처리할 수 있도록 할 것이다.
    우리로 하여금 말다툼을 미루게 하다.Close() 동시에:
    defer rows.Close()
    
    설탕의를 함유한다지금 우리는 처리할 수 있는 데이터가 좀 있기를 바란다.

    분석 결과


    이제 결과집이 하나 생겼습니다. for 순환을 사용하여 분석합니다.
    for rows.Next() {
                city := city{}
                err = rows.Scan(&city.Zip, &city.City, &city.State, &city.County, &city.Timezone, &city.Latitude, &city.Longitude, &city.Population)
                cities = append(cities, city)
                if err != nil {
                    log.Fatal(err)
                }
            }
    
    여기서 우리는 도시 구조의 새로운 실례를 만들고 줄을 사용했다.스캔 각 줄을 스캔하여 원소를 추출하여 우리의 구조에 넣습니다.만약 오류가 발생하면, 우리는 프로그램을 붕괴시킬 것이다.
    그리고 우리는 찾은 모든 도시를 도시 집합에 추가할 것이다.이상적인 상황에서 우리는 약간의 깨끗한 데이터를 가지고 있을 것이다.
    우리는 일부 오류 처리를 추가할 것이다. (마찬가지로 응용 프로그램만 저장할 뿐)
    err = rows.Err()
    if err != nil {
      log.Fatal(err)
    }
    
    우리 잘 지냈어!

    데이터 패키지 및 전송


    우리는 이것을 포장하여 발송할 것이다.
    if ok && len(cities) > 0 {
      w.Header().Set("Content-Type", "application/json")
        json.NewEncoder(w).Encode(cities)
    } else {
      w.WriteHeader(404)
    }
    
    URL에서 값을 가져와서 ok로 되돌려주는 것을 기억하십니까?검사 중입니다.따라서 만약 요청된 도시가 있다면, 우리는 결과를 얻고, 우리는 계속 전진할 것이다.
    우리는 내용 형식 헤더를 응용 프로그램/json으로 설정한 다음, 우리의cities 집합을 json으로 인코딩합니다.이것이 바로 우리가 반환해야 할 것이다.
    만약 우리의 요청이나 결과에 오류가 있다면, 우리는 404만 되돌아갈 것이다.한번 해보자!

    응용을 디지털 해양으로 밀다


    이 애플리케이션을 Digital Ocean에 배포하려면 다음을 수행하고 실행하십시오.
    git add .
    git commit -m "Creating our First Deploy"
    git push origin main
    
    그것은 배치를 시작할 것이다.

    구축되면 다음을 볼 수 있습니다.

    응용 프로그램의 URL이 표시됩니다.빨리 확인해 보겠습니다.

    이것은 가능하다!내 고향 (가스톤) 을 입력하면 우편 번호와 내가 지정한 다른 도시 정보로 돌아옵니다.
    Postman을 사용하여 테스트할 수도 있습니다.

    이것은 가능하다!만약 이것이 진정한 응용 프로그램이라면, 또 몇 가지 멋진 견해가 있다.

    이 플랫폼에 대한 저의 생각.


    이 강좌를 통해 우리는 디지털 오션의 새로운 응용 플랫폼에서 간단한 Go 웹 API 응용 프로그램을 구축하는 방법을 배웠다.이것은 몇 분 동안 문서를 읽고 약간의 수정을 한 후에 배치한 것이다.나는 아직 플랫폼에 대해 광범위한 테스트를 진행한 적이 없지만, 이것은 매우 간단하다.
    지금까지 나는 알아차렸다.
  • 사용하기 쉬움
  • 에는 클라이언트 소프트웨어가 필요 없음(Git만!)
  • 클릭 간단
  • 필요할 때 사용자 정의 능력
  • 전반적으로 말하자면, 이 플랫폼은 매우 큰 잠재력을 가지고 있다.그래서 Digital Ocean으로 가서 시도해 보세요.네가 좋아할 것 같아!
    질문, 댓글?Let me know!

    좋은 웹페이지 즐겨찾기