Search code examples
json-api

JAGQL - Why do I need an id for a post call?


I'm using JAGQL to build a JSON API compatible express server. My database behind it is MongoDB (jsonapi-store-mongodb). I posted my question here as well: https://github.com/holidayextras/jsonapi-store-mongodb/issues/59

According to the JAGQL documentation, https://jagql.github.io/pages/project_setup/resources.html#generateid,

I am told that

generateId

By default, the server autogenerates a UUID for resources which are created without specifying an ID. To disable this behavior (for example, if the database generates an ID by auto-incrementing), set generateId to false. If the resource's ID is not a UUID, it is also necessary to specify an id attribute with the correct type. See /examples/resorces/autoincrement.js for an example of such a resource.

But when I send a POST request to one of my resources, I get this:

"jsonapi": {
    "version": "1.0"
},
"meta": {},
"links": {
    "self": "/myresource"
},
"errors": [
    {
        "status": "403",
        "code": "EFORBIDDEN",
        "title": "Param validation failed",
        "detail": [
            {
                "message": "\"id\" is required",
                "path": [
                    "id"
                ],
                "type": "any.required",
                "context": {
                    "key": "id",
                    "label": "id"
                }
            }
        ]
    }
]

What am I missing?


Solution

  • See here for more details: https://github.com/jagql/framework/issues/106

    In your resource definition, you want to add primaryKey: 'uuid':

    {
        resource: 'things',
        handlers,
        primaryKey: 'uuid',
        attributes: {       
            ...
        }
     }