=== prefetch on an item using two belongs_to relationships
Request:
GET /cd/1?prefetch=artist,genre
Accept: application/hal+json
Response:
200 OK
Content-type: application/hal+json
{
"_embedded" : {
"artist" : {
"artistid" : 1,
"charfield" : null,
"name" : "Caterwauler McCrae",
"rank" : 13
},
"genre" : {
"genreid" : 1,
"name" : "emo"
}
},
"_links" : {
"artist" : {
"href" : "/artist/1"
},
"cd_to_producer" : {
"href" : "/cd_to_producer?me.cd=1"
},
"genre" : {
"href" : "/genre/1"
},
"self" : {
"href" : "/cd/1"
},
"tracks" : {
"href" : "/track?me.cd=1"
}
},
"artist" : 1,
"cdid" : 1,
"genreid" : 1,
"single_track" : null,
"title" : "Spoonful of bees",
"year" : "1999"
}
=== prefetch on a set using two belongs_to relationships
Request:
GET /cd?rows=2&page=1&prefetch=artist,genre
Accept: application/hal+json
Response:
200 OK
Content-type: application/hal+json
{
"_embedded" : {
"cd" : [
{
"_embedded" : {
"artist" : {
"artistid" : 1,
"charfield" : null,
"name" : "Caterwauler McCrae",
"rank" : 13
},
"genre" : {
"genreid" : 1,
"name" : "emo"
}
},
"_links" : {
"artist" : {
"href" : "/artist/1"
},
"cd_to_producer" : {
"href" : "/cd_to_producer?me.cd=1"
},
"genre" : {
"href" : "/genre/1"
},
"self" : {
"href" : "/cd/1"
},
"tracks" : {
"href" : "/track?me.cd=1"
}
},
"artist" : 1,
"cdid" : 1,
"genreid" : 1,
"single_track" : null,
"title" : "Spoonful of bees",
"year" : "1999"
},
{
"_embedded" : {
"artist" : {
"artistid" : 1,
"charfield" : null,
"name" : "Caterwauler McCrae",
"rank" : 13
},
"genre" : {
"genreid" : 2,
"name" : "country"
}
},
"_links" : {
"artist" : {
"href" : "/artist/1"
},
"cd_to_producer" : {
"href" : "/cd_to_producer?me.cd=2"
},
"genre" : {
"href" : "/genre/2"
},
"self" : {
"href" : "/cd/2"
},
"tracks" : {
"href" : "/track?me.cd=2"
}
},
"artist" : 1,
"cdid" : 2,
"genreid" : 2,
"single_track" : null,
"title" : "Forkful of bees",
"year" : "2001"
}
]
},
"_links" : {
"next" : {
"href" : "/cd?rows=2&page=2"
},
"self" : {
"href" : "/cd?rows=2&page=1",
"title" : "TestSchema::Result::CD"
}
}
}
=== filter on prefetched relation field
Request:
GET /cd?prefetch=artist&artist.name=Random+Boy+Band
Accept: application/hal+json
Response:
200 OK
Content-type: application/hal+json
{
"_embedded" : {
"cd" : [
{
"_embedded" : {
"artist" : {
"artistid" : 2,
"charfield" : null,
"name" : "Random Boy Band",
"rank" : 13
}
},
"_links" : {
"artist" : {
"href" : "/artist/2"
},
"cd_to_producer" : {
"href" : "/cd_to_producer?me.cd=4"
},
"genre" : {
"href" : "/genre/3"
},
"self" : {
"href" : "/cd/4"
},
"tracks" : {
"href" : "/track?me.cd=4"
}
},
"artist" : 2,
"cdid" : 4,
"genreid" : 3,
"single_track" : null,
"title" : "Generic Manufactured Singles",
"year" : "2001"
}
]
},
"_links" : {
"self" : {
"href" : "/cd?rows=30&page=1",
"title" : "TestSchema::Result::CD"
}
}
}
=== filter on prefetch with JSON
Request:
GET /cd?prefetch=artist PARAMS: artist.name~json=>{"like"=>"%Band"}
GET /cd?prefetch=artist&artist.name~json=%7B%22like%22%3A%22%25Band%22%7D
Accept: application/hal+json
Response:
200 OK
Content-type: application/hal+json
{
"_embedded" : {
"cd" : [
{
"_embedded" : {
"artist" : {
"artistid" : 2,
"charfield" : null,
"name" : "Random Boy Band",
"rank" : 13
}
},
"_links" : {
"artist" : {
"href" : "/artist/2"
},
"cd_to_producer" : {
"href" : "/cd_to_producer?me.cd=4"
},
"genre" : {
"href" : "/genre/3"
},
"self" : {
"href" : "/cd/4"
},
"tracks" : {
"href" : "/track?me.cd=4"
}
},
"artist" : 2,
"cdid" : 4,
"genreid" : 3,
"single_track" : null,
"title" : "Generic Manufactured Singles",
"year" : "2001"
}
]
},
"_links" : {
"self" : {
"href" : "/cd?rows=30&page=1",
"title" : "TestSchema::Result::CD"
}
}
}
=== multi type relation (has_many) in prefetch on item
Request:
GET /artist/1?prefetch=cds&order=cds.cdid
Accept: application/hal+json
Response:
200 OK
Content-type: application/hal+json
{
"_embedded" : {
"cds" : [
{
"_links" : {
"artist" : {
"href" : "/artist/1"
},
"cd_to_producer" : {
"href" : "/cd_to_producer?me.cd=1"
},
"genre" : {
"href" : "/genre/1"
},
"self" : {
"href" : "/cd/1"
},
"tracks" : {
"href" : "/track?me.cd=1"
}
},
"artist" : 1,
"cdid" : 1,
"genreid" : 1,
"single_track" : null,
"title" : "Spoonful of bees",
"year" : "1999"
},
{
"_links" : {
"artist" : {
"href" : "/artist/1"
},
"cd_to_producer" : {
"href" : "/cd_to_producer?me.cd=2"
},
"genre" : {
"href" : "/genre/2"
},
"self" : {
"href" : "/cd/2"
},
"tracks" : {
"href" : "/track?me.cd=2"
}
},
"artist" : 1,
"cdid" : 2,
"genreid" : 2,
"single_track" : null,
"title" : "Forkful of bees",
"year" : "2001"
},
{
"_links" : {
"artist" : {
"href" : "/artist/1"
},
"cd_to_producer" : {
"href" : "/cd_to_producer?me.cd=3"
},
"genre" : {
"href" : "/genre/2"
},
"self" : {
"href" : "/cd/3"
},
"tracks" : {
"href" : "/track?me.cd=3"
}
},
"artist" : 1,
"cdid" : 3,
"genreid" : 2,
"single_track" : null,
"title" : "Caterwaulin' Blues",
"year" : "1997"
}
]
},
"_links" : {
"cds" : {
"href" : "/cd?me.artist=1"
},
"cds_cref_cond" : {
"href" : "/cd/1"
},
"self" : {
"href" : "/artist/1"
}
},
"artistid" : 1,
"charfield" : null,
"name" : "Caterwauler McCrae",
"rank" : 13
}
=== multi type relation (has_many) in prefetch on set
Request:
GET /artist?prefetch=cds&order=me.artistid,cds.cdid&rows=2
Accept: application/hal+json
Response:
200 OK
Content-type: application/hal+json
{
"_embedded" : {
"artist" : [
{
"_embedded" : {
"cds" : [
{
"_links" : {
"artist" : {
"href" : "/artist/1"
},
"cd_to_producer" : {
"href" : "/cd_to_producer?me.cd=1"
},
"genre" : {
"href" : "/genre/1"
},
"self" : {
"href" : "/cd/1"
},
"tracks" : {
"href" : "/track?me.cd=1"
}
},
"artist" : 1,
"cdid" : 1,
"genreid" : 1,
"single_track" : null,
"title" : "Spoonful of bees",
"year" : "1999"
},
{
"_links" : {
"artist" : {
"href" : "/artist/1"
},
"cd_to_producer" : {
"href" : "/cd_to_producer?me.cd=2"
},
"genre" : {
"href" : "/genre/2"
},
"self" : {
"href" : "/cd/2"
},
"tracks" : {
"href" : "/track?me.cd=2"
}
},
"artist" : 1,
"cdid" : 2,
"genreid" : 2,
"single_track" : null,
"title" : "Forkful of bees",
"year" : "2001"
},
{
"_links" : {
"artist" : {
"href" : "/artist/1"
},
"cd_to_producer" : {
"href" : "/cd_to_producer?me.cd=3"
},
"genre" : {
"href" : "/genre/2"
},
"self" : {
"href" : "/cd/3"
},
"tracks" : {
"href" : "/track?me.cd=3"
}
},
"artist" : 1,
"cdid" : 3,
"genreid" : 2,
"single_track" : null,
"title" : "Caterwaulin' Blues",
"year" : "1997"
}
]
},
"_links" : {
"cds" : {
"href" : "/cd?me.artist=1"
},
"cds_cref_cond" : {
"href" : "/cd/1"
},
"self" : {
"href" : "/artist/1"
}
},
"artistid" : 1,
"charfield" : null,
"name" : "Caterwauler McCrae",
"rank" : 13
},
{
"_embedded" : {
"cds" : [
{
"_links" : {
"artist" : {
"href" : "/artist/2"
},
"cd_to_producer" : {
"href" : "/cd_to_producer?me.cd=4"
},
"genre" : {
"href" : "/genre/3"
},
"self" : {
"href" : "/cd/4"
},
"tracks" : {
"href" : "/track?me.cd=4"
}
},
"artist" : 2,
"cdid" : 4,
"genreid" : 3,
"single_track" : null,
"title" : "Generic Manufactured Singles",
"year" : "2001"
}
]
},
"_links" : {
"cds" : {
"href" : "/cd?me.artist=2"
},
"cds_cref_cond" : {
"href" : "/cd/2"
},
"self" : {
"href" : "/artist/2"
}
},
"artistid" : 2,
"charfield" : null,
"name" : "Random Boy Band",
"rank" : 13
}
]
},
"_links" : {
"next" : {
"href" : "/artist?rows=2&page=2"
},
"self" : {
"href" : "/artist?rows=2&page=1",
"title" : "TestSchema::Result::Artist"
}
}
}
=== multi type relation in prefetch on item (many_to_many via JSON) ArrayRef Syntax
Request:
GET /cd/1?sort=cd_to_producer.producer PARAMS: prefetch~json=>[{"cd_to_producer"=>"producer"}]
GET /cd/1?sort=cd_to_producer.producer&prefetch~json=%5B%7B%22cd_to_producer%22%3A%22producer%22%7D%5D
Accept: application/hal+json
Response:
200 OK
Content-type: application/hal+json
{
"_embedded" : {
"cd_to_producer" : [
{
"_embedded" : {
"producer" : {
"name" : "Matt S Trout",
"producerid" : 1
}
},
"_links" : {
"cd" : {
"href" : "/cd/1"
},
"producer" : {
"href" : "/producer/1"
},
"self" : {
"href" : "/cd_to_producer/1/1"
}
},
"attribute" : null,
"cd" : 1,
"producer" : 1
},
{
"_embedded" : {
"producer" : {
"name" : "Bob The Builder",
"producerid" : 2
}
},
"_links" : {
"cd" : {
"href" : "/cd/1"
},
"producer" : {
"href" : "/producer/2"
},
"self" : {
"href" : "/cd_to_producer/1/2"
}
},
"attribute" : null,
"cd" : 1,
"producer" : 2
},
{
"_embedded" : {
"producer" : {
"name" : "Fred The Phenotype",
"producerid" : 3
}
},
"_links" : {
"cd" : {
"href" : "/cd/1"
},
"producer" : {
"href" : "/producer/3"
},
"self" : {
"href" : "/cd_to_producer/1/3"
}
},
"attribute" : null,
"cd" : 1,
"producer" : 3
}
]
},
"_links" : {
"artist" : {
"href" : "/artist/1"
},
"cd_to_producer" : {
"href" : "/cd_to_producer?me.cd=1"
},
"genre" : {
"href" : "/genre/1"
},
"self" : {
"href" : "/cd/1"
},
"tracks" : {
"href" : "/track?me.cd=1"
}
},
"artist" : 1,
"cdid" : 1,
"genreid" : 1,
"single_track" : null,
"title" : "Spoonful of bees",
"year" : "1999"
}
=== multi type relation in prefetch on item (many_to_many via JSON) HashRef Syntax
Request:
GET /cd/1?sort=cd_to_producer.producer PARAMS: prefetch~json=>{"cd_to_producer"=>"producer"}
GET /cd/1?sort=cd_to_producer.producer&prefetch~json=%7B%22cd_to_producer%22%3A%22producer%22%7D
Accept: application/hal+json
Response:
200 OK
Content-type: application/hal+json
{
"_embedded" : {
"cd_to_producer" : [
{
"_embedded" : {
"producer" : {
"name" : "Matt S Trout",
"producerid" : 1
}
},
"_links" : {
"cd" : {
"href" : "/cd/1"
},
"producer" : {
"href" : "/producer/1"
},
"self" : {
"href" : "/cd_to_producer/1/1"
}
},
"attribute" : null,
"cd" : 1,
"producer" : 1
},
{
"_embedded" : {
"producer" : {
"name" : "Bob The Builder",
"producerid" : 2
}
},
"_links" : {
"cd" : {
"href" : "/cd/1"
},
"producer" : {
"href" : "/producer/2"
},
"self" : {
"href" : "/cd_to_producer/1/2"
}
},
"attribute" : null,
"cd" : 1,
"producer" : 2
},
{
"_embedded" : {
"producer" : {
"name" : "Fred The Phenotype",
"producerid" : 3
}
},
"_links" : {
"cd" : {
"href" : "/cd/1"
},
"producer" : {
"href" : "/producer/3"
},
"self" : {
"href" : "/cd_to_producer/1/3"
}
},
"attribute" : null,
"cd" : 1,
"producer" : 3
}
]
},
"_links" : {
"artist" : {
"href" : "/artist/1"
},
"cd_to_producer" : {
"href" : "/cd_to_producer?me.cd=1"
},
"genre" : {
"href" : "/genre/1"
},
"self" : {
"href" : "/cd/1"
},
"tracks" : {
"href" : "/track?me.cd=1"
}
},
"artist" : 1,
"cdid" : 1,
"genreid" : 1,
"single_track" : null,
"title" : "Spoonful of bees",
"year" : "1999"
}
=== filter on nested prefetch
Request:
GET /artist?rows=2&producer.name=Matt+S+Trout PARAMS: prefetch~json=>{"cds"=>{"cd_to_producer"=>"producer"}} cds.year~json=>{">","0996"}
GET /artist?rows=2&producer.name=Matt+S+Trout&prefetch~json=%7B%22cds%22%3A%7B%22cd_to_producer%22%3A%22producer%22%7D%7D&cds.year~json=%7B%22%3E%22%3A%220996%22%7D
Accept: application/hal+json
Response:
200 OK
Content-type: application/hal+json
{
"_embedded" : {
"artist" : [
{
"_embedded" : {
"cds" : [
{
"_embedded" : {
"cd_to_producer" : [
{
"_embedded" : {
"producer" : {
"name" : "Matt S Trout",
"producerid" : 1
}
},
"_links" : {
"cd" : {
"href" : "/cd/1"
},
"producer" : {
"href" : "/producer/1"
},
"self" : {
"href" : "/cd_to_producer/1/1"
}
},
"attribute" : null,
"cd" : 1,
"producer" : 1
}
]
},
"_links" : {
"artist" : {
"href" : "/artist/1"
},
"cd_to_producer" : {
"href" : "/cd_to_producer?me.cd=1"
},
"genre" : {
"href" : "/genre/1"
},
"self" : {
"href" : "/cd/1"
},
"tracks" : {
"href" : "/track?me.cd=1"
}
},
"artist" : 1,
"cdid" : 1,
"genreid" : 1,
"single_track" : null,
"title" : "Spoonful of bees",
"year" : "1999"
}
]
},
"_links" : {
"cds" : {
"href" : "/cd?me.artist=1"
},
"cds_cref_cond" : {
"href" : "/cd/1"
},
"self" : {
"href" : "/artist/1"
}
},
"artistid" : 1,
"charfield" : null,
"name" : "Caterwauler McCrae",
"rank" : 13
}
]
},
"_links" : {
"self" : {
"href" : "/artist?rows=2&page=1",
"title" : "TestSchema::Result::Artist"
}
}
}
=== prefetch with query on ambiguous field
Request:
GET /cd/?me.artist=1&prefetch=artist
Accept: application/hal+json
Response:
200 OK
Content-type: application/hal+json
{
"_embedded" : {
"cd" : [
{
"_embedded" : {
"artist" : {
"artistid" : 1,
"charfield" : null,
"name" : "Caterwauler McCrae",
"rank" : 13
}
},
"_links" : {
"artist" : {
"href" : "/artist/1"
},
"cd_to_producer" : {
"href" : "/cd_to_producer?me.cd=1"
},
"genre" : {
"href" : "/genre/1"
},
"self" : {
"href" : "/cd/1"
},
"tracks" : {
"href" : "/track?me.cd=1"
}
},
"artist" : 1,
"cdid" : 1,
"genreid" : 1,
"single_track" : null,
"title" : "Spoonful of bees",
"year" : "1999"
},
{
"_embedded" : {
"artist" : {
"artistid" : 1,
"charfield" : null,
"name" : "Caterwauler McCrae",
"rank" : 13
}
},
"_links" : {
"artist" : {
"href" : "/artist/1"
},
"cd_to_producer" : {
"href" : "/cd_to_producer?me.cd=2"
},
"genre" : {
"href" : "/genre/2"
},
"self" : {
"href" : "/cd/2"
},
"tracks" : {
"href" : "/track?me.cd=2"
}
},
"artist" : 1,
"cdid" : 2,
"genreid" : 2,
"single_track" : null,
"title" : "Forkful of bees",
"year" : "2001"
},
{
"_embedded" : {
"artist" : {
"artistid" : 1,
"charfield" : null,
"name" : "Caterwauler McCrae",
"rank" : 13
}
},
"_links" : {
"artist" : {
"href" : "/artist/1"
},
"cd_to_producer" : {
"href" : "/cd_to_producer?me.cd=3"
},
"genre" : {
"href" : "/genre/2"
},
"self" : {
"href" : "/cd/3"
},
"tracks" : {
"href" : "/track?me.cd=3"
}
},
"artist" : 1,
"cdid" : 3,
"genreid" : 2,
"single_track" : null,
"title" : "Caterwaulin' Blues",
"year" : "1997"
}
]
},
"_links" : {
"self" : {
"href" : "/cd?rows=30&me.artist=1&page=1",
"title" : "TestSchema::Result::CD"
}
}
}
=== prefetch on invalid name
Request:
GET /cd/1?prefetch=nonesuch
Accept: application/hal+json
Response:
400 Bad Request
Content-type: application/json
{
"errors" : [
{
"_meta" : {
"relationship" : null,
"relationships" : [
"artist",
"cd_to_producer",
"existing_single_track",
"genre",
"single_track",
"tracks"
]
},
"nonesuch" : "no relationship with that name\n"
}
]
}
=== prefetch on set with partial response of prefetched items
Request:
GET /cd?rows=2&page=1&prefetch=artist,genre&fields=cdid,artist,genreid,genre.genreid,artist.artistid
Accept: application/hal+json
Response:
200 OK
Content-type: application/hal+json
{
"_embedded" : {
"cd" : [
{
"_embedded" : {
"artist" : {
"artistid" : 1
},
"genre" : {
"genreid" : 1
}
},
"_links" : {
"artist" : {
"href" : "/artist/1"
},
"cd_to_producer" : {
"href" : "/cd_to_producer?me.cd=1"
},
"genre" : {
"href" : "/genre/1"
},
"self" : {
"href" : "/cd/1"
},
"tracks" : {
"href" : "/track?me.cd=1"
}
},
"artist" : 1,
"cdid" : 1,
"genreid" : 1
},
{
"_embedded" : {
"artist" : {
"artistid" : 1
},
"genre" : {
"genreid" : 2
}
},
"_links" : {
"artist" : {
"href" : "/artist/1"
},
"cd_to_producer" : {
"href" : "/cd_to_producer?me.cd=2"
},
"genre" : {
"href" : "/genre/2"
},
"self" : {
"href" : "/cd/2"
},
"tracks" : {
"href" : "/track?me.cd=2"
}
},
"artist" : 1,
"cdid" : 2,
"genreid" : 2
}
]
},
"_links" : {
"next" : {
"href" : "/cd?rows=2&page=2"
},
"self" : {
"href" : "/cd?rows=2&page=1",
"title" : "TestSchema::Result::CD"
}
}
}
=== prefetch on item with partial response of prefetched item
Request:
GET /cd/1?prefetch=artist,genre&fields=cdid,artist,genreid,artist.artistid,genre.genreid
Accept: application/hal+json
Response:
200 OK
Content-type: application/hal+json
{
"_embedded" : {
"artist" : {
"artistid" : 1
},
"genre" : {
"genreid" : 1
}
},
"_links" : {
"artist" : {
"href" : "/artist/1"
},
"cd_to_producer" : {
"href" : "/cd_to_producer?me.cd=1"
},
"genre" : {
"href" : "/genre/1"
},
"self" : {
"href" : "/cd/1"
},
"tracks" : {
"href" : "/track?me.cd=1"
}
},
"artist" : 1,
"cdid" : 1,
"genreid" : 1
}
=== prefetch on item with id primary key #28
Request:
GET /country/1?prefetch=cities
Accept: application/hal+json
Response:
200 OK
Content-type: application/hal+json
{
"_embedded" : {
"cities" : [
{
"_links" : {
"country" : {
"href" : "/country/1"
},
"self" : {
"href" : "/city/1"
}
},
"country_id" : 1,
"id" : 1,
"name" : "London"
}
]
},
"_links" : {
"cities" : {
"href" : "/city?me.country_id=1"
},
"self" : {
"href" : "/country/1"
}
},
"id" : 1,
"name" : "England"
}