File tree Expand file tree Collapse file tree 5 files changed +117
-0
lines changed
17-Http/04-RequestManagement Expand file tree Collapse file tree 5 files changed +117
-0
lines changed Original file line number Diff line number Diff line change
1
+ module http-request-examples
2
+
3
+ go 1.18
Original file line number Diff line number Diff line change
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
+ }
Original file line number Diff line number Diff line change
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
+ }
Original file line number Diff line number Diff line change
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
+ }
Original file line number Diff line number Diff line change
1
+ package models
2
+
3
+ type User struct {
4
+ Id int `json:"id"`
5
+ FullName string `json:"fullName"`
6
+ Age int `json:"age"`
7
+ }
You can’t perform that action at this time.
0 commit comments