Module
Identy.Normalizer
- Package
- purescript-identy
- Repository
- oreshinya/purescript-identy
#normalize Source
normalize :: forall a. ReadForeign a => Foreign -> E a
Normalize nested entity to identy-style, then decode normalized foreign.
When should you use this ?
API in the world often respond nested-style object like this:
{
"id": "1",
"name": "User Name",
"comments": [
{ "id": "2", "body": "Comment Body 2" },
{ "id": "1", "body": "Comment Body 1" }
]
}
normalize
formats object from nested-style to identy-style.
{
"entities": {
"user": { "1": { "id": "1", "name": "User Name" } },
"comment": { "1": { "id": "1", "body": "Comment Body 1" }, "2": { "id": "2", "body": "Comment Body 2" } }
},
"associations": {
"userComments": { "1": [ "2", "1" ] } // from parent user id to comment ids.
},
"result": "1" // This is root entity id. In this case, user id.
}
result
has root entity id. Therefore, if a response is single entity, result
is an id of its entity, if a response is array of entity, result
is ids of entities.
Prerequisite:
Each entity need a property typename
that is set type name with upper camel case.
For example:
{
"id": "1",
"name": "User Name",
"typename": "User"
"comments": [
{ "id": "2", "body": "Comment Body 2", "typename": "Comment" },
{ "id": "1", "body": "Comment Body 1", "typename": "Comment" }
]
}
Note:
Essentially, such formatting for clients is the work of API server.
If it's possible, receive identy-style JSON directly from API server.