Rumah >pembangunan bahagian belakang >Golang >Bina perkhidmatan API konkurensi tinggi: gunakan go-zero untuk melaksanakan

Bina perkhidmatan API konkurensi tinggi: gunakan go-zero untuk melaksanakan

王林
王林asal
2023-06-22 17:07:371756semak imbas

Dengan kemunculan era data besar, jumlah data yang perlu diproses oleh perusahaan semakin besar dan semakin besar, dan kelajuan pemprosesan semakin pantas dan pantas. Oleh itu, adalah sangat penting untuk membina perkhidmatan API konkurensi tinggi. Dalam artikel ini, kami akan memperkenalkan cara menggunakan rangka kerja go-zero untuk membina perkhidmatan API serentak tinggi.

1. Apa itu go-zero?

go-zero ialah rangka kerja mikroperkhidmatan yang dibangunkan berdasarkan bahasa Golang Matlamatnya adalah untuk menyelesaikan titik kesakitan dalam seni bina perkhidmatan mikro, seperti konfigurasi kompleks, pengurusan perisian tengah, pendaftaran perkhidmatan dan isu lain. go-zero menyokong pembinaan pantas API berprestasi tinggi, perisian tengah dan perkhidmatan RPC, serta menyediakan set komponen dan rangkaian alat yang kaya.

2. Mengapa menggunakan go-zero?

Menggunakan go-zero boleh membawa kelebihan berikut:

1 Prestasi tinggi

go-zero menggunakan sejumlah besar teknologi pengoptimuman, termasuk IO tak segerak dan coroutine asas. tunggu kolam. Oleh itu, prestasinya sangat tinggi dan ia boleh mengendalikan sejumlah besar permintaan serentak.

2. Mudah dikembangkan

go-zero menyediakan sejumlah besar komponen dan rantai alat, dan anda boleh mengembangkan perkhidmatan anda dengan cepat melalui fail konfigurasi tanpa menulis semula kod.

3. Kebolehpercayaan yang tinggi

go-zero menggunakan banyak teknologi yang stabil, seperti pusat pendaftaran perkhidmatan seperti etcd dan Consul, untuk memastikan kebolehpercayaan keseluruhan sistem.

4. Kecekapan pembangunan tinggi

pembangunan API go-zero adalah berdasarkan Swagger/OpenAPI, jadi ia boleh menjana dokumen dan pelanggan, meningkatkan kecekapan pembangunan.

3. Bagaimanakah cara menggunakan go-zero untuk membina perkhidmatan API konkurensi tinggi?

Langkah 1: Pasang go-zero

go-zero menggunakan sejumlah besar teknologi pengoptimuman, termasuk IO tak segerak, kumpulan coroutine asas, dsb. Oleh itu, prestasinya sangat tinggi dan ia boleh mengendalikan sejumlah besar permintaan serentak.

Langkah 2: Cipta API

Untuk mencipta API mudah, kita perlu mencipta direktori api dalam direktori projek dan mencipta fail di dalamnya, seperti user.api, dan kemudian dalam fail Tulis kandungan berikut:

type (
    UserReq struct {
        Name  string `json:"name"`
        Age   int    `json:"age"`
        Email string `json:"email"`
    }

    UserResp struct {
        Id       int    `json:"id"`
        UserName string `json:"username"`
        Age      int    `json:"age"`
        Email    string `json:"email"`
    }

    UserApi interface {
        AddUser(ctx context.Context, req UserReq) (*UserResp, error)
        UpdateUser(ctx context.Context, id int, req UserReq) (*UserResp, error)
        GetUser(ctx context.Context, id int) (*UserResp, error)
    }
)

type (
    // 具体实现自己根据需要实现
    DefaultUserApi struct {
    }
)

func (ua *DefaultUserApi) AddUser(ctx context.Context, req UserReq) (*UserResp, error) {
    // 具体实现自己根据需要实现
    return nil, errors.New("not implement")
}

func (ua *DefaultUserApi) UpdateUser(ctx context.Context, id int, req UserReq) (*UserResp, error) {
    // 具体实现自己根据需要实现
    return nil, errors.New("not implement")
}

func (ua *DefaultUserApi) GetUser(ctx context.Context, id int) (*UserResp, error) {
    // 具体实现自己根据需要实现
    return nil, errors.New("not implement")
}

Langkah 3: Gunakan goctl untuk menjana kod

# 安装goctl
GO111MODULE=on GOPROXY=https://goproxy.io,direct go get -u github.com/tal-tech/go-zero/tools/goctl
# 生成代码
goctl api go -api user.api -dir .

akan menjana fail user.go dalam direktori, yang mengandungi struct dan antara muka tersuai kami, juga seperti beberapa Struktur dan fungsi yang dihasilkan oleh go-zero itu sendiri.

Langkah 4: Laksanakan logik khusus

Dalam fail user.go, kita perlu melaksanakan logik khusus kita sendiri, contohnya:

package api

import (
    "context"
    "errors"

    "github.com/tal-tech/go-zero/core/logx"
    "github.com/tal-tech/go-zero/rest/httpx"
)

type (
    UserReq struct {
        Name  string `json:"name"`
        Age   int    `json:"age"`
        Email string `json:"email"`
    }

    UserResp struct {
        Id       int    `json:"id"`
        UserName string `json:"username"`
        Age      int    `json:"age"`
        Email    string `json:"email"`
    }

    UserApi interface {
        AddUser(ctx context.Context, req UserReq) (*UserResp, error)
        UpdateUser(ctx context.Context, id int, req UserReq) (*UserResp, error)
        GetUser(ctx context.Context, id int) (*UserResp, error)
    }
)

type (
    // 具体实现自己根据需要实现
    DefaultUserApi struct {
    }
)

func (ua *DefaultUserApi) AddUser(ctx context.Context, req UserReq) (*UserResp, error) {
    // 具体实现
    logx.Info("add user:", req)
    return &UserResp{
        Id:       10001,
        UserName: req.Name,
        Age:      req.Age,
        Email:    req.Email,
    }, nil
}

func (ua *DefaultUserApi) UpdateUser(ctx context.Context, id int, req UserReq) (*UserResp, error) {
    // 具体实现
    logx.Info("update user:", id, req)
    return &UserResp{
        Id:       id,
        UserName: req.Name,
        Age:      req.Age,
        Email:    req.Email,
    }, nil
}

func (ua *DefaultUserApi) GetUser(ctx context.Context, id int) (*UserResp, error) {
    // 具体实现
    logx.Info("get user:", id)
    return &UserResp{
        Id:       id,
        UserName: "张三",
        Age:      25,
        Email:    "zhangsan@mail.com",
    }, nil
}

func (ua *DefaultUserApi) Error(ctx context.Context, err error) {
    httpx.Error(ctx, err)
}

Langkah 5: Tulis konfigurasi fail

Buat direktori etc dalam direktori akar projek, cipta fail config.toml di dalamnya, dan tulis kandungan berikut:

Name = "user"

[server]
Host = "0.0.0.0"
Port = 8888
Mode = "dev"

[etcd]
Hosts = [
    "127.0.0.1:2379"
]

[redis]
Host = "127.0.0.1:6379"
Type = "standalone"
Password = ""

Antaranya, Host dan Port di bawah pelayan mewakili alamat dan port perkhidmatan mendengar masing-masing , etcd mewakili alamat pusat pendaftaran etcd, dan redis mewakili alamat redis.

Langkah 6: Mulakan perkhidmatan

Laksanakan arahan berikut dalam direktori projek:

go run user.go -f etc/config.toml

bermaksud untuk memulakan perkhidmatan API dengan config.toml sebagai fail konfigurasi.

Langkah 7: Uji perkhidmatan

Gunakan curl dan alatan lain untuk memulakan permintaan dan menguji sama ada antara muka API tersedia. Contohnya:

curl localhost:8888/user -X POST -H "Content-Type: application/json" -d '{"name":"zhangsan", "age": 20, "email": "zhangsan@mail.com"}'

bermaksud menghantar permintaan kepada kaedah POST localhost:8888/user, dan badan permintaan mengandungi objek JSON.

Bahan rujukan:

dokumentasi rasmi go-zero: https://go-zero.dev/

alamat github go-zero: https://github.com /tal-tech/go-zero

Atas ialah kandungan terperinci Bina perkhidmatan API konkurensi tinggi: gunakan go-zero untuk melaksanakan. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn