beam-community / jsonapi

JSON:API Serializer and Query Handler for Elixir
https://hex.pm/packages/jsonapi
MIT License
495 stars 78 forks source link

[Feature] Allow For Exclusion of Optional Resource Members #312

Open kyleboe opened 7 months ago

kyleboe commented 7 months ago

Borrowing from the JSON:API Document Resource Objects:

A resource object MAY contain any of these top-level members:

  • attributes: an attributes object representing some of the resource’s data.
  • relationships: a relationships object describing relationships between the resource and other JSON:API resources.
  • links: a links object containing links related to the resource.
  • meta: a meta object containing non-standard meta-information about a resource that can not be represented as an attribute or relationship.

Ideally, there would be per-View configuration options allowing for exclusion from the returned JSON object. Patterns similar to the remove_links? functionality could be used to conditionally exclude these resource members.

mattpolzin commented 7 months ago

I imagine the idea is to omit a certain property when it is empty (i.e. unused), or is the goal to sometimes remove populated properties in the response payload?

kyleboe commented 7 months ago

The goal is to remove populated properties to reduce payload size. For example, removing links from nested objects in an index query but maintaining links at the top level for pagination and such.

mattpolzin commented 7 months ago

So is the goal is to omit based on which View is used or based on something found in the data or Plugn.Conn?

I wonder if this could also be achieved by adding support for nil returns from the existing links, meta, etc. Behavior callbacks for View.

kyleboe commented 7 months ago

Yep exactly.

Yeah that seems like a very viable solution. I'll play around with it locally and see what needs to be adjusted as a result.

github-actions[bot] commented 3 months ago

This issue has been automatically marked as "stale:discard". We are sorry that we haven't been able to prioritize it yet. If this issue still relevant, please leave any comment if you have any new additional information that helps to solve this issue. We encourage you to create a pull request, if you can. We are happy to help you with that.