Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Pembangunan Golang: Melaksanakan antara muka API berasaskan GraphQL

Pembangunan Golang: Melaksanakan antara muka API berasaskan GraphQL

王林
王林asal
2023-09-20 08:15:111387semak imbas

Pembangunan Golang: Melaksanakan antara muka API berasaskan GraphQL

Pembangunan Golang: Melaksanakan antara muka API berasaskan GraphQL

Pengenalan:
Dalam pembangunan perisian hari ini, cekap dan membina fleksibel Antara muka API adalah sangat penting. Sebagai bahasa pertanyaan dan masa jalan yang baru muncul, GraphQL menyediakan cara yang lebih fleksibel, intuitif dan cekap untuk mentakrif dan membuat pertanyaan antara muka API. Artikel ini akan memperkenalkan cara menggunakan Golang untuk membangunkan antara muka API berasaskan GraphQL dan menyediakan contoh kod yang sepadan.

1. Apakah itu GraphQL?
GraphQL ialah bahasa pertanyaan dan masa jalan yang dibangunkan oleh Facebook. Ia berbeza daripada API RESTful tradisional, GraphQL membolehkan pelanggan mentakrifkan struktur dan medan data yang diperlukan dengan tepat, dan hanya mengembalikan data yang diperlukan pelanggan, mengelakkan masalah pengambilan semula yang berlebihan atau pertanyaan yang tidak cekap dalam antara muka API tradisional. GraphQL juga menyokong berbilang pertanyaan dan gabungan berbilang sumber data, yang memberikan pembangun bahagian hadapan lebih fleksibiliti apabila menanya data tanpa memerlukan berbilang permintaan ke bahagian belakang.

2. Golang dan GraphQL
Golang ialah bahasa untuk membangunkan aplikasi back-end yang cekap, berskala dan berkuasa. Dengan menggunakan Golang untuk membangunkan antara muka API berasaskan GraphQL, kami boleh memberikan permainan penuh kepada prestasi dan kebolehskalaan serentak Golang, serta mencapai pertanyaan dan pemprosesan data yang cekap.

3 Bina persekitaran pembangunan
Sebelum memulakan pembangunan, kita perlu memasang beberapa perpustakaan yang diperlukan untuk menyokong pembangunan GraphQL.

  1. Pasang Golang
    Pertama, kita perlu memasang Golang. Versi Golang terkini boleh dimuat turun dan dipasang melalui laman web rasmi (https://golang.org/).
  2. Pasang perpustakaan GraphQL
    Golang menyediakan banyak perpustakaan untuk menyokong pembangunan GraphQL. Antaranya, perpustakaan yang paling popular ialah: github.com/graphql-go/graphql, github.com/graph-gophers/graphql-go, dll. Anda boleh memilih salah satu daripada perpustakaan ini atau memilih perpustakaan lain mengikut keperluan anda.

Dalam artikel ini, kami memilih untuk menggunakan perpustakaan github.com/graphql-go/graphql untuk melaksanakan antara muka API berasaskan GraphQL.

Pertama, buka terminal dan gunakan arahan berikut untuk memasang perpustakaan:
go get github.com/graphql-go/graphql

4. Laksanakan GraphQL Antara muka API
Di bawah kami akan menggunakan contoh mudah untuk menunjukkan cara menggunakan Golang untuk melaksanakan antara muka API berdasarkan GraphQL.

Kami menganggap bahawa kami sedang membina tapak blog dan perlu melaksanakan antara muka API untuk menanyakan tajuk, pengarang dan teks blog.

  1. Buat Skema GraphQL
    Pertama, kita perlu mencipta Skema GraphQL untuk menentukan struktur data dan jenis pertanyaan kami. Dalam contoh ini, kami mentakrifkan objek Blog dan jenis Pertanyaan.
type Blog struct {
    ID     graphql.ID
    Title  string
    Author string
    Body   string
}

var (
    blogs   []*Blog
    root    *graphql.Object
    schema  *graphql.Schema
)

func init() {
    root = graphql.NewObject(graphql.ObjectConfig{
        Name: "Query",
        Fields: graphql.Fields{
            "blog": &graphql.Field{
                Type: graphql.NewList(blogType),
                Resolve: func(p graphql.ResolveParams) (interface{}, error) {
                    return blogs, nil
                },
            },
        },
    })

    schema, _ = graphql.NewSchema(graphql.SchemaConfig{
        Query: root,
    })
}
  1. Buat antara muka API
    Seterusnya, kita perlu mencipta antara muka API untuk menerima dan memproses permintaan pertanyaan GraphQL dan mengembalikan hasil yang sepadan.

Kami mencipta Pengendali HTTP untuk mengendalikan permintaan GraphQL dan menggunakan fungsi Execute dalam perpustakaan graphql-go untuk melaksanakan pertanyaan GraphQL.

func GraphqlHandler(w http.ResponseWriter, r *http.Request) {
    result := graphql.Do(graphql.Params{
        Schema:        *schema,
        RequestString: r.URL.Query().Get("query"),
    })

    if len(result.Errors) > 0 {
        log.Printf("execution failed: %v", result.Errors)
        http.Error(w, result.Errors[0].Message, http.StatusInternalServerError)
        return
    }

    json.NewEncoder(w).Encode(result)
}
  1. Daftar antara muka API
    Akhir sekali, kami perlu mendaftarkan antara muka API dan memulakan pelayan HTTP untuk membalas permintaan pertanyaan GraphQL.
func main() {
    http.HandleFunc("/graphql", GraphqlHandler)
    log.Fatal(http.ListenAndServe(":8080", nil))
}

5. Uji antara muka API GraphQL
Selepas memulakan pelayan HTTP, kami boleh menggunakan alatan (seperti Postman) untuk menguji antara muka API GraphQL.

Hantar permintaan POST ke http://localhost:8080/graphql, tetapkan tajuk permintaan Content-Type kepada application/json, dan badan permintaan ialah contoh pertanyaan berikut:

{
    "query": "{ blog { title author body } }"
}

Server Hasil pertanyaan yang sepadan akan dikembalikan, hanya mengembalikan medan yang diperlukan dalam permintaan.

6. Ringkasan
Artikel ini memperkenalkan cara menggunakan Golang untuk membangunkan antara muka API berdasarkan GraphQL dan menyediakan contoh kod yang sepadan. Dengan menggunakan Golang dan GraphQL, kami boleh membina antara muka API yang cekap dengan cepat dan fleksibel serta memenuhi keperluan pelanggan dengan lebih baik. Saya harap artikel ini dapat membantu anda memahami dan menggunakan pembangunan GraphQL!

Atas ialah kandungan terperinci Pembangunan Golang: Melaksanakan antara muka API berasaskan GraphQL. 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