Skip to content

Set request body to optional when all properties are optional #582

Open
@andrueastman

Description

@andrueastman
Contributor

Related to microsoftgraph/msgraph-sdk-java#2163 and microsoftgraph/msgraph-sdk-dotnet#2671 (comment)

In a scenario where all the properties in the request body are optional such as an odata action with all parameters being optional, we should set the requestBody.required = false in the generated openApi description otherwise explictly set it to true.

https://spec.openapis.org/oas/v3.0.3.html#fixed-fields-10

This will unlock the generation of request body parameters in the SDKs as optional parameters in the builders to prevent breaking changes in scenarios where optional parametes are added.

Activity

added
priority:p1High priority but not blocking. Causes major but not critical loss of functionality SLA <=7days
on Sep 20, 2024
andrueastman

andrueastman commented on Sep 25, 2024

@andrueastman
ContributorAuthor

Once this is fixed and released, we should revert this PR.
microsoftgraph/msgraph-metadata#697

self-assigned this
on Sep 30, 2024
andrueastman

andrueastman commented on Oct 2, 2024

@andrueastman
ContributorAuthor

Updated the description here. Should be Odata action not function. Functions do not have request bodies as the parameters are in the path.

irvinesunday

irvinesunday commented on Oct 2, 2024

@irvinesunday
Contributor

Also, point of note is that, if requestBody.required = false the OAS does not emit the required property in the requestBody schema.

andrueastman

andrueastman commented on Oct 2, 2024

@andrueastman
ContributorAuthor

According to the spec.

Determines if the request body is required in the request. Defaults to false.

So what we should do is set it to true when required parameters are present...

irvinesunday

irvinesunday commented on Oct 3, 2024

@irvinesunday
Contributor

Trying to retrieve the annotations in-lined in the Action parameters fails to retrieve the Org.OData.Core.V1.OptionalParameter annotation using the extensions from the Edm lib.

var annotations =  model.FindVocabularyAnnotationsIncludingInheritedAnnotations(parameter);
<Parameter Name="transitive" Type="Edm.Boolean" Nullable="false">
  <Annotation Term="Org.OData.Core.V1.OptionalParameter" />
</Parameter>

Checking with the OData team to check for its support.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

priority:p1High priority but not blocking. Causes major but not critical loss of functionality SLA <=7days

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

    Participants

    @andrueastman@irvinesunday

    Issue actions

      Set request body to optional when all properties are optional · Issue #582 · microsoft/OpenAPI.NET.OData