Mengirim permintaan HTTP adalah kunci untuk aplikasi apa pun yang perlu berkomunikasi melalui internet. Cari tahu cara mengirim berbagai permintaan HTTP menggunakan 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 kemasan menyediakan sekumpulan fungsi dan struktur yang dapat Anda gunakan untuk membuat server web dan mengelola permintaan HTTP. Ini adalah paket yang sangat kuat 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. Permintaan baru() 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/users titik akhir reqres.in untuk membuat pengguna baru dengan nama dan pekerjaan.

kemasan utama

impor (
"byte"
"pengkodean/json"
"fmt"
"aku"
"net/http"
)

fungsibuat pengguna(nama, pekerjaan rangkaian) {
fmt. Cetak("Membuat pengguna...")

apiUrl := " https://reqres.in/api/users"
datapengguna := []byte(`{"nama":"` + nama + `","pekerjaan":"` + pekerjaan + `"}`)

// buat permintaan http baru
permintaan, kesalahan := http. Permintaan baru("POS", apiUrl, byte. Buffer Baru (Datapengguna))
meminta. Tajuk. Mengatur("Jenis konten", "aplikasi/json; rangkaian karakter=utf-8")

// kirim permintaan
klien := &http. Klien{}
tanggapan, kesalahan := klien. Lakukan (permintaan)

jika kesalahan!= nol {
fmt. Println (kesalahan)
}

responseBody, kesalahan := io. Baca Semua (respons. Tubuh)

jika kesalahan!= nol {
fmt. Println (kesalahan)
}

formattedData := formatJSON(responsBody)
fmt. Cetak("Status:", tanggapan. Status)
fmt. Cetak("Badan tanggapan:", data terformat)

// bersihkan memori setelah eksekusi
menunda tanggapan. Tubuh. Menutup()
}

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

// berfungsi untuk memformat data JSON
fungsiformatJSON(data[]byte)rangkaian {
var keluar byte. Penyangga
salah := json. Indent(&keluar, data, "", " ")

jika salah!= nol {
fmt. Cetak (err)
}

d := keluar. Byte()
kembalirangkaian(D)
}

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

fungsiutama() {
fmt. Cetak("Membuat permintaan POST...")
buat pengguna("Tim Omolana", "Penulis")
}

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

DAPATKAN Permintaan

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

// main.go
fungsigetUser(pengenal rangkaian) {
fmt. Cetak("Mendapatkan pengguna dengan ID...")

// buat permintaan GET ke API untuk mendapatkan pengguna berdasarkan ID
apiUrl := " https://reqres.in/api/users/" + id
permintaan, kesalahan := http. Permintaan baru("MENDAPATKAN", apiUrl, nol)

jika kesalahan!= nol {
fmt. Println (kesalahan)
}

meminta. Tajuk. Mengatur("Jenis konten", "aplikasi/json; rangkaian karakter=utf-8")

klien := &http. Klien{}
tanggapan, kesalahan := klien. Lakukan (permintaan)

jika kesalahan!= nol {
fmt. Println (kesalahan)
}

responseBody, kesalahan := io. Baca Semua (respons. Tubuh)

jika kesalahan!= nol {
fmt. Println (kesalahan)
}

formattedData := formatJSON(responsBody)
fmt. Cetak("Status:", tanggapan. Status)
fmt. Cetak("Badan tanggapan:", data terformat)

// bersihkan memori setelah eksekusi
menunda tanggapan. Tubuh. Menutup()
}

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:

fungsiutama() {
fmt. Cetak("Membuat permintaan GET...")
getUser("2")
}

Keluaran:

Permintaan PUT

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

Berikut implementasi permintaan PUT:

// main.go
fungsiupdateUser(nama, pekerjaan, id rangkaian) {
fmt. Cetak("Memperbarui pengguna...")

// buat permintaan PUT ke API untuk memperbarui pengguna
apiUrl := " https://reqres.in/api/users/" + id
datapengguna := []byte(`{"nama":"` + nama + `","pekerjaan":"` + pekerjaan + `"}`)

// buat permintaan http PUT baru
permintaan, kesalahan := http. Permintaan baru("MELETAKKAN", apiUrl, byte. Buffer Baru (Datapengguna))
meminta. Tajuk. Mengatur("Jenis konten", "aplikasi/json; rangkaian karakter=utf-8")

// Badan fungsi yang tersisa dari fungsi createUser...
// Buat permintaan, dapatkan respons, dan hapus memori...
}

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() {
// perbarui entri dengan ID 2.
perbaruiPengguna("Nama Baru Tim", "Staf Penulis", "2")
}

Kode di atas memperbarui pengguna dan menghasilkan keluaran berikut:

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:

fungsiHapus pengguna(pengenal rangkaian) {
fmt. Cetak("Menghapus pengguna...")
// buat permintaan DELETE ke API untuk menghapus pengguna
apiUrl := " https://reqres.in/api/users/" + id

// buat permintaan http baru
permintaan, kesalahan := http. Permintaan baru("MENGHAPUS", apiUrl, nol)
meminta. Tajuk. Mengatur("Jenis konten", "aplikasi/json; rangkaian karakter=utf-8")

klien := &http. Klien{}
tanggapan, kesalahan := klien. Lakukan (permintaan)
jika kesalahan!= nol {
fmt. Println (kesalahan)
}

fmt. Cetak("Status:", tanggapan. 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:

fungsiutama() {
fmt. Cetak("Membuat permintaan DELETE...")
Hapus pengguna("2")
}

Keluaran:

Hemat waktu dengan menggunakan http. Pos() Dan http. Mendapatkan() 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 mendapatkan lebih akrab dengan membuat permintaan HTTP di Go adalah dengan membangun aplikasi yang membuat permintaan ke API REST lainnya milikmu.