Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Mari kita bincangkan tentang proses menggunakan bahasa Go untuk meminta API

Mari kita bincangkan tentang proses menggunakan bahasa Go untuk meminta API

PHPz
PHPzasal
2023-04-11 10:39:141159semak imbas

Dalam pembangunan web moden, API telah menjadi bahagian yang sangat diperlukan. Untuk melengkapkan penghantaran data dan interaksi daripada klien ke pelayan, kami perlu menghantar dan menerima permintaan dan respons HTTP. Dalam artikel ini, kami akan menggunakan bahasa Go untuk melaksanakan proses meminta API.

Bahasa Go ialah bahasa pengaturcaraan sumber terbuka yang sangat sesuai untuk membina aplikasi web yang sangat serentak, berskala dan cekap. Dalam artikel ini, kami akan menggunakan pustaka standard bahasa Go atau pustaka pihak ketiga untuk meminta API dan memproses data respons.

Rujukan:

  • https://golang.org/pkg/net/http/
  • https://github.com/go-resty/ resty
  • https://golang.org/pkg/encoding/json/
  • https://github.com/bitly/go-simplejson

Fahami HTTP Minta

Sebelum memahami cara meminta API menggunakan bahasa Go, kita perlu memahami cara permintaan HTTP berfungsi. Permintaan HTTP biasanya terdiri daripada tiga bahagian: baris permintaan, pengepala permintaan dan isi permintaan.

Barisan permintaan termasuk kaedah yang diminta, URL dan versi HTTP. Di sini, kami biasanya menggunakan kaedah GET kerana ia adalah kaedah yang paling biasa digunakan.

Pengepala permintaan termasuk jenis metadata yang berbeza. Sebagai contoh, kami boleh menggunakan pengepala permintaan untuk menghantar maklumat seperti token kebenaran, ejen pengguna dan kuki.

Ibu permintaan biasanya mengandungi data yang dihantar ke pelayan. Walau bagaimanapun, apabila menggunakan permintaan GET, badan permintaan biasanya kosong.

Gunakan API permintaan perpustakaan standard Go

Pustaka standard bahasa Go termasuk pakej HTTP, yang menyediakan fungsi asas untuk menghantar permintaan HTTP dan memproses respons.

Berikut ialah contoh penggunaan pustaka standard bahasa Go untuk meminta API:

package main

import (
    "fmt"
    "net/http"
)

func main() {
    resp, err := http.Get("https://jsonplaceholder.typicode.com/posts")
    if err != nil {
        fmt.Println("请求错误:", err)
        return
    }
    defer resp.Body.Close()

    fmt.Println("响应状态码:", resp.StatusCode)
    fmt.Println("响应头部:", resp.Header)
}

Dalam contoh ini, kami menggunakan http.Get() untuk menghantar permintaan HTTP GET, menghantar alamat API yang diminta.

Jika permintaan berjaya, kita boleh membaca kandungan badan respons melalui resp.Body. Akhir sekali, kami menutup badan tindak balas menggunakan resp.Body.Close() untuk mengelakkan kebocoran sumber.

Dalam contoh ini, kami hanya mengeluarkan kod status dan maklumat pengepala respons. Jika kita ingin mengendalikan isi permintaan, kita perlu membaca kandungan respons.

Memproses data respons

Pustaka standard dalam bahasa Go menyokong pemprosesan berbilang badan respons. Sebagai contoh, kita boleh menggunakan pakej json untuk memproses respons dalam format JSON, menggunakan pakej xml untuk memproses respons dalam format XML, dsb. Jika respons yang dihantar oleh API tidak berada dalam salah satu daripada format data ini, kami boleh menggunakan pakej io untuk membaca badan respons.

Berikut ialah contoh menggunakan pustaka standard Go untuk memproses respons format JSON:

package main

import (
    "encoding/json"
    "fmt"
    "net/http"
)

type Post struct {
    UserId int `json:"userId"`
    Id     int `json:"id"`
    Title  string `json:"title"`
    Body   string `json:"body"`
}

func main() {
    resp, err := http.Get("https://jsonplaceholder.typicode.com/posts")
    if err != nil {
        fmt.Println("请求错误:", err)
        return
    }
    defer resp.Body.Close()

    var posts []Post
    err = json.NewDecoder(resp.Body).Decode(&posts)
    if err != nil {
        fmt.Println("解析错误:", err)
        return
    }

    for _, p := range posts {
        fmt.Println(p)
    }
}

Dalam contoh ini, kami mentakrifkan struktur Post, yang sepadan dengan format JSON yang dikembalikan oleh API itu. Kami menggunakan pakej json untuk menghuraikan badan tindak balas dan menghuraikan JSON ke dalam struktur Post.

Perhatikan bahawa kami lulus parameter &posts kerana kaedah json.NewDecoder() memerlukan penuding kepada pembolehubah yang dihuraikan. Akhirnya, kami mencetak semua jawatan yang diminta.

Gunakan perpustakaan pihak ketiga untuk meminta API

Selain pustaka standard bahasa Go, terdapat juga beberapa perpustakaan pihak ketiga yang boleh memudahkan proses meminta API. Sebagai contoh, pustaka Resty boleh menjadikan API permintaan lebih mudah dan lebih mudah untuk digunakan.

Berikut ialah contoh menggunakan perpustakaan Resty untuk meminta API:

package main

import (
    "fmt"
    "github.com/go-resty/resty"
)

type Post struct {
    UserId int `json:"userId"`
    Id     int `json:"id"`
    Title  string `json:"title"`
    Body   string `json:"body"`
}

func main() {
    client := resty.New()
    resp, err := client.R().Get("https://jsonplaceholder.typicode.com/posts")
    if err != nil {
        fmt.Println("请求错误:", err)
        return
    }

    var posts []Post
    err = json.Unmarshal(resp.Body(), &posts)
    if err != nil {
        fmt.Println("解析错误:", err)
        return
    }

    for _, p := range posts {
        fmt.Println(p)
    }
}

Dalam contoh ini, kami menggunakan perpustakaan Resty untuk menghantar permintaan, di mana klien.R() .Get() ialah Pintasan untuk menghantar permintaan GET. Kami menggunakan kaedah Unmarshal() untuk menghuraikan badan tindak balas dan menghuraikan JSON ke dalam struktur Post.

Tidak seperti perpustakaan standard Go, pustaka Resty juga menyokong fungsi seperti menambah pengepala permintaan, menghantar parameter, menetapkan proksi, dll., menjadikan permintaan API lebih fleksibel dan mudah.

Ringkasan

Dalam artikel ini, kami mempelajari cara menggunakan bahasa Go untuk menghantar permintaan API dan memproses data respons. Kami mempelajari tentang tiga komponen permintaan HTTP dan cara menggunakan pustaka standard bahasa Go dan pustaka Resty.

Sudah tentu, selain perpustakaan ini, terdapat banyak lagi perpustakaan pihak ketiga yang boleh digunakan. Melalui pembelajaran dan percubaan berterusan, kami boleh mencari perpustakaan dan alatan yang paling sesuai untuk projek semasa dan menggunakannya untuk meningkatkan kecekapan pembangunan dan kualiti kod.

Atas ialah kandungan terperinci Mari kita bincangkan tentang proses menggunakan bahasa Go untuk meminta API. 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