What are the Slack Archives?

It’s a history of our time together in the Slack Community! There’s a ton of knowledge in here, so feel free to search through the archives for a possible answer to your question.

Because this space is not active, you won’t be able to create a new post or comment here. If you have a question or want to start a discussion about something, head over to our categories and pick one to post in! You can always refer back to a post from Slack Archives if needed; just copy the link to use it as a reference..

Hello guys. My Glue API endpoint action returns ```{ "data": [ { "type": "test-main",

U048WDEP3R7
U048WDEP3R7 Posts: 217 πŸ§‘πŸ»β€πŸš€ - Cadet

Hello guys. My Glue API endpoint action returns

{
  "data": [
    {
      "type": "test-main",
      "id": null,
      "links": {
        "self": "https:\/\/glue.int.zf.local\/test-main"
      }
    }
  ],
  "links": {
    "self": "https:\/\/glue.int.zf.local\/search?term=product-name-en_us23&itemsPerPage=24&country=DE&locale=en_US"
  }
}

Whereas I want it to return

{
  "data":
    {
      "type": "test-main",
      "id": null,
      "links": {
        "self": "https:\/\/glue.int.zf.local\/test-main"
      }
    }
}

Here is the code in the action:

public function getAction(RestRequestInterface $restRequest): RestResponseInterface
    {
        $restResourceBuilder = new RestResourceBuilder();
        $restResource = $restResourceBuilder->createRestResource('test-main');
        $restResponse = $restResourceBuilder->createRestResponse()->addResource($restResource);
        return $restResponse;


    }

Can someone please advice?

Comments

  • Eugenia Poidenko
    Eugenia Poidenko Sprykee Posts: 145 πŸ§‘πŸ»β€πŸš€ - Cadet

    your request uri probably lacks resource id part. What you probably do is /test-main which is interpreted as a collection request which always results in an array returned in the response even if there is only one resource in it.

  • U048WDEP3R7
    U048WDEP3R7 Posts: 217 πŸ§‘πŸ»β€πŸš€ - Cadet

    @UQKSAARKN Can you please elaborate? This is my Glue Endpoint GET {{glue-domain}}/search?term=product-name-en_us23&itemsPerPage=24&country=DE&locale=en_US

  • Eugenia Poidenko
    Eugenia Poidenko Sprykee Posts: 145 πŸ§‘πŸ»β€πŸš€ - Cadet
    edited May 2023

    In Glue the url structure is limited and is interprerted in the following way:
    /foo/fooId/bar/barId

    where β€œfoo” and β€œbar” are resource names, and β€œfooId” and β€œbarId” are resource ids.

    Any request to /foo is interpreted as a collection request (since you are not asking for a specific resource by id), resulting in the response you are getting.

  • U048WDEP3R7
    U048WDEP3R7 Posts: 217 πŸ§‘πŸ»β€πŸš€ - Cadet

    @UQKSAARKN Thank you very much that explains a lot

  • U048WDEP3R7
    U048WDEP3R7 Posts: 217 πŸ§‘πŸ»β€πŸš€ - Cadet

    @UQKSAARKN Is there a way to force a non-collection response in glue?

  • Eugenia Poidenko
    Eugenia Poidenko Sprykee Posts: 145 πŸ§‘πŸ»β€πŸš€ - Cadet

    There is no config to allow controlling this in the old infrastructure (which I see you are using - judging by usage of the RestRequestInterface). New infra allows handling get and getCollection separately, so if you are using that on the project, it might make sense to try it out.

    As a workaround for your case, I would suggest to change the URL you are using to something like /search/product-name-en_us?foo=bar&etc. Thus you will get the ID you want to have. Also in this solution you can benefit from more traditional HTTP codes (like 404 in case the name is not found), which would not be possible for the collection requests as collection can be empty and it’s still 200.

  • U048WDEP3R7
    U048WDEP3R7 Posts: 217 πŸ§‘πŸ»β€πŸš€ - Cadet

    @UQKSAARKN Thank you πŸ™‚