Pengenalan Response Code
Hal yang perlu kita ketahui juga dalam HTTP yaitu response code. Ini merupakan representasi dari kode response yang mana dari kode ini kita bisa melihat apakah sebuah request yang kita kirim dari client itu sukses dilakukan proses oleh server atau gagal diproses oleh server. Maka ada banyak sekali response code yang bisa kita gunakan saat membuat web. Kamu bisa langsung lihat lebih dalam beberapa HTTP Status Code disini https://developer.mozilla.org/en-US/docs/Web/HTTP/Status
Ada 5 kelompok HTTP Response Status Code yang dijelaskan pada link diatas yaitu:
- Informational response (100 - 199) : biasanya ini digunakan untuk menginformasikan response dari status. Jarang sekali biasanya ini digunakan.
- Successful responses (200 - 299) digunakan untuk response yang sukses
- Redirects (300 - 399) : digunakan untuk melakukan redirect ke URL tertentu
- Client errors (400 - 499) : digunakan untuk menginformasikan ada beberapa param atau request yang salah
- Server errors (500 - 599) : digunakan untuk menginformasikan bahwa ada proses server yang bermasalah
Secara default jika kita tidak melakukan set response code maka akan mengeluarkan code 200 yang artinya sukses. Jika kita ingin mengubahnya maka kita bisa gunakan function ResponseWriter.WriteHeader(int)
untuk memberikan informasi response code-nya. Semua data status code juga sudah disediakan oleh Golang, jadi jika ikita ingin menggunakannya kita tinggal memanggil variable yang sudah disediakan pada golang disini https://github.com/golang/go/blob/master/src/net/http/status.go.
Implementasi
Sekarang kita akan coba mengubah response code yang dikembalikan dari sistem kita seperti kode dibawah ini.
func ResponseCodeHandler(w http.ResponseWriter, r *http.Request) {
name := r.URL.Query().Get("name")
if name == "" {
w.WriteHeader(http.StatusBadRequest)
fmt.Fprint(w, "name is empty")
} else {
w.WriteHeader(http.StatusOK)
fmt.Fprintf(w, "Hello %s", name)
}
}
Selanjutnya kita akan uji fungsi yang sudah kita buat diatas dengan menambahkan unit test agar kita tahu proses logic yang kita buat itu sudah benar atau tidak.
func TestResponseCodeHandler(t *testing.T) {
type args struct {
name string
}
tests := []struct {
name string
args args
wantResp string
wantCode int
}{
{
name: "sent param name with value",
args: args{
name: "ihsan",
},
wantResp: "Hello ihsan",
wantCode: http.StatusOK,
},
{
name: "does't sent param name",
args: args{
name: "",
},
wantResp: "name is empty",
wantCode: http.StatusBadRequest,
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
request := httptest.NewRequest(http.MethodGet, fmt.Sprintf("http://localhost/say?name=%s", tt.args.name), nil)
recorder := httptest.NewRecorder()
ResponseCodeHandler(recorder, request)
response := recorder.Result()
body, _ := io.ReadAll(response.Body)
bodyString := string(body)
code := response.StatusCode
if !reflect.DeepEqual(bodyString, tt.wantResp) {
t.Errorf("response = %v, want %v", bodyString, tt.wantResp)
}
if !reflect.DeepEqual(code, tt.wantCode) {
t.Errorf("code = %v, want %v", code, tt.wantCode)
}
})
}
}
Membuat Web Golang 05 Request Form Post
Artikel Terhangat
Membuat Web Golang 14 HTML Template Cache
09 Sep 2023
Membuat Web Golang 13 HTML Template Function
09 Sep 2023
Membuat Web Golang 12 HTML Template Layout
09 Sep 2023
Membuat Web Golang 11 HTML Template Action
09 Sep 2023
Membuat Web Golang 10 HTML Template Data
09 Sep 2023
Membuat Web Golang 9 Mengenal HTML Template
09 Sep 2023
Membuat Web Golang 08 Memahami File Server
08 Aug 2023
Membuat Web Golang 07 Memahami Cookie
08 Aug 2023

Membuat Web Golang 14 HTML Template Cache

Membuat Web Golang 13 HTML Template Function

Membuat Web Golang 12 HTML Template Layout

Membuat Web Golang 11 HTML Template Action

Membuat Web Golang 10 HTML Template Data

Membuat Web Golang 9 Mengenal HTML Template

Membuat Web Golang 08 Memahami File Server
