Go를 사용하여 간단한 REST API 구축

Susan Sarandon
풀어 주다: 2024-10-31 22:06:44
원래의
554명이 탐색했습니다.

Building a simple REST API with Go

Go는 시스템 프로그래밍을 위한 훌륭한 언어이지만 특히 REST API를 구축할 때 웹에서도 빛을 발합니다. 이 가이드는 Go의 표준 라이브러리를 사용하여 간단한 REST API를 만드는 과정을 안내합니다. 서버 목록을 관리하여 서버 기록을 추가, 제거, 볼 수 있는 API를 구축하겠습니다. 또한 더 깔끔한 경로와 핸들러를 가질 수 있도록 메서드 일치를 위해 Go 1.22의 새로운 라우터 개선 사항을 사용할 예정입니다.

이 가이드에서는 귀하가 Go에 대한 기본적인 이해를 갖고 있고 Go가 귀하의 컴퓨터에 설치되어 있다고 가정합니다.

설정

프로젝트를 위한 새 디렉토리를 생성하고 Go 모듈을 초기화하세요.

mkdir server-api
cd server-api
go mod init server-api
로그인 후 복사

코드

main.go라는 파일을 만듭니다. Go의 표준 http 패키지를 사용하겠습니다. 여기에는 기본 API에 필요한 모든 것이 포함되어 있습니다.

package main

import (
    "encoding/json"
    "fmt"
    "log"
    "net/http"
)
로그인 후 복사

먼저 서버가 어떤 모습인지 정의해 보겠습니다. ID, 이름, IP 주소, 지역만 입력하면 됩니다.

type Server struct {
    ID     string `json:"id"`
    Name   string `json:"name"`
    IP     string `json:"ip"`
    Region string `json:"region`
}
로그인 후 복사

슬라이스를 사용하여 서버를 메모리에 저장하겠습니다. 실제 애플리케이션에서는 아마도 데이터베이스를 사용할 것입니다.

var servers = []Server{
    {ID: "srv1", Name: "prod-1", IP: "10.0.1.1", Region: "us-east"},
    {ID: "srv2", Name: "prod-2", IP: "10.0.1.2", Region: "eu-west"},
}
로그인 후 복사

라우터 만들기

다음으로 경로를 설정하겠습니다. Go 1.22에는 이를 매우 간단하게 만드는 새로운 라우팅 구문이 도입되었습니다.

func main() {
    mux := http.NewServeMux()

    mux.HandleFunc("GET /servers", listServers)
    mux.HandleFunc("GET /servers/{id}", showServer)
    mux.HandleFunc("POST /servers", createServer)
    mux.HandleFunc("DELETE /servers/{id}", deleteServer)

    fmt.Println("Server starting on port 8080...")
    log.Fatal(http.ListenAndServe(":8080", mux))
}
로그인 후 복사

핸들러

이제 각 핸들러를 구현해 보겠습니다. 먼저 모든 서버를 나열합니다.

func listServers(w http.ResponseWriter, r *http.Request) {
    w.Header().Set("Content-Type", "application/json")
    json.NewEncoder(w).Encode(servers)
}
로그인 후 복사

ID로 단일 서버 얻기:

func showServer(w http.ResponseWriter, r *http.Request) {
    w.Header().Set("Content-Type", "application/json")
    id := r.PathValue("id")

    for _, server := range servers {
        if server.ID == id {
            json.NewEncoder(w).Encode(server)
            return
        }
    }

    http.Error(w, "Server not found", http.StatusNotFound)
}
로그인 후 복사

새 서버 생성:

func createServer(w http.ResponseWriter, r *http.Request) {
    w.Header().Set("Content-Type", "application/json")

    var server Server
    if err := json.NewDecoder(r.Body).Decode(&server); err != nil {
        http.Error(w, err.Error(), http.StatusBadRequest)
        return
    }

    servers = append(servers, server)
    w.WriteHeader(http.StatusCreated)
    json.NewEncoder(w).Encode(server)
}
로그인 후 복사

마지막으로 서버 삭제:

func deleteServer(w http.ResponseWriter, r *http.Request) {
    id := r.PathValue("id")

    for i, server := range servers {
        if server.ID == id {
            servers = append(servers[:i], servers[i+1:]...)
            w.WriteHeader(http.StatusNoContent)
            return
        }
    }

    http.Error(w, "Server not found", http.StatusNotFound)
}
로그인 후 복사

API 사용

코드가 준비되면 실행하세요.

go run main.go
로그인 후 복사

cURL을 사용하여 각 엔드포인트와 상호작용하는 방법은 다음과 같습니다.

모든 서버 나열:

curl localhost:8080/servers
로그인 후 복사

특정 서버 받기:

curl localhost:8080/servers/srv1
로그인 후 복사

서버 추가:

curl -X POST localhost:8080/servers   -H "Content-Type: application/json";   -d '{"id":"srv3","name":"prod-3","ip":"10.0.1.3","region":"ap-south"}';
로그인 후 복사

서버 삭제:

curl -X DELETE localhost:8080/servers/srv1
로그인 후 복사

다음은 무엇입니까?

이것은 기본 API이지만 추가할 수 있는 항목이 많습니다.

  • 입력 유효성 검사
  • 올바른 오류 처리
  • PostgreSQL과 같은 데이터베이스를 갖춘 지속적인 서버
  • 인증
  • 로깅 요청
  • 단위 테스트

표준 라이브러리는 놀라울 정도로 API를 구축할 수 있습니다. 더 많은 모든 기능을 갖춘 프레임워크를 사용할 수 있지만 표준 라이브러리부터 시작하면 뒤에서 마법 같은 일이 발생하지 않고도 기본을 이해하는 데 도움이 됩니다.

위 내용은 Go를 사용하여 간단한 REST API 구축의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:dev.to
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!