cancel
Showing results for 
Search instead for 
Did you mean: 

Way to Model Response An Array of Different Objects With Identical Properties

SOLVED
Highlighted
Contributor

Way to Model Response An Array of Different Objects With Identical Properties

Hi!

 

In Swagger Editor is there a way to model an array of objects each of which has identical properties but with different values for these properties?  This array is in a response to a delete operation and has the following structure:

{
  "Modifications_Following_DELETE": [
    {
      "rows_deleted": 0,
      "table_name": "Table_X"
    },
    {
      "rows_deleted": 0,
      "table_name": "Table_XX"
    },
    {
      "rows_deleted": 0,
      "table_name": "Table_BBBB"
    },
    {
      "rows_deleted": 0,
      "table_name": "Table_CCC"
    },
    {
      "rows_deleted": 1,
      "table_name": "Table_DDD"
    },
    {
      "rows_deleted": 0,
      "table_name": "Table_EEE"
    },
    {
      "rows_deleted": 0,
      "table_name": "Table_FFF"
    },
    {
      "rows_deleted": 0,
      "table_name": "Table_HHH"
    },
    {
      "rows_deleted": 0,
      "table_name": "Table_III"
    }
  ]
}

It is easy enough to model an array  consisting of objects, but getting the names of all the tables is not obvious. Perhaps there is a way?  

 

Thanks!

1 ACCEPTED SOLUTION

Accepted Solutions
Moderator

Re: Way to Model Response An Array of Different Objects With Identical Properties

Okay, that will not produce what you want. Please read https://swagger.io/docs/specification/adding-examples/ for a deeper explanation on how to add examples to responses. It should give you enough information on the right steps. If you run into any issues, please share the definitiion you got to and we'll take it from there.

 

As a side note - the Editor is intended to be used with YAML and not JSON. By using JSON, you will not get some of the benefits of the editor. Converting to YAML would be as simple as copying the JSON and pasting it again into the Editor. It will automatically detect it and ask if you want to convert it to YAML.


Did my reply answer your question? Give Kudos or Accept it as a Solution to help others.↓↓↓↓↓

View solution in original post

17 REPLIES 17
Moderator

Re: Way to Model Response An Array of Different Objects With Identical Properties

Looks like it's just an array of the same object. The value of specific fields isn't really relevant. Do you have an initial definition to share?


Did my reply answer your question? Give Kudos or Accept it as a Solution to help others.↓↓↓↓↓
Contributor

Re: Way to Model Response An Array of Different Objects With Identical Properties

Each one of those objects is unique, even if it does not look so.  In order to describe all the data that is returned i.e. information on the number of rows deleted from different tables, in the Swagger Editor, each of the objects would have to have a unique ID of some kind.  In the example i provided, the 'ID' is the value of the table_name field. As a result,  I cannot model the full response.

 

If each one of those objects were defined as a distinct kind of object in an array, I could model the complete response i.e. precise information on the rows deleted in different tables.  Do you see what I mean?

 

I think that this is more of a coding issue  than a Swagger issue, and will suggest a coding change to the development team. 

Moderator

Re: Way to Model Response An Array of Different Objects With Identical Properties

Unfortunately, I don't understand the problem. In the example you provided, each array entry is an object with two properties.rows_deleted and table_name. The fact that they have different values in the actual response doesn't change anything with regard to the modeling. rows_deleted would be of type integer, table_name would be a string, and that's pretty much it. What am I missing?


Did my reply answer your question? Give Kudos or Accept it as a Solution to help others.↓↓↓↓↓
Contributor

Re: Way to Model Response An Array of Different Objects With Identical Properties

What I am trying to do with Swagger Editor is model the response that occurs when a project is deleted.  The response is an array of objects, each of which consists of 2 properties - rows_deleted and table_name.  When I try to model this array consisting of several identical objects, I get the message

duplicated mapping key

In other words, I cannot represent the entire response to the delete operation.  Or perhaps there is? 

Moderator

Re: Way to Model Response An Array of Different Objects With Identical Properties

 Can you share the definition that causes that error?


Did my reply answer your question? Give Kudos or Accept it as a Solution to help others.↓↓↓↓↓
Contributor

Re: Way to Model Response An Array of Different Objects With Identical Properties

The response from the DELETE operations is as follows:

{
  "changes_made": [
    {
      "rows_deleted": 0,
      "table_name": "user_project"
    },
    {
      "rows_deleted": 0,
      "table_name": "test_job"
    },
    {
      "rows_deleted": 0,
      "table_name": "project_info"
    }
  ]
}

I have defined the following response with Swagger Editor:

      "inline_response_DELETE_Project_200": {
        "type": "object",
        "properties": {
          "changes_made": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "rows_deleted": {
                  "type": "string",
                  "description": "The number of rows deleted when the project was deleted.",
                  "example": "0"
                  },
                "table_name": {
                  "type": "string",
                  "description": "The name of the table where the row was deleted.",
                  "example": "user_project"
                  },
              }
            }
          }
        }
      },

Unfortunately, I cannot define as part of the response the test_job and project_info objects, as part of the array.  I cannot save the JSON file when I attempt to do this.  

 

Do you understand now?

Moderator

Re: Way to Model Response An Array of Different Objects With Identical Properties

The schema you provided describes all three. The 'example' value of "user_object" doesn't prohibit the value from being "test_job", "project_info" or "justarandomtablename" - it covers all these cases.

 

There's a mistake in the schema though since you say the type of rows_deleted is string and it should be integer.


Did my reply answer your question? Give Kudos or Accept it as a Solution to help others.↓↓↓↓↓
Contributor

Re: Way to Model Response An Array of Different Objects With Identical Properties

I know that the schema that I provided describes all three.  What development would like is a response that shows explicitly all three. As far as I can tell, this means that the software code should be changed so that the response is three distinct objects and not three identical objects in an array.  If there are three distinct objects that are returned - with names like user_project, test_job, and project_info - then these different objects could be displayed in the response.

 

So, this is a coding issue and not a Swagger issue.  Do you understand now?

 

The rows_deleted should be an integer. Thanks

Moderator

Re: Way to Model Response An Array of Different Objects With Identical Properties

Thanks, the situation is much clearer now, I hope.

 

There are two aspects here:

- Documenting the options: if the list of possible tables is fixed, you can describe the possible values with an enum, so users can know what values they may end up seeing.

- Documenting for visual documentation - so you want Swagger UI to display possible values? You should use the 'example' or 'examples' entries at the response level to describe an actual example, and the UI will render it as is. I believe this should address your issue.

 

Please let me know if that helps.


Did my reply answer your question? Give Kudos or Accept it as a Solution to help others.↓↓↓↓↓
New Here?
Join us and watch the welcome video:
Watch the new Interview