Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add partial response collection type #10

Open
wants to merge 7 commits into
base: gh-pages
Choose a base branch
from
Open
Changes from 5 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
30 changes: 30 additions & 0 deletions versions/1.0/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -354,6 +354,36 @@ A `Collection` **MAY** have the following:
}
```

## <a href="#document-components-collection" id="document-components-collection" class="headerlink"></a> Partial Collection (Optional)
Server **MAY** support an ability to return only specific fields requested by client.
A `PartialCollection` is a type of [node](#document-components-node) used to represent a specific resource fields based on query string parameter
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

As per our discussion, i think this should become its own section called Sparse Fields or something along those lines, instead of creating a PartialCollection. This will allow clients to filter resources by attributes while still maintaining what resource they are filtering.

ex.

{
    "@id": "/users?fields=/given_name",
    "@type": "Collection",
    "items": [
        {
            "@id": "/users/1",
            "@type": "User",
            "given_name": "Hubert"
        },
        {
            "@id": "/users/2",
            "@type": "User",
            "given_name": "John"
        }
        ...
    ],
    "total_items": 20
}



 

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The way jsonapi does this is similar: https://jsonapi.org/format/#fetching-includes, though a difference here is that includes is additional data that would be fetched if the param was present. Just another example to look at.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks like they've added sparse fieldsets to jsonapi now too: https://jsonapi.org/format/#fetching-sparse-fieldsets

* `fields`: query string parameter comma delimited list of fields. May include nested json fields using json pointers
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggest "json pointers" is a link to https://tools.ietf.org/html/rfc6901

Has the same attributes as Collection type except resource items are limited to only requested fields.
```json
{
"@id": "/users?fields=/given_name,/address/zip",
"@type": "PartialCollection",
"items": [
{
"given_name": "Hubert",
"address": {
"zip": "90094"
}
},
{
"given_name": "Philip",
"address":{
"zip": "90094"
}
},
...
],
"total_items": 20
}
```



## <a href="#document-entry-point" id="document-entry-point" class="headerlink"></a> Entry Point

An `EntryPoint` is a type of [node](#document-components-node) used to represent a resource that clients can use to get more information about an API and provide [links](#document-components-link-collection) to traverse.
Expand Down