-
Notifications
You must be signed in to change notification settings - Fork 94
/
crud_example.go
72 lines (55 loc) · 2.91 KB
/
crud_example.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
/*
Package examples shows how to implement a basic CRUD for two data structures with the api2go server functionality.
To play with this example server you can run some of the following curl requests
In order to demonstrate dynamic baseurl handling for requests, apply the --header="REQUEST_URI:https://www.your.domain.example.com" parameter to any of the commands.
Create a new user:
curl -X POST http://localhost:31415/v0/users -d '{"data" : {"type" : "users" , "attributes": {"user-name" : "marvin"}}}'
List users:
curl -X GET http://localhost:31415/v0/users
List paginated users:
curl -X GET 'http://localhost:31415/v0/users?page\[offset\]=0&page\[limit\]=2'
OR
curl -X GET 'http://localhost:31415/v0/users?page\[number\]=1&page\[size\]=2'
Update:
curl -vX PATCH http://localhost:31415/v0/users/1 -d '{ "data" : {"type" : "users", "id": "1", "attributes": {"user-name" : "better marvin"}}}'
Delete:
curl -vX DELETE http://localhost:31415/v0/users/2
Create a chocolate with the name sweet
curl -X POST http://localhost:31415/v0/chocolates -d '{"data" : {"type" : "chocolates" , "attributes": {"name" : "Ritter Sport", "taste": "Very Good"}}}'
Create a user with a sweet
curl -X POST http://localhost:31415/v0/users -d '{"data" : {"type" : "users" , "attributes": {"user-name" : "marvin"}, "relationships": {"sweets": {"data": [{"type": "chocolates", "id": "1"}]}}}}'
List a users sweets
curl -X GET http://localhost:31415/v0/users/1/sweets
Replace a users sweets
curl -X PATCH http://localhost:31415/v0/users/1/relationships/sweets -d '{"data" : [{"type": "chocolates", "id": "2"}]}'
Add a sweet
curl -X POST http://localhost:31415/v0/users/1/relationships/sweets -d '{"data" : [{"type": "chocolates", "id": "2"}]}'
Remove a sweet
curl -X DELETE http://localhost:31415/v0/users/1/relationships/sweets -d '{"data" : [{"type": "chocolates", "id": "2"}]}'
*/
package main
import (
"fmt"
"net/http"
"github.com/julienschmidt/httprouter"
"github.com/manyminds/api2go"
"github.com/manyminds/api2go/examples/model"
"github.com/manyminds/api2go/examples/resolver"
"github.com/manyminds/api2go/examples/resource"
"github.com/manyminds/api2go/examples/storage"
)
func main() {
port := 31415
api := api2go.NewAPIWithResolver("v0", &resolver.RequestURL{Port: port})
userStorage := storage.NewUserStorage()
chocStorage := storage.NewChocolateStorage()
api.AddResource(model.User{}, resource.UserResource{ChocStorage: chocStorage, UserStorage: userStorage})
api.AddResource(model.Chocolate{}, resource.ChocolateResource{ChocStorage: chocStorage, UserStorage: userStorage})
fmt.Printf("Listening on :%d", port)
handler := api.Handler().(*httprouter.Router)
// It is also possible to get the instance of julienschmidt/httprouter and add more custom routes!
handler.GET("/hello-world", func(w http.ResponseWriter, r *http.Request, _ httprouter.Params) {
fmt.Fprint(w, "Hello World!\n")
})
http.ListenAndServe(fmt.Sprintf(":%d", port), handler)
}