ホームページ バックエンド開発 Golang Go で最初の REST API を構築する

Go で最初の REST API を構築する

Oct 02, 2024 pm 02:07 PM

Building Your First REST API with Go

Go で最初の REST API を構築 – 始めましょう!

それで、Go に関する話題を聞いたことがあるでしょう?高速でシンプル、そして基本的に最近のバックエンド開発のロックスターです。 Go を初めて使用する場合、または Go を使って何か素晴らしいものを構築したいと考えている場合は、ここが正しい場所です。今週は、Go を使用して独自の REST API を構築する方法を詳しく説明します。楽しい取り組みになるので、しっかり準備をしてください!

なぜ行くのですか?

では、なぜこれほど多くの開発者が Go に気絶しているのでしょうか?想像してみてください。Google のエンジニアは、プログラムがコンパイルされるのを待ち続けることにうんざりし、髪の毛をかきむしりたくなるようなものを作成することにしました。 Go を入力してください。これは、単に仕事を完了するだけでなく、迅速かつ楽に実行できる言語です。

Go は、マルチコア システムを最大限に活用して、今日のハードウェア向けに構築されています。その秘密兵器? Goroutines - 汗をかくことなく大量のタスクを同時に処理できる魔法のような小さな同時ワーカーです。 Web アプリ、API、マイクロサービスのいずれを構築している場合でも、Go は、いつも夢見ているよく潤ったマシンのように、物事をスムーズに実行し続けます。

そして、これがキッカーです: Go は愚かなほど簡単に習得できます。 Python、Java、あるいは PHP のような「古典的な」ものから切り替える場合でも、「Hello, World!」と言う前に、Go でコーディングを始めることができます。そして高速で、本当に高速に動作します。もっと言う必要がありますか?

Go プロジェクトのセットアップ

さて、おしゃべりはこれくらいにして、実際にやってみましょう。まず、単純な Go プロジェクトをセットアップする必要があります。心配しないでください。私がサポートします:

  1. Go がインストールされていることを確認してください。そうでない場合は、ここから入手してください。

  2. 次に、プロジェクト ディレクトリを作成し、プロジェクトを初期化しましょう:

   mkdir go-rest-api
   cd go-rest-api
   go mod init github.com/yourusername/go-rest-api
ログイン後にコピー
  1. このディレクトリ内に main.go という名前の新しいファイルを作成し、コーディングの魔法の準備をします。

APIの作成

ここからがエキサイティングなところです!本のリストを管理するための非常にシンプルな API を構築します (本が好きではない人はいないでしょう)。私たちの API には次のエンドポイントがあります:

  • GET /books – すべての本を取得します (やった、本!)
  • POST /books – 新しい本を追加します
  • GET /books/:id – ID によって特定の書籍を取得します (すべての書籍が同じように作成されるわけではないため)

準備はできましたか?コードを詳しく見てみましょう:

package main

import (
    "encoding/json"
    "fmt"
    "log"
    "net/http"
    "strconv"

    "github.com/gorilla/mux"
)

type Book struct {
    ID     int    `json:"id"`
    Title  string `json:"title"`
    Author string `json:"author"`
}

var books []Book

// Get all books
func getBooks(w http.ResponseWriter, r *http.Request) {
    w.Header().Set("Content-Type", "application/json")
    json.NewEncoder(w).Encode(books)
}

// Get a single book by ID
func getBook(w http.ResponseWriter, r *http.Request) {
    params := mux.Vars(r)
    id, err := strconv.Atoi(params["id"])
    if err != nil {
        http.Error(w, "Invalid book ID", http.StatusBadRequest)
        return
    }
    for _, book := range books {
        if book.ID == id {
            w.Header().Set("Content-Type", "application/json")
            json.NewEncoder(w).Encode(book)
            return
        }
    }
    http.Error(w, "Book not found", http.StatusNotFound)
}

// Add a new book
func createBook(w http.ResponseWriter, r *http.Request) {
    var book Book
    _ = json.NewDecoder(r.Body).Decode(&book)
    book.ID = len(books) + 1 // Assign an ID (we’re just winging it here)
    books = append(books, book)
    w.Header().Set("Content-Type", "application/json")
    json.NewEncoder(w).Encode(book)
}

func main() {
    // Add some dummy data to start with
    books = append(books, Book{ID: 1, Title: "The Go Programming Language", Author: "Alan A. A. Donovan"})
    books = append(books, Book{ID: 2, Title: "Learning Go", Author: "Jon Bodner"})

    // Initialize the router
    r := mux.NewRouter()

    // Define the endpoints
    r.HandleFunc("/books", getBooks).Methods("GET")
    r.HandleFunc("/books/{id}", getBook).Methods("GET")
    r.HandleFunc("/books", createBook).Methods("POST")

    // Start the server
    fmt.Println("Server is running on port 8000...")
    log.Fatal(http.ListenAndServe(":8000", r))
}
ログイン後にコピー

ブレイク・イット・ダウン

  1. Mux Router: API でルーティングを処理するためにゴリラ/マルチプレクサを使用しています。これにより、ルートの定義が簡単になり、Go で Web サービスを構築する場合に頼りになります。次の方法でインストールできます。
   go get -u github.com/gorilla/mux
ログイン後にコピー
  1. ハンドラー: HTTP リクエストを処理するために getBooks、getBook、createBook 関数をセットアップしました。 Go の net/http パッケージを使用して、応答とデータのエンコード/デコードを処理します。簡単です!

  2. JSON エンコーディング: ここでは Go の組み込み json パッケージが重労働を行っており、クライアントと API 間の通信を容易にするためにデータを JSON 形式に変換します。

APIの実行

ここからは楽しい部分です。これを実行してみましょう。ターミナルで次を実行するだけです:

go run main.go
ログイン後にコピー

ドーン! API は稼働中です。 Postman やcurl などのツールを使用してテストできるようになりました。

  • すべての書籍を入手:
  curl http://localhost:8000/books
ログイン後にコピー
  • 特定の本を入手します:
  curl http://localhost:8000/books/1
ログイン後にコピー
  • 新しい本を追加:
  curl -X POST http://localhost:8000/books -d '{"title":"New Book","author":"New Author"}' -H "Content-Type: application/json"
ログイン後にコピー

次は何ですか?

バックエンド開発において Go ができることに関して言えば、この小さな API は氷山の一角にすぎません。来週は、認証を追加し (はい、完全な JWT に移行します)、これらのエンドポイントを望ましくない訪問者から保護することでレベルアップします。

パート 2 をお楽しみに -- Go で JWT (JSON Web Token) を使用して REST API で認証用のミドルウェアをセットアップする

以上がGo で最初の REST API を構築するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Golang vs. Python:パフォーマンスとスケーラビリティ Golang vs. Python:パフォーマンスとスケーラビリティ Apr 19, 2025 am 12:18 AM

Golangは、パフォーマンスとスケーラビリティの点でPythonよりも優れています。 1)Golangのコンピレーションタイプの特性と効率的な並行性モデルにより、高い並行性シナリオでうまく機能します。 2)Pythonは解釈された言語として、ゆっくりと実行されますが、Cythonなどのツールを介してパフォーマンスを最適化できます。

Golang and C:Concurrency vs. Raw Speed Golang and C:Concurrency vs. Raw Speed Apr 21, 2025 am 12:16 AM

Golangは並行性がCよりも優れていますが、Cは生の速度ではGolangよりも優れています。 1)Golangは、GoroutineとChannelを通じて効率的な並行性を達成します。これは、多数の同時タスクの処理に適しています。 2)Cコンパイラの最適化と標準ライブラリを介して、極端な最適化を必要とするアプリケーションに適したハードウェアに近い高性能を提供します。

ゴーを始めましょう:初心者のガイド ゴーを始めましょう:初心者のガイド Apr 26, 2025 am 12:21 AM

goisidealforforbeginnersandsutable forcloudnetworkservicesduetoitssimplicity、andconcurrencyfeatures.1)installgofromtheofficialwebsiteandverify with'goversion'.2)

Golang vs. C:パフォーマンスと速度の比較 Golang vs. C:パフォーマンスと速度の比較 Apr 21, 2025 am 12:13 AM

Golangは迅速な発展と同時シナリオに適しており、Cは極端なパフォーマンスと低レベルの制御が必要なシナリオに適しています。 1)Golangは、ごみ収集と並行機関のメカニズムを通じてパフォーマンスを向上させ、高配列Webサービス開発に適しています。 2)Cは、手動のメモリ管理とコンパイラの最適化を通じて究極のパフォーマンスを実現し、埋め込みシステム開発に適しています。

Golang vs. Python:重要な違​​いと類似点 Golang vs. Python:重要な違​​いと類似点 Apr 17, 2025 am 12:15 AM

GolangとPythonにはそれぞれ独自の利点があります。Golangは高性能と同時プログラミングに適していますが、PythonはデータサイエンスとWeb開発に適しています。 Golangは同時性モデルと効率的なパフォーマンスで知られていますが、Pythonは簡潔な構文とリッチライブラリエコシステムで知られています。

GolangとC:パフォーマンスのトレードオフ GolangとC:パフォーマンスのトレードオフ Apr 17, 2025 am 12:18 AM

GolangとCのパフォーマンスの違いは、主にメモリ管理、コンピレーションの最適化、ランタイム効率に反映されています。 1)Golangのゴミ収集メカニズムは便利ですが、パフォーマンスに影響を与える可能性があります。

パフォーマンスレース:ゴラン対c パフォーマンスレース:ゴラン対c Apr 16, 2025 am 12:07 AM

GolangとCにはそれぞれパフォーマンス競争において独自の利点があります。1)Golangは、高い並行性と迅速な発展に適しており、2)Cはより高いパフォーマンスと微細な制御を提供します。選択は、プロジェクトの要件とチームテクノロジースタックに基づいている必要があります。

Golang vs. Python:長所と短所 Golang vs. Python:長所と短所 Apr 21, 2025 am 12:17 AM

GolangisidealforBuildingsCalables Systemsduetoitsefficiency andConcurrency、Whilepythonexcelsinquickscriptinganddataanalysisduetoitssimplicityand vastecosystem.golang'ssignencouragesclean、readisinediteNeditinesinedinediseNabletinedinedinedisedisedioncourase

See all articles