Skip to content

Commit 2256d94

Browse files
committed
Http request handling
1 parent 87b946b commit 2256d94

File tree

5 files changed

+117
-0
lines changed

5 files changed

+117
-0
lines changed
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
module http-request-examples
2+
3+
go 1.18
Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
package handlers
2+
3+
import (
4+
"encoding/json"
5+
"fmt"
6+
"http-request-examples/models"
7+
"net/http"
8+
)
9+
10+
type UsersHandler struct {
11+
}
12+
13+
14+
func (u *UsersHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
15+
switch {
16+
17+
case r.Method == http.MethodGet && len(r.URL.Query().Get("id")) > 0:
18+
GetUser(w, r)
19+
return
20+
case r.Method == http.MethodGet && len(r.URL.Query().Get("id")) == 0:
21+
GetUsers(w, r)
22+
return
23+
case r.Method == http.MethodPost:
24+
CreateUser(w, r)
25+
return
26+
}
27+
}
28+
29+
func CreateUser(w http.ResponseWriter, r *http.Request) {
30+
apiKey := r.Header.Get("X-Api-Key")
31+
32+
for k, v := range r.Header {
33+
fmt.Println(k, v)
34+
}
35+
36+
if apiKey != "9289652658659856" {
37+
w.WriteHeader(401)
38+
fmt.Fprintf(w, "Invalid API Key")
39+
return
40+
}
41+
42+
var user *models.User
43+
44+
err := json.NewDecoder(r.Body).Decode(&user)
45+
if err != nil {
46+
w.WriteHeader(500)
47+
fmt.Fprintf(w, "Decode Error: %v", err)
48+
return
49+
}
50+
51+
w.WriteHeader(200)
52+
fmt.Fprintf(w, "User created")
53+
54+
}
55+
56+
func GetUser(w http.ResponseWriter, r *http.Request) {
57+
id := r.URL.Query().Get("id")
58+
// get form db
59+
fmt.Fprintf(w, "get user by id: %s", id)
60+
}
61+
62+
func GetUsers(w http.ResponseWriter, r *http.Request) {
63+
// get list form db
64+
fmt.Fprintf(w, "get users")
65+
}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
package main
2+
3+
import "http-request-examples/management"
4+
5+
// URL path
6+
// Get Query Parameters
7+
// Read Headers
8+
// Read Request Body
9+
// Decode body to struct
10+
11+
// Local storage
12+
// Standard Response
13+
// Write to header
14+
// Write Body
15+
16+
func main() {
17+
management.Run()
18+
}
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
package management
2+
3+
import (
4+
handlers "http-request-examples/handler"
5+
"net/http"
6+
"time"
7+
)
8+
9+
func Run() {
10+
mux := http.NewServeMux()
11+
mux.Handle("/users/", &handlers.UsersHandler{})
12+
server := &http.Server{
13+
Addr: ":8080",
14+
ReadTimeout: time.Second * 10,
15+
WriteTimeout: time.Second * 10,
16+
Handler: mux,
17+
}
18+
19+
err := server.ListenAndServe()
20+
21+
if err != nil {
22+
panic(err)
23+
}
24+
}
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
package models
2+
3+
type User struct {
4+
Id int `json:"id"`
5+
FullName string `json:"fullName"`
6+
Age int `json:"age"`
7+
}

0 commit comments

Comments
 (0)