Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Increasing the maxLength property for a String field is considered a breaking change while Decreasing it is considered as Backward compatible. #461

Open
Hazel-John opened this issue Feb 7, 2023 · 4 comments

Comments

@Hazel-John
Copy link

Hazel-John commented Feb 7, 2023

While testing out this tool, we've noticed that increasing the maxLength property for a String field would return API changes broke backward compatibility while decreasing the maxLength property for a String field would return a API changes are backward compatible.
Shouldn’t it be the other way round? i.e.,
Increasing the maxLength property for a String field should return API changes are backward compatible and
Decreasing the maxLength property for a String field should return API changes broke backward compatibility?
If the current behaviour is the expected behaviour we would like to understand the reasoning behind it.

Here are the snippets of the json files used for the comparison in the following 2 scenarios:

Scenario -1 : Increasing the maxLength property for a String field

oldSpec.json

"SAMPLE_FIELD": {
      "type": "string",
      "maxLength": 2,
      "nullable": true
     }

newSpec.json

 “SAMPLE_FIELD: {
      "type": "string",
      "maxLength": 5,
      "nullable": true
     }

Result:

--                           What's Changed                           --
--------------------------------------------------------------------------
- GET   /SAMPLETextView
 Return Type:
   - Changed 200 OK
     Media types:
       - Changed application/json
         Schema: Broken compatibility

Scenario -2 : Decreasing the maxLength property for a String field

oldSpec.json

 "SAMPLE_FIELD": {
      "type": "string",
      "maxLength": 2,
      "nullable": true
     }

newSpec.json

 “SAMPLE”_FIELD: {
      "type": "string",
      "maxLength": 1,
      "nullable": true
     }

Result:

--                           What's Changed                           --
--------------------------------------------------------------------------
- GET   /SAMPLETextView
 Return Type:
   - Changed 200 OK
     Media types:
       - Changed application/json
         Schema: Backward compatible

Thank You

@Hazel-John Hazel-John changed the title Increasing the maxLength property for a String field is considered a breaking change while Decreasing it's maxLength is considered as Backward compatible. Increasing the maxLength property for a String field is considered a breaking change while Decreasing it is considered as Backward compatible. Feb 7, 2023
@joschi
Copy link
Contributor

joschi commented Feb 26, 2023

@Hazel-John Thanks for reporting this!

We probably have to consider whether the minLength and maxLength properties are changed in requests or response specifications.

What do you think?

Property Location Change Effect
`minLength` Request increase Breaks clients sending shorter strings
`minLength` Request decrease Compatible change
`minLength` Response increase Compatible change
`minLength` Response decrease Compatible change
`maxLength` Request increase Compatible change
`maxLength` Request decrease Breaks clients sending longer strings
`maxLength` Response increase Breaks clients expecting shorter strings
`maxLength` Response decrease Compatible change

@edgar-philipp
Copy link

minLength Response decrease Breaks clients expecting longer strings

@joschi
Copy link
Contributor

joschi commented Mar 4, 2023

@edgar-philipp Is this really a breaking change?

@Hazel-John
Copy link
Author

Hazel-John commented Mar 14, 2023

@joschi
For our use-case mentioned above, the maxLength property is changed only in the response specifications.

For e.g., 


  1. Consider a field SAMPLE with maxLength initially set to 5.
    Decreasing the maxLength to 3 would result in data loss, due to which we think this should be a breaking change.

  2. Consider a field SAMPLE with maxLength initially set to 5.
    Increasing the maxLength to 6 would not result in data loss, due to which we think this should be a compatible change.

Kindly let us know your views on the above statement.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants