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

Add the readOnly field for Swagger #764

Merged

Conversation

meyerbaptiste
Copy link
Member

Q A
Bug fix? no
New feature? no
BC breaks? no
Deprecations? no
Tests pass? yes
Fixed tickets N/A
License MIT
Doc PR N/A

This PR adds the support of the readOnly field according to the Swagger documentation.

capture d ecran 2016-09-22 a 11 34 02

It follows the Swagger specification so an exception is thrown when a property is required and read-only at the same time:

Properties marked as readOnly being true SHOULD NOT be in the required list of the defined schema.

N.B. readOnly is currently not completely supported by the Swagger-UI.

@Simperfit
Copy link
Contributor

@meyerbaptiste Could you please apply the style-ci analysis ?

@meyerbaptiste meyerbaptiste force-pushed the swagger-add-read-only-field branch 2 times, most recently from ff30599 to 97d7a34 Compare September 26, 2016 14:42
@meyerbaptiste
Copy link
Member Author

@Simperfit:

We were unable to access the repo or commit to analyze it.

It is possible that the commit was deleted from GitHub before we had time to analyze it.

The problem is the same for all the recent PR.

@dunglas
Copy link
Member

dunglas commented Sep 28, 2016

Can you fix conflicts?

@meyerbaptiste
Copy link
Member Author

Done @dunglas.

@dunglas dunglas merged commit 0f88647 into api-platform:master Sep 28, 2016
@dunglas
Copy link
Member

dunglas commented Sep 28, 2016

Thanks @meyerbaptiste!

@@ -384,6 +387,10 @@ private function getDefinitionSchema(string $resourceClass, ResourceMetadata $re
$normalizedPropertyName = $this->nameConverter ? $this->nameConverter->normalize($propertyName) : $propertyName;

if ($propertyMetadata->isRequired()) {
if (false === $propertyMetadata->isWritable()) {
throw new RuntimeException(sprintf('The property "%s" of the resource "%s" can not be required and read-only at the same time.', $propertyName, $resourceClass));
Copy link
Contributor

@teohhanhui teohhanhui Sep 29, 2016

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I disagree.

Copy link
Member

@dunglas dunglas Sep 29, 2016

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why? If a property is required, by definition it should be writeable no?
Swagger does the same thing btw.

Copy link
Contributor

@teohhanhui teohhanhui Sep 29, 2016

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is really problematic, because read-only properties can be "required" too, i.e. they cannot be set to null or the empty string. Swagger operates in a different context than ours.

For example, we set withRequired(true) here:

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

IMO this loader should be fixed and not set required to true if the property isn't writeable. WDYT?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Our metadata system does not provide enough flexibility to do this correctly. Let's say if writable is set to false after ValidatorPropertyMetadataFactory, then what?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Unless we again explicitly call withRequired(false) each time we call withWritable(false). You can see how this quickly gets out of hand.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Unless this logic can be embedded in PropertyMetadata itself...

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Embedding it in PropertyMetadata is a good idea IMO.

@meyerbaptiste meyerbaptiste deleted the swagger-add-read-only-field branch October 12, 2016 13:31
magarzon pushed a commit to magarzon/core that referenced this pull request Feb 12, 2017
…ad-only-field

Add the readOnly field for Swagger
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

4 participants