Resource Includes, Filters, and Sorting

Relationship

All model relations can be conditionally loaded using the include query parameter.

include=topics

If a model has multiple relationships, each can be included with a , separator

include=user,questions,topic

Note

Only white-listed relations are enabled. relationships not white-listed will be ignored.

Filtering

field level filtering

?filter[level]=CXC or filter[level][value]=CXC

example

{
  "method": "get",
  "url": "https://api.edufocal.net/v1/subjects?filter[level]=CXC"

}

or

{
  "method": "get",
  "url": "https://api.edufocal.net/v1/subjects?filter[level][value]=CXC"
}

Labeled conditional fields with operators

For more complex queries you may need to filter multiple fields from the same resource. To support this behaviour we can use the format

filter[`insert_label_here`][condition][path]=level // field to filter
filter[`insert_label_here`][condition][value]=cxc // field value
filter[`insert_label_here`][condition][operator]=eq //operator

where _insert_label_here is any uniquely matching label

example

Lets say we want to find all subjects whos level field contains a term looking like cxc and where their ids are greater than 60. Of course we want to also include their topics relation as well as limiting our results to only 4 items.

include=topics
limit=4
filter[level-filter][condition][path]=level // field to filter
filter[level-filter][condition][value]=cxc // field value
filter[level-filter][condition][operator]=like //operator

filter[id-filter][condition][path]=id // field to filter
filter[id-filter][condition][value]=60 // field value
filter[id-filter][condition][operator]= > //operator

which would map out to

{
  "method": "get",
  "url": "https://api.edufocal.net/v1/subjects?limit=4&include=topics&filter[level-filter][condition][path]=level&filter[level-filter][condition][value]=cxc&filter[level-filter][condition][operator]=like&filter[id-filter][condition][path]=id&filter[id-filter][condition][value]=60&filter[id-filter][condition][operator]=gt"
}

Sample Output

{
    "subjects": [
        {
            "id": 63,
            "name": "Sit hic sint.",
            "abbrev": "corrupti",
            "permalink": "magnam",
            "level": "CXC",
            "rank": 1,
            "active": 1,
            "icon": "Et perspiciatis rem.",
            "level_id": "PEP6",
            "topics": []
        },
        {
            "id": 64,
            "name": "Corporis.",
            "abbrev": "exercitationem",
            "permalink": "temporibus",
            "level": "CXC",
            "rank": 1,
            "active": 1,
            "icon": "Eum sunt ipsam.",
            "level_id": "PEP6",
            "topics": []
        },
        {
            "id": 65,
            "name": "Quo.",
            "abbrev": "et",
            "permalink": "eius",
            "level": "CXC",
            "rank": 1,
            "active": 1,
            "icon": "Consequatur et non.",
            "level_id": "PEP5",
            "topics": []
        },
        {
            "id": 67,
            "name": "Assumenda.",
            "abbrev": "voluptatem",
            "permalink": "dolorem",
            "level": "CXC",
            "rank": 1,
            "active": 1,
            "icon": "Consequatur.",
            "level_id": "PEP4",
            "topics": []
        }
    ],
    "cursor": {
        "starting_at": "aWQ9NjgsbGltaXQ9NA=="
    }
}

supported operators

notes

Sorting

For Resources that allow filtering there also exists the capability to sort allowed field names.

Example

 ?sort[id]=desc
 ?sort[id]=asc