2015-07-13 14:59:11 -04:00
|
|
|
/*
|
2015-07-13 17:41:18 -04:00
|
|
|
Visit the readme at https://github.com/shwoodard/jsonapi
|
2015-07-13 14:59:11 -04:00
|
|
|
|
|
|
|
You can keep your model structs as is and use struct field tags to indicate to jsonapi
|
|
|
|
how you want your response built or your request deserialzied. What about my relationships?
|
|
|
|
jsonapi supports relationships out of the box and will even side load them in your response
|
|
|
|
into an "included" array--that contains associated objects.
|
|
|
|
|
|
|
|
jsonapi uses StructField tags to annotate the structs fields that you already have and use
|
|
|
|
in your app and then reads and writes jsonapi.org output based on the instructions you give
|
|
|
|
the library in your jsonapi tags.
|
|
|
|
|
|
|
|
Example structs using a Blog > Post > Comment structure,
|
|
|
|
|
2015-07-13 18:04:21 -04:00
|
|
|
type Blog struct {
|
|
|
|
Id int `jsonapi:"primary,blogs"`
|
|
|
|
Title string `jsonapi:"attr,title"`
|
|
|
|
Posts []*Post `jsonapi:"relation,posts"`
|
|
|
|
CurrentPost *Post `jsonapi:"relation,current_post"`
|
|
|
|
CurrentPostId int `jsonapi:"attr,current_post_id"`
|
|
|
|
CreatedAt time.Time `jsonapi:"attr,created_at"`
|
|
|
|
ViewCount int `jsonapi:"attr,view_count"`
|
|
|
|
}
|
|
|
|
|
|
|
|
type Post struct {
|
|
|
|
Id int `jsonapi:"primary,posts"`
|
|
|
|
BlogId int `jsonapi:"attr,blog_id"`
|
|
|
|
Title string `jsonapi:"attr,title"`
|
|
|
|
Body string `jsonapi:"attr,body"`
|
|
|
|
Comments []*Comment `jsonapi:"relation,comments"`
|
|
|
|
}
|
|
|
|
|
|
|
|
type Comment struct {
|
|
|
|
Id int `jsonapi:"primary,comments"`
|
|
|
|
PostId int `jsonapi:"attr,post_id"`
|
|
|
|
Body string `jsonapi:"attr,body"`
|
|
|
|
}
|
2015-07-13 14:59:11 -04:00
|
|
|
|
|
|
|
jsonapi Tag Reference
|
|
|
|
|
|
|
|
Value, primary: "primary,<type field output>"
|
|
|
|
|
|
|
|
This indicates that this is the primary key field for this struct type. Tag
|
|
|
|
value arguments are comma separated. The first argument must be, "primary", and
|
|
|
|
the second must be the name that should appear in the "type" field for all data
|
|
|
|
objects that represent this type of model.
|
|
|
|
|
|
|
|
Value, attr: "attr,<key name in attributes hash>"
|
|
|
|
|
|
|
|
These fields' values should end up in the "attribute" hash for a record. The first
|
|
|
|
argument must be, "attr', and the second should be the name for the key to display in
|
|
|
|
the the "attributes" hash for that record.
|
|
|
|
|
|
|
|
Value, relation: "relation,<key name in relationships hash>"
|
|
|
|
|
|
|
|
Relations are struct fields that represent a one-to-one or one-to-many to other structs.
|
|
|
|
jsonapi will traverse the graph of relationships and marshal or unmarshal records. The first
|
|
|
|
argument must be, "relation", and the second should be the name of the relationship, used as
|
|
|
|
the key in the "relationships" hash for the record.
|
|
|
|
|
|
|
|
Use the methods below to Marshal and Unmarshal jsonapi.org json payloads.
|
|
|
|
|
|
|
|
*/
|
|
|
|
package jsonapi
|