Cara Membuat Permintaan HTTP di Go

Salah satu prinsip dasar yang mengatur fungsi World Wide Web adalah pertukaran permintaan dan tanggapan. Saat Anda mengirim permintaan untuk mengakses halaman web, server merespons dengan data yang sesuai.


Protokol populer yang mengatur berbagai jenis komunikasi internet termasuk HTTP (Protokol Transfer Hiperteks), FTP (Protokol Transfer File), dan SMTP (Protokol Transfer Surat Sederhana).

HTTP adalah protokol yang biasanya Anda gunakan saat melihat situs web atau menggunakan aplikasi yang mendukung web. Anda juga dapat bekerja dengan permintaan HTTP dari banyak bahasa pemrograman, termasuk Go.


Apa Itu Permintaan HTTP?

HTTP mendefinisikan bagaimana klien, seperti browser web, mengirim permintaan ke server yang kemudian mengembalikan respons. Permintaan HTTP berisi informasi tentang sumber daya yang coba diakses klien. Pesan permintaan biasanya terdiri dari URL yang mengidentifikasi sumber daya dan data opsional lainnya seperti header dan parameter kueri.

Ada beberapa jenis permintaan HTTP, termasuk GET, POST, PUT, DELETE, HEAD, OPTIONS, dan CONNECT. Empat jenis metode pertama adalah yang paling umum; mereka mencerminkan masing-masing operasi CRUD baca, buat, perbarui, dan hapus.

Jenis permintaan PUT sering digunakan secara bergantian dengan jenis permintaan PATCH. Mereka mencapai tujuan yang sama, mereka hanya berbeda dalam data yang mereka harapkan untuk disertakan dalam permintaan.

Mengirim Permintaan Menggunakan Metode HTTP Umum

Sudah terpasang http package menyediakan sekumpulan fungsi dan struktur yang dapat Anda gunakan untuk membuat server web dan mengelola permintaan HTTP. Ini adalah paket yang sangat tangguh dan semua kerangka kerja web Go dibangun di atasnya dengan satu atau lain cara. Ini adalah sub-paket dari Go bersih kemasan.

Untuk membuat permintaan HTTP di Go, Anda dapat menggunakan http.PermintaanBaru() berfungsi dan atur metode, URL, header, dan badan permintaan yang sesuai. Setelah membuat permintaan, Anda dapat menggunakan Go net/http paket http.Klien{} struktur untuk menjalankannya dan menerima respons.

Contoh kode berikut digunakan reqres.in, API yang tersedia untuk umum untuk menguji permintaan HTTP. Anda dapat menggunakannya untuk menguji permintaan GET, POST, PUT, dan DELETE dalam program Go Anda.

Permintaan POST

Kode di bawah ini adalah fungsi yang mengirimkan permintaan POST ke /api/pengguna titik akhir reqres.in untuk membuat pengguna baru dengan nama dan pekerjaan.

 package main

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

func createUser(name, job string) {
    fmt.Println("Creating user...")

    apiUrl := "https://reqres.in/api/users"
    userData := []byte(`{"name":"` + name + `","job":"` + job + `"}`)

    
    request, error := http.NewRequest("POST", apiUrl, bytes.NewBuffer(userData))
    request.Header.Set("Content-Type", "application/json; charset=utf-8")

    
    client := &http.Client{}
    response, error := client.Do(request)

    if error != nil {
        fmt.Println(error)
    }

    responseBody, error := io.ReadAll(response.Body)

    if error != nil {
        fmt.Println(error)
    }

    formattedData := formatJSON(responseBody)
    fmt.Println("Status: ", response.Status)
    fmt.Println("Response body: ", formattedData)

    
    defer response.Body.Close()
}

formatJSON adalah fungsi khusus yang dapat Anda tulis untuk memformat data keluaran. Inilah cara Anda dapat menerapkannya:

 
func formatJSON(data []byte) string {
    var out bytes.Buffer
    err := json.Indent(&out, data, "", " ")

    if err != nil {
        fmt.Println(err)
    }

    d := out.Bytes()
    return string(d)
}

Anda dapat menghubungi buat pengguna() fungsi dalam program seperti ini:

 func main() {
    fmt.Println("Making POST request...")
    createUser("Tim Omolana", "Writer")
}

Ketika Anda menjalankan program di terminal, menggunakan jalankan perintah, Anda akan melihat output seperti ini:

Keluaran program contoh permintaan POST

DAPATKAN Permintaan

Kode berikut adalah fungsi yang mengirimkan permintaan GET untuk mengambil pengguna dari server reqres.in menggunakan ID unik mereka.

 
func getUser(id string) {
    fmt.Println("Getting user by ID...")

    
    apiUrl := "https://reqres.in/api/users/" + id
    request, error := http.NewRequest("GET", apiUrl, nil)

    if error != nil {
        fmt.Println(error)
    }

    request.Header.Set("Content-Type", "application/json; charset=utf-8")

    client := &http.Client{}
    response, error := client.Do(request)

    if error != nil {
        fmt.Println(error)
    }

    responseBody, error := io.ReadAll(response.Body)

    if error != nil {
        fmt.Println(error)
    }

    formattedData := formatJSON(responseBody)
    fmt.Println("Status: ", response.Status)
    fmt.Println("Response body: ", formattedData)

    
   defer response.Body.Close()
}

Permintaan GET tidak mengirim data ke server sehingga tidak menerima atau mengirim badan permintaan ke server saat dibuat. Seperti inilah contoh panggilan ke fungsi di atas:

 func main() {
    fmt.Println("Making GET request...")
    getUser("2")
}

Keluaran:

GET permintaan keluaran program contoh

Permintaan PUT

Permintaan PUT sangat mirip dengan permintaan POST karena juga mengirimkan data ke server. Perbedaan utamanya adalah POST membuat sumber daya baru sementara PUT memperbarui yang sudah ada.

Berikut implementasi permintaan PUT:

 
func updateUser(name, job, id string) {
    fmt.Println("Updating user...")

    
    apiUrl := "https://reqres.in/api/users/" + id
    userData := []byte(`{"name":"` + name + `","job":"` + job + `"}`)

    
    request, error := http.NewRequest("PUT", apiUrl, bytes.NewBuffer(userData))
    request.Header.Set("Content-Type", "application/json; charset=utf-8")

    
    
}

Dari kode ini, Anda dapat melihat satu-satunya perbedaan antara permintaan PUT dan permintaan POST di atas adalah nama metode dan URL. Saat menggunakan PUT untuk memperbarui data yang ada, Anda harus menambahkan id ke URL permintaan. Contoh panggilan ke fungsi ini akan terlihat seperti ini:

 func main() {
    
    updateUser("Tim Newname", "Staff Writer", "2")
}

Kode di atas memperbarui pengguna dan menghasilkan keluaran berikut:

PUT request Go contoh keluaran program

HAPUS Permintaan

Gunakan metode permintaan HAPUS untuk melakukan operasi penghapusan di server web. Permintaan hapus menghapus sumber daya yang diidentifikasi oleh URI. Permintaan HAPUS di Go terlihat seperti ini:

 func deleteUser(id string) {
    fmt.Println("Deleting user...")
    
    apiUrl := "https://reqres.in/api/users/" + id

    
    request, error := http.NewRequest("DELETE", apiUrl, nil)
    request.Header.Set("Content-Type", "application/json; charset=utf-8")

    client := &http.Client{}
    response, error := client.Do(request)
    if error != nil {
        fmt.Println(error)
    }

    fmt.Println("Status: ", response.Status)
}

Permintaan DELETE tidak menerima atau mengembalikan badan, oleh karena itu alasannya tidak perlu mem-parsing atau memformat permintaan JSON dan badan tanggapan. Respons hanya mengembalikan status untuk menunjukkan keberhasilan atau kegagalan. Inilah contoh panggilan ke fungsi dengan outputnya:

 func main() {
    fmt.Println("Making DELETE request...")
    deleteUser("2")
}

Keluaran:

HAPUS permintaan di keluaran program contoh Go

Hemat waktu dengan menggunakan http.Post() Dan http.Dapatkan() metode dari net/http paket untuk dibuat POS Dan MENDAPATKAN permintaan secara langsung, tanpa harus menggunakan Permintaan baru() fungsi dan Klien{} struktur untuk membuat dan membuat permintaan secara terpisah. Lihat dokumentasi net/http untuk informasi lebih lanjut.

Membuat Permintaan HTTP di Aplikasi Go

Itu http package di Go menyediakan semua yang diperlukan untuk membuat permintaan HTTP dan menangani respons di aplikasi Go. Fungsi dan struktur yang disediakan oleh paket memungkinkan Anda membuat dan mengirim berbagai jenis permintaan seperti GET, POST, PUT, DELETE, dan banyak lagi.

Hal ini memudahkan pembuatan aplikasi web di Go yang dapat berinteraksi dengan layanan web dan API lainnya. Cara yang baik untuk membiasakan diri membuat permintaan HTTP di Go adalah dengan membuat aplikasi yang membuat permintaan ke REST API lain milik Anda.

Tags

Related Post