Fixes OpenAPI Links and makes them optional (#72)

* Adds Links to EntitySet type response objects

* Adds links to the test OpenAPI docs.

* Refactor to use Utils class for nullability checks

* Modify link generator to handle all instances of IEdmEntityType

* Update arguments

* Add new Link properties

* Update test files with links properties

* Rename parameter

* Fix OpenAPI Link generation

* Reorder Parameters generation before Responses

This is important so that the parameters info can be used for Links generation

* Update test files to validate Link fixes

* Fix links and add optional setting

* Update test for Links

* Revert project PlatformTarget

* Add comment

* Refactor to remove unnecessary Link creation of collection of entities

* Revert platform target to default - AnyCPU

* Add helpful comment

* Grammar nit fix

Co-authored-by: Irvine Sunday <v-irsund@microsoft.com>
Co-authored-by: Irvine Sunday <irochand@microsoft.com>
This commit is contained in:
Irvine Sunday 2020-07-20 16:54:58 +03:00 committed by GitHub
parent c58a6136f3
commit 9d44019639
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
14 changed files with 285 additions and 606 deletions

View file

@ -9,6 +9,7 @@ using Microsoft.OpenApi.OData.Common;
using Microsoft.OpenApi.Models;
using Microsoft.OpenApi.Any;
using Microsoft.OpenApi.OData.Edm;
using System.Linq;
namespace Microsoft.OpenApi.OData.Generator
{
@ -22,32 +23,78 @@ namespace Microsoft.OpenApi.OData.Generator
/// </summary>
/// <param name="context">The OData context.</param>
/// <param name="entityType">The Entity type.</param>
/// <param name ="sourceElementName">The name of the source of the <see cref="IEdmEntityType" />.</param>
/// <param name ="entityName">The name of the source of the <see cref="IEdmEntityType"/> object.</param>
/// <param name="entityKind">"The kind of the source of the <see cref="IEdmEntityType"/> object.</param>
/// <param name="parameters">"The list of parameters of the incoming operation.</param>
/// <param name="navPropOperationId">Optional parameter: The operation id of the source of the NavigationProperty object.</param>
/// <returns>The created dictionary of <see cref="OpenApiLink"/> object.</returns>
public static IDictionary<string, OpenApiLink> CreateLinks(this ODataContext context, IEdmEntityType entityType, string sourceElementName)
public static IDictionary<string, OpenApiLink> CreateLinks(this ODataContext context,
IEdmEntityType entityType, string entityName, string entityKind,
IList<OpenApiParameter> parameters, string navPropOperationId = null)
{
IDictionary<string, OpenApiLink> links = new Dictionary<string, OpenApiLink>();
Utils.CheckArgumentNull(context, nameof(context));
Utils.CheckArgumentNull(entityType, nameof(entityType));
Utils.CheckArgumentNullOrEmpty(sourceElementName, nameof(sourceElementName));
Utils.CheckArgumentNullOrEmpty(entityName, nameof(entityName));
Utils.CheckArgumentNullOrEmpty(entityKind, nameof(entityKind));
Utils.CheckArgumentNull(parameters, nameof(parameters));
IDictionary<string, OpenApiLink> links = new Dictionary<string, OpenApiLink>();
foreach (IEdmNavigationProperty np in entityType.DeclaredNavigationProperties())
List<string> pathKeyNames = new List<string>();
// Fetch defined Id(s) from incoming parameters (if any)
foreach (var parameter in parameters)
{
if (!string.IsNullOrEmpty(parameter.Description) &&
parameter.Description.ToLower().Contains("key"))
{
pathKeyNames.Add(parameter.Name);
}
}
foreach (IEdmNavigationProperty navProp in entityType.NavigationProperties())
{
string navPropName = navProp.Name;
string operationId;
string operationPrefix;
switch (entityKind)
{
case "Navigation": // just for contained navigations
operationPrefix = navPropOperationId;
break;
default: // EntitySet, Entity, Singleton
operationPrefix = entityName;
break;
}
if (navProp.TargetMultiplicity() == EdmMultiplicity.Many)
{
operationId = operationPrefix + ".List" + Utils.UpperFirstChar(navPropName);
}
else
{
operationId = operationPrefix + ".Get" + Utils.UpperFirstChar(navPropName);
}
OpenApiLink link = new OpenApiLink
{
OperationId = sourceElementName + "." + entityType.Name + ".Get" + Utils.UpperFirstChar(entityType.Name),
OperationId = operationId,
Parameters = new Dictionary<string, RuntimeExpressionAnyWrapper>()
};
foreach (IEdmStructuralProperty key in entityType.Key())
if (pathKeyNames.Any())
{
link.Parameters[key.Name] = new RuntimeExpressionAnyWrapper
foreach (var pathKeyName in pathKeyNames)
{
Any = new OpenApiString("$request.path." + key.Name)
};
link.Parameters[pathKeyName] = new RuntimeExpressionAnyWrapper
{
Any = new OpenApiString("$request.path." + pathKeyName)
};
}
}
links[np.Name] = link;
links[navProp.Name] = link;
}
return links;

View file

@ -120,6 +120,11 @@ namespace Microsoft.OpenApi.OData
/// </summary>
public string PathPrefix { get; set; } = string.Empty;
/// <summary>
/// Gets/Sets a value indicating whether or not to show the OpenAPI links in the responses.
/// </summary>
public bool ShowLinks { get; set; } = false;
internal OpenApiConvertSettings Clone()
{
var newSettings = new OpenApiConvertSettings
@ -144,7 +149,8 @@ namespace Microsoft.OpenApi.OData
EnableDiscriminatorValue = this.EnableDiscriminatorValue,
EnableDerivedTypesReferencesForResponses = this.EnableDerivedTypesReferencesForResponses,
EnableDerivedTypesReferencesForRequestBody = this.EnableDerivedTypesReferencesForRequestBody,
PathPrefix = this.PathPrefix
PathPrefix = this.PathPrefix,
ShowLinks = this.ShowLinks
};
return newSettings;

View file

@ -64,12 +64,19 @@ namespace Microsoft.OpenApi.OData.Operation
protected override void SetResponses(OpenApiOperation operation)
{
OpenApiSchema schema = null;
IDictionary<string, OpenApiLink> links = null;
if (Context.Settings.EnableDerivedTypesReferencesForResponses)
{
schema = EdmModelHelper.GetDerivedTypesReferenceSchema(EntitySet.EntityType(), Context.Model);
}
if (Context.Settings.ShowLinks)
{
links = Context.CreateLinks(entityType: EntitySet.EntityType(), entityName: EntitySet.Name,
entityKind: EntitySet.ContainerElementKind.ToString(), parameters: operation.Parameters);
}
if (schema == null)
{
schema = new OpenApiSchema
@ -99,7 +106,7 @@ namespace Microsoft.OpenApi.OData.Operation
}
}
},
Links = Context.CreateLinks(EntitySet.EntityType(), EntitySet.Name)
Links = links
}
}
};

View file

@ -192,8 +192,7 @@ namespace Microsoft.OpenApi.OData.Operation
}
}
}
},
Links = Context.CreateLinks(EntitySet.EntityType(), EntitySet.Name)
}
}
}
};

View file

@ -131,14 +131,23 @@ namespace Microsoft.OpenApi.OData.Operation
}
}
}
},
Links = Context.CreateLinks(NavigationProperty.ToEntityType(), NavigationProperty.Name)
}
}
}
};
}
else
{
IDictionary<string, OpenApiLink> links = null;
if (Context.Settings.ShowLinks)
{
string operationId = GetOperationId();
links = Context.CreateLinks(entityType: NavigationProperty.ToEntityType(), entityName: NavigationProperty.Name,
entityKind: NavigationProperty.PropertyKind.ToString(), parameters: operation.Parameters,
navPropOperationId: operationId);
}
operation.Responses = new OpenApiResponses
{
{
@ -155,7 +164,8 @@ namespace Microsoft.OpenApi.OData.Operation
Schema = schema
}
}
}
},
Links = links
}
}
};

View file

@ -137,7 +137,7 @@ namespace Microsoft.OpenApi.OData.Operation
base.SetExtensions(operation);
}
protected string GetOperationId(string prefix)
protected string GetOperationId(string prefix = null)
{
IList<string> items = new List<string>
{
@ -152,7 +152,15 @@ namespace Microsoft.OpenApi.OData.Operation
{
if (segment == lastpath)
{
items.Add(prefix + Utils.UpperFirstChar(npSegment.NavigationProperty.Name));
if (prefix != null)
{
items.Add(prefix + Utils.UpperFirstChar(npSegment.NavigationProperty.Name));
}
else
{
items.Add(Utils.UpperFirstChar(npSegment.NavigationProperty.Name));
}
break;
}
else

View file

@ -44,15 +44,18 @@ namespace Microsoft.OpenApi.OData.Operation
// Security
SetSecurity(operation);
/* Parameters
These need to be set before Responses, as the Parameters
will be used in the Responses when creating Links.
*/
SetParameters(operation);
// Responses
SetResponses(operation);
// RequestBody
SetRequestBody(operation);
// Parameters
SetParameters(operation);
// Tags
SetTags(operation);

View file

@ -116,14 +116,23 @@ namespace Microsoft.OpenApi.OData.Operation
}
}
}
},
Links = Context.CreateLinks(NavigationProperty.ToEntityType(), NavigationProperty.Name)
}
}
}
};
}
else
{
IDictionary<string, OpenApiLink> links = null;
if (Context.Settings.ShowLinks)
{
string operationId = GetOperationId();
links = Context.CreateLinks(entityType: NavigationProperty.ToEntityType(), entityName: NavigationProperty.Name,
entityKind: NavigationProperty.PropertyKind.ToString(), parameters: operation.Parameters,
navPropOperationId: operationId);
}
operation.Responses = new OpenApiResponses
{
{
@ -140,7 +149,8 @@ namespace Microsoft.OpenApi.OData.Operation
Schema = schema
}
}
}
},
Links = links
}
}
};

View file

@ -64,12 +64,19 @@ namespace Microsoft.OpenApi.OData.Operation
protected override void SetResponses(OpenApiOperation operation)
{
OpenApiSchema schema = null;
IDictionary<string, OpenApiLink> links = null;
if (Context.Settings.EnableDerivedTypesReferencesForResponses)
{
schema = EdmModelHelper.GetDerivedTypesReferenceSchema(Singleton.EntityType(), Context.Model);
}
if (Context.Settings.ShowLinks)
{
links = Context.CreateLinks(entityType: Singleton.EntityType(), entityName: Singleton.Name,
entityKind: Singleton.ContainerElementKind.ToString(), parameters: operation.Parameters);
}
if (schema == null)
{
schema = new OpenApiSchema
@ -99,7 +106,7 @@ namespace Microsoft.OpenApi.OData.Operation
}
}
},
Links = Context.CreateLinks(Singleton.EntityType(), Singleton.Name)
Links = links
}
}
};

View file

@ -140,6 +140,7 @@ namespace Microsoft.OpenApi.OData.Tests
IEdmModel model = EdmModelHelper.MultipleSchemasEdmModel;
var openApiConvertSettings = new OpenApiConvertSettings();
openApiConvertSettings.OpenApiSpecVersion = specVersion;
openApiConvertSettings.ShowLinks = true; // test Links
// Act
string json = WriteEdmModelAsOpenApi(model, OpenApiFormat.Json, openApiConvertSettings);
@ -165,6 +166,7 @@ namespace Microsoft.OpenApi.OData.Tests
IEdmModel model = EdmModelHelper.MultipleSchemasEdmModel;
var openApiConvertSettings = new OpenApiConvertSettings();
openApiConvertSettings.OpenApiSpecVersion = specVersion;
openApiConvertSettings.ShowLinks = true; // test Links
// Act
string yaml = WriteEdmModelAsOpenApi(model, OpenApiFormat.Yaml, openApiConvertSettings);

View file

@ -445,14 +445,6 @@
}
}
}
},
"links": {
"Revisions": {
"operationId": "Documents.DocumentDto.GetDocumentDto",
"parameters": {
"Id": "$request.path.Id"
}
}
}
},
"default": {
@ -574,7 +566,7 @@
},
"links": {
"Revisions": {
"operationId": "Documents.DocumentDto.GetDocumentDto",
"operationId": "Documents.ListRevisions",
"parameters": {
"Id": "$request.path.Id"
}
@ -866,14 +858,6 @@
}
}
}
},
"links": {
"Document": {
"operationId": "Revisions.RevisionDto.GetRevisionDto",
"parameters": {
"Id": "$request.path.Id"
}
}
}
},
"default": {
@ -979,6 +963,15 @@
"$ref": "#/components/schemas/Siterra.Documents.App.DTO.RevisionDto"
}
}
},
"links": {
"Document": {
"operationId": "Documents.Revisions.GetDocument",
"parameters": {
"Id": "$request.path.Id",
"Id1": "$request.path.Id1"
}
}
}
},
"default": {
@ -1093,14 +1086,6 @@
}
}
}
},
"links": {
"Document": {
"operationId": "Revisions.RevisionDto.GetRevisionDto",
"parameters": {
"Id": "$request.path.Id"
}
}
}
},
"default": {
@ -1344,14 +1329,6 @@
}
}
}
},
"links": {
"Documents": {
"operationId": "Libraries.LibraryDto.GetLibraryDto",
"parameters": {
"Id": "$request.path.Id"
}
}
}
},
"default": {
@ -1478,7 +1455,7 @@
},
"links": {
"Documents": {
"operationId": "Libraries.LibraryDto.GetLibraryDto",
"operationId": "Libraries.ListDocuments",
"parameters": {
"Id": "$request.path.Id"
}
@ -1709,14 +1686,6 @@
}
}
}
},
"links": {
"Revisions": {
"operationId": "Documents.DocumentDto.GetDocumentDto",
"parameters": {
"Id": "$request.path.Id"
}
}
}
},
"default": {
@ -1815,6 +1784,15 @@
"$ref": "#/components/schemas/Siterra.Documents.App.DTO.DocumentDto"
}
}
},
"links": {
"Revisions": {
"operationId": "Libraries.Documents.ListRevisions",
"parameters": {
"Id": "$request.path.Id",
"Id1": "$request.path.Id1"
}
}
}
},
"default": {
@ -1915,14 +1893,6 @@
}
}
}
},
"links": {
"Revisions": {
"operationId": "Documents.DocumentDto.GetDocumentDto",
"parameters": {
"Id": "$request.path.Id"
}
}
}
},
"default": {
@ -2172,14 +2142,6 @@
}
}
}
},
"links": {
"Document": {
"operationId": "Revisions.RevisionDto.GetRevisionDto",
"parameters": {
"Id": "$request.path.Id"
}
}
}
},
"default": {
@ -2308,7 +2270,7 @@
},
"links": {
"Document": {
"operationId": "Revisions.RevisionDto.GetRevisionDto",
"operationId": "Revisions.GetDocument",
"parameters": {
"Id": "$request.path.Id"
}
@ -2523,6 +2485,38 @@
"$ref": "#/components/schemas/Siterra.Documents.BusinessLogic.Entities.Document.Document"
}
}
},
"links": {
"Library": {
"operationId": "Revisions.Document.GetLibrary",
"parameters": {
"Id": "$request.path.Id"
}
},
"LastRevisionFile": {
"operationId": "Revisions.Document.GetLastRevisionFile",
"parameters": {
"Id": "$request.path.Id"
}
},
"SourceDocument": {
"operationId": "Revisions.Document.GetSourceDocument",
"parameters": {
"Id": "$request.path.Id"
}
},
"SourceDocumentChildren": {
"operationId": "Revisions.Document.ListSourceDocumentChildren",
"parameters": {
"Id": "$request.path.Id"
}
},
"Revisions": {
"operationId": "Revisions.Document.ListRevisions",
"parameters": {
"Id": "$request.path.Id"
}
}
}
},
"default": {
@ -2563,6 +2557,38 @@
"type": "string"
}
}
},
"links": {
"Library": {
"operationId": "Revisions.Document.GetLibrary",
"parameters": {
"Id": "$request.path.Id"
}
},
"LastRevisionFile": {
"operationId": "Revisions.Document.GetLastRevisionFile",
"parameters": {
"Id": "$request.path.Id"
}
},
"SourceDocument": {
"operationId": "Revisions.Document.GetSourceDocument",
"parameters": {
"Id": "$request.path.Id"
}
},
"SourceDocumentChildren": {
"operationId": "Revisions.Document.ListSourceDocumentChildren",
"parameters": {
"Id": "$request.path.Id"
}
},
"Revisions": {
"operationId": "Revisions.Document.ListRevisions",
"parameters": {
"Id": "$request.path.Id"
}
}
}
},
"default": {
@ -2776,14 +2802,6 @@
}
}
}
},
"links": {
"Revisions": {
"operationId": "Tasks.DocumentDto.GetDocumentDto",
"parameters": {
"Id": "$request.path.Id"
}
}
}
},
"default": {
@ -2905,7 +2923,7 @@
},
"links": {
"Revisions": {
"operationId": "Tasks.DocumentDto.GetDocumentDto",
"operationId": "Tasks.ListRevisions",
"parameters": {
"Id": "$request.path.Id"
}
@ -3197,14 +3215,6 @@
}
}
}
},
"links": {
"Document": {
"operationId": "Revisions.RevisionDto.GetRevisionDto",
"parameters": {
"Id": "$request.path.Id"
}
}
}
},
"default": {
@ -3310,6 +3320,15 @@
"$ref": "#/components/schemas/Siterra.Documents.App.DTO.RevisionDto"
}
}
},
"links": {
"Document": {
"operationId": "Tasks.Revisions.GetDocument",
"parameters": {
"Id": "$request.path.Id",
"Id1": "$request.path.Id1"
}
}
}
},
"default": {
@ -3424,14 +3443,6 @@
}
}
}
},
"links": {
"Document": {
"operationId": "Revisions.RevisionDto.GetRevisionDto",
"parameters": {
"Id": "$request.path.Id"
}
}
}
},
"default": {

View file

@ -310,11 +310,6 @@ paths:
type: array
items:
$ref: '#/components/schemas/Siterra.Documents.App.DTO.DocumentDto'
links:
Revisions:
operationId: Documents.DocumentDto.GetDocumentDto
parameters:
Id: $request.path.Id
default:
$ref: '#/components/responses/error'
post:
@ -400,7 +395,7 @@ paths:
$ref: '#/components/schemas/Siterra.Documents.App.DTO.DocumentDto'
links:
Revisions:
operationId: Documents.DocumentDto.GetDocumentDto
operationId: Documents.ListRevisions
parameters:
Id: $request.path.Id
default:
@ -611,11 +606,6 @@ paths:
type: array
items:
$ref: '#/components/schemas/Siterra.Documents.App.DTO.RevisionDto'
links:
Document:
operationId: Revisions.RevisionDto.GetRevisionDto
parameters:
Id: $request.path.Id
default:
$ref: '#/components/responses/error'
x-ms-docs-operation-type: operation
@ -695,6 +685,12 @@ paths:
application/json:
schema:
$ref: '#/components/schemas/Siterra.Documents.App.DTO.RevisionDto'
links:
Document:
operationId: Documents.Revisions.GetDocument
parameters:
Id: $request.path.Id
Id1: $request.path.Id1
default:
$ref: '#/components/responses/error'
x-ms-docs-operation-type: operation
@ -778,11 +774,6 @@ paths:
type: array
items:
type: string
links:
Document:
operationId: Revisions.RevisionDto.GetRevisionDto
parameters:
Id: $request.path.Id
default:
$ref: '#/components/responses/error'
x-ms-docs-operation-type: operation
@ -957,11 +948,6 @@ paths:
type: array
items:
$ref: '#/components/schemas/Siterra.Documents.App.DTO.LibraryDto'
links:
Documents:
operationId: Libraries.LibraryDto.GetLibraryDto
parameters:
Id: $request.path.Id
default:
$ref: '#/components/responses/error'
post:
@ -1052,7 +1038,7 @@ paths:
$ref: '#/components/schemas/Siterra.Documents.App.DTO.LibraryDto'
links:
Documents:
operationId: Libraries.LibraryDto.GetLibraryDto
operationId: Libraries.ListDocuments
parameters:
Id: $request.path.Id
default:
@ -1215,11 +1201,6 @@ paths:
type: array
items:
$ref: '#/components/schemas/Siterra.Documents.App.DTO.DocumentDto'
links:
Revisions:
operationId: Documents.DocumentDto.GetDocumentDto
parameters:
Id: $request.path.Id
default:
$ref: '#/components/responses/error'
x-ms-docs-operation-type: operation
@ -1292,6 +1273,12 @@ paths:
application/json:
schema:
$ref: '#/components/schemas/Siterra.Documents.App.DTO.DocumentDto'
links:
Revisions:
operationId: Libraries.Documents.ListRevisions
parameters:
Id: $request.path.Id
Id1: $request.path.Id1
default:
$ref: '#/components/responses/error'
x-ms-docs-operation-type: operation
@ -1361,11 +1348,6 @@ paths:
type: array
items:
type: string
links:
Revisions:
operationId: Documents.DocumentDto.GetDocumentDto
parameters:
Id: $request.path.Id
default:
$ref: '#/components/responses/error'
x-ms-docs-operation-type: operation
@ -1546,11 +1528,6 @@ paths:
type: array
items:
$ref: '#/components/schemas/Siterra.Documents.App.DTO.RevisionDto'
links:
Document:
operationId: Revisions.RevisionDto.GetRevisionDto
parameters:
Id: $request.path.Id
default:
$ref: '#/components/responses/error'
post:
@ -1643,7 +1620,7 @@ paths:
$ref: '#/components/schemas/Siterra.Documents.App.DTO.RevisionDto'
links:
Document:
operationId: Revisions.RevisionDto.GetRevisionDto
operationId: Revisions.GetDocument
parameters:
Id: $request.path.Id
default:
@ -1808,6 +1785,27 @@ paths:
application/json:
schema:
$ref: '#/components/schemas/Siterra.Documents.BusinessLogic.Entities.Document.Document'
links:
Library:
operationId: Revisions.Document.GetLibrary
parameters:
Id: $request.path.Id
LastRevisionFile:
operationId: Revisions.Document.GetLastRevisionFile
parameters:
Id: $request.path.Id
SourceDocument:
operationId: Revisions.Document.GetSourceDocument
parameters:
Id: $request.path.Id
SourceDocumentChildren:
operationId: Revisions.Document.ListSourceDocumentChildren
parameters:
Id: $request.path.Id
Revisions:
operationId: Revisions.Document.ListRevisions
parameters:
Id: $request.path.Id
default:
$ref: '#/components/responses/error'
x-ms-docs-operation-type: operation
@ -1835,6 +1833,27 @@ paths:
application/json:
schema:
type: string
links:
Library:
operationId: Revisions.Document.GetLibrary
parameters:
Id: $request.path.Id
LastRevisionFile:
operationId: Revisions.Document.GetLastRevisionFile
parameters:
Id: $request.path.Id
SourceDocument:
operationId: Revisions.Document.GetSourceDocument
parameters:
Id: $request.path.Id
SourceDocumentChildren:
operationId: Revisions.Document.ListSourceDocumentChildren
parameters:
Id: $request.path.Id
Revisions:
operationId: Revisions.Document.ListRevisions
parameters:
Id: $request.path.Id
default:
$ref: '#/components/responses/error'
x-ms-docs-operation-type: operation
@ -1985,11 +2004,6 @@ paths:
type: array
items:
$ref: '#/components/schemas/Siterra.Documents.App.DTO.DocumentDto'
links:
Revisions:
operationId: Tasks.DocumentDto.GetDocumentDto
parameters:
Id: $request.path.Id
default:
$ref: '#/components/responses/error'
post:
@ -2075,7 +2089,7 @@ paths:
$ref: '#/components/schemas/Siterra.Documents.App.DTO.DocumentDto'
links:
Revisions:
operationId: Tasks.DocumentDto.GetDocumentDto
operationId: Tasks.ListRevisions
parameters:
Id: $request.path.Id
default:
@ -2286,11 +2300,6 @@ paths:
type: array
items:
$ref: '#/components/schemas/Siterra.Documents.App.DTO.RevisionDto'
links:
Document:
operationId: Revisions.RevisionDto.GetRevisionDto
parameters:
Id: $request.path.Id
default:
$ref: '#/components/responses/error'
x-ms-docs-operation-type: operation
@ -2370,6 +2379,12 @@ paths:
application/json:
schema:
$ref: '#/components/schemas/Siterra.Documents.App.DTO.RevisionDto'
links:
Document:
operationId: Tasks.Revisions.GetDocument
parameters:
Id: $request.path.Id
Id1: $request.path.Id1
default:
$ref: '#/components/responses/error'
x-ms-docs-operation-type: operation
@ -2453,11 +2468,6 @@ paths:
type: array
items:
type: string
links:
Document:
operationId: Revisions.RevisionDto.GetRevisionDto
parameters:
Id: $request.path.Id
default:
$ref: '#/components/responses/error'
x-ms-docs-operation-type: operation

View file

@ -767,26 +767,6 @@
"$ref": "#/components/schemas/Microsoft.OData.Service.Sample.TrippinInMemory.Models.Person"
}
}
},
"links": {
"Friends": {
"operationId": "Me.Person.GetPerson",
"parameters": {
"UserName": "$request.path.UserName"
}
},
"BestFriend": {
"operationId": "Me.Person.GetPerson",
"parameters": {
"UserName": "$request.path.UserName"
}
},
"Trips": {
"operationId": "Me.Person.GetPerson",
"parameters": {
"UserName": "$request.path.UserName"
}
}
}
},
"default": {
@ -1108,26 +1088,6 @@
}
}
}
},
"links": {
"Friends": {
"operationId": "Friends.Person.GetPerson",
"parameters": {
"UserName": "$request.path.UserName"
}
},
"BestFriend": {
"operationId": "Friends.Person.GetPerson",
"parameters": {
"UserName": "$request.path.UserName"
}
},
"Trips": {
"operationId": "Friends.Person.GetPerson",
"parameters": {
"UserName": "$request.path.UserName"
}
}
}
},
"default": {
@ -1304,26 +1264,6 @@
}
}
}
},
"links": {
"Friends": {
"operationId": "Friends.Person.GetPerson",
"parameters": {
"UserName": "$request.path.UserName"
}
},
"BestFriend": {
"operationId": "Friends.Person.GetPerson",
"parameters": {
"UserName": "$request.path.UserName"
}
},
"Trips": {
"operationId": "Friends.Person.GetPerson",
"parameters": {
"UserName": "$request.path.UserName"
}
}
}
},
"default": {
@ -1722,14 +1662,6 @@
}
}
}
},
"links": {
"PlanItems": {
"operationId": "Trips.Trip.GetTrip",
"parameters": {
"TripId": "$request.path.TripId"
}
}
}
},
"default": {
@ -1944,14 +1876,6 @@
}
}
}
},
"links": {
"PlanItems": {
"operationId": "Trips.Trip.GetTrip",
"parameters": {
"TripId": "$request.path.TripId"
}
}
}
},
"default": {
@ -2159,26 +2083,6 @@
}
}
}
},
"links": {
"Friends": {
"operationId": "NewComePeople.Person.GetPerson",
"parameters": {
"UserName": "$request.path.UserName"
}
},
"BestFriend": {
"operationId": "NewComePeople.Person.GetPerson",
"parameters": {
"UserName": "$request.path.UserName"
}
},
"Trips": {
"operationId": "NewComePeople.Person.GetPerson",
"parameters": {
"UserName": "$request.path.UserName"
}
}
}
},
"default": {
@ -2299,26 +2203,6 @@
"$ref": "#/components/schemas/Microsoft.OData.Service.Sample.TrippinInMemory.Models.Person"
}
}
},
"links": {
"Friends": {
"operationId": "NewComePeople.Person.GetPerson",
"parameters": {
"UserName": "$request.path.UserName"
}
},
"BestFriend": {
"operationId": "NewComePeople.Person.GetPerson",
"parameters": {
"UserName": "$request.path.UserName"
}
},
"Trips": {
"operationId": "NewComePeople.Person.GetPerson",
"parameters": {
"UserName": "$request.path.UserName"
}
}
}
},
"default": {
@ -2742,26 +2626,6 @@
}
}
}
},
"links": {
"Friends": {
"operationId": "Friends.Person.GetPerson",
"parameters": {
"UserName": "$request.path.UserName"
}
},
"BestFriend": {
"operationId": "Friends.Person.GetPerson",
"parameters": {
"UserName": "$request.path.UserName"
}
},
"Trips": {
"operationId": "Friends.Person.GetPerson",
"parameters": {
"UserName": "$request.path.UserName"
}
}
}
},
"default": {
@ -2958,26 +2822,6 @@
}
}
}
},
"links": {
"Friends": {
"operationId": "Friends.Person.GetPerson",
"parameters": {
"UserName": "$request.path.UserName"
}
},
"BestFriend": {
"operationId": "Friends.Person.GetPerson",
"parameters": {
"UserName": "$request.path.UserName"
}
},
"Trips": {
"operationId": "Friends.Person.GetPerson",
"parameters": {
"UserName": "$request.path.UserName"
}
}
}
},
"default": {
@ -3464,14 +3308,6 @@
}
}
}
},
"links": {
"PlanItems": {
"operationId": "Trips.Trip.GetTrip",
"parameters": {
"TripId": "$request.path.TripId"
}
}
}
},
"default": {
@ -3716,14 +3552,6 @@
}
}
}
},
"links": {
"PlanItems": {
"operationId": "Trips.Trip.GetTrip",
"parameters": {
"TripId": "$request.path.TripId"
}
}
}
},
"default": {
@ -3953,26 +3781,6 @@
}
}
}
},
"links": {
"Friends": {
"operationId": "People.Person.GetPerson",
"parameters": {
"UserName": "$request.path.UserName"
}
},
"BestFriend": {
"operationId": "People.Person.GetPerson",
"parameters": {
"UserName": "$request.path.UserName"
}
},
"Trips": {
"operationId": "People.Person.GetPerson",
"parameters": {
"UserName": "$request.path.UserName"
}
}
}
},
"default": {
@ -4093,26 +3901,6 @@
"$ref": "#/components/schemas/Microsoft.OData.Service.Sample.TrippinInMemory.Models.Person"
}
}
},
"links": {
"Friends": {
"operationId": "People.Person.GetPerson",
"parameters": {
"UserName": "$request.path.UserName"
}
},
"BestFriend": {
"operationId": "People.Person.GetPerson",
"parameters": {
"UserName": "$request.path.UserName"
}
},
"Trips": {
"operationId": "People.Person.GetPerson",
"parameters": {
"UserName": "$request.path.UserName"
}
}
}
},
"default": {
@ -4536,26 +4324,6 @@
}
}
}
},
"links": {
"Friends": {
"operationId": "Friends.Person.GetPerson",
"parameters": {
"UserName": "$request.path.UserName"
}
},
"BestFriend": {
"operationId": "Friends.Person.GetPerson",
"parameters": {
"UserName": "$request.path.UserName"
}
},
"Trips": {
"operationId": "Friends.Person.GetPerson",
"parameters": {
"UserName": "$request.path.UserName"
}
}
}
},
"default": {
@ -4752,26 +4520,6 @@
}
}
}
},
"links": {
"Friends": {
"operationId": "Friends.Person.GetPerson",
"parameters": {
"UserName": "$request.path.UserName"
}
},
"BestFriend": {
"operationId": "Friends.Person.GetPerson",
"parameters": {
"UserName": "$request.path.UserName"
}
},
"Trips": {
"operationId": "Friends.Person.GetPerson",
"parameters": {
"UserName": "$request.path.UserName"
}
}
}
},
"default": {
@ -5258,14 +5006,6 @@
}
}
}
},
"links": {
"PlanItems": {
"operationId": "Trips.Trip.GetTrip",
"parameters": {
"TripId": "$request.path.TripId"
}
}
}
},
"default": {
@ -5510,14 +5250,6 @@
}
}
}
},
"links": {
"PlanItems": {
"operationId": "Trips.Trip.GetTrip",
"parameters": {
"TripId": "$request.path.TripId"
}
}
}
},
"default": {

View file

@ -505,19 +505,6 @@ paths:
application/json:
schema:
$ref: '#/components/schemas/Microsoft.OData.Service.Sample.TrippinInMemory.Models.Person'
links:
Friends:
operationId: Me.Person.GetPerson
parameters:
UserName: $request.path.UserName
BestFriend:
operationId: Me.Person.GetPerson
parameters:
UserName: $request.path.UserName
Trips:
operationId: Me.Person.GetPerson
parameters:
UserName: $request.path.UserName
default:
$ref: '#/components/responses/error'
x-ms-docs-operation-type: operation
@ -745,19 +732,6 @@ paths:
type: array
items:
$ref: '#/components/schemas/Microsoft.OData.Service.Sample.TrippinInMemory.Models.Person'
links:
Friends:
operationId: Friends.Person.GetPerson
parameters:
UserName: $request.path.UserName
BestFriend:
operationId: Friends.Person.GetPerson
parameters:
UserName: $request.path.UserName
Trips:
operationId: Friends.Person.GetPerson
parameters:
UserName: $request.path.UserName
default:
$ref: '#/components/responses/error'
x-ms-docs-operation-type: operation
@ -883,19 +857,6 @@ paths:
type: array
items:
type: string
links:
Friends:
operationId: Friends.Person.GetPerson
parameters:
UserName: $request.path.UserName
BestFriend:
operationId: Friends.Person.GetPerson
parameters:
UserName: $request.path.UserName
Trips:
operationId: Friends.Person.GetPerson
parameters:
UserName: $request.path.UserName
default:
$ref: '#/components/responses/error'
x-ms-docs-operation-type: operation
@ -1157,11 +1118,6 @@ paths:
type: array
items:
$ref: '#/components/schemas/Microsoft.OData.Service.Sample.TrippinInMemory.Models.Trip'
links:
PlanItems:
operationId: Trips.Trip.GetTrip
parameters:
TripId: $request.path.TripId
default:
$ref: '#/components/responses/error'
x-ms-docs-operation-type: operation
@ -1308,11 +1264,6 @@ paths:
type: array
items:
type: string
links:
PlanItems:
operationId: Trips.Trip.GetTrip
parameters:
TripId: $request.path.TripId
default:
$ref: '#/components/responses/error'
x-ms-docs-operation-type: operation
@ -1458,19 +1409,6 @@ paths:
type: array
items:
$ref: '#/components/schemas/Microsoft.OData.Service.Sample.TrippinInMemory.Models.Person'
links:
Friends:
operationId: NewComePeople.Person.GetPerson
parameters:
UserName: $request.path.UserName
BestFriend:
operationId: NewComePeople.Person.GetPerson
parameters:
UserName: $request.path.UserName
Trips:
operationId: NewComePeople.Person.GetPerson
parameters:
UserName: $request.path.UserName
default:
$ref: '#/components/responses/error'
post:
@ -1556,19 +1494,6 @@ paths:
application/json:
schema:
$ref: '#/components/schemas/Microsoft.OData.Service.Sample.TrippinInMemory.Models.Person'
links:
Friends:
operationId: NewComePeople.Person.GetPerson
parameters:
UserName: $request.path.UserName
BestFriend:
operationId: NewComePeople.Person.GetPerson
parameters:
UserName: $request.path.UserName
Trips:
operationId: NewComePeople.Person.GetPerson
parameters:
UserName: $request.path.UserName
default:
$ref: '#/components/responses/error'
x-ms-docs-operation-type: operation
@ -1865,19 +1790,6 @@ paths:
type: array
items:
$ref: '#/components/schemas/Microsoft.OData.Service.Sample.TrippinInMemory.Models.Person'
links:
Friends:
operationId: Friends.Person.GetPerson
parameters:
UserName: $request.path.UserName
BestFriend:
operationId: Friends.Person.GetPerson
parameters:
UserName: $request.path.UserName
Trips:
operationId: Friends.Person.GetPerson
parameters:
UserName: $request.path.UserName
default:
$ref: '#/components/responses/error'
x-ms-docs-operation-type: operation
@ -2017,19 +1929,6 @@ paths:
type: array
items:
type: string
links:
Friends:
operationId: Friends.Person.GetPerson
parameters:
UserName: $request.path.UserName
BestFriend:
operationId: Friends.Person.GetPerson
parameters:
UserName: $request.path.UserName
Trips:
operationId: Friends.Person.GetPerson
parameters:
UserName: $request.path.UserName
default:
$ref: '#/components/responses/error'
x-ms-docs-operation-type: operation
@ -2351,11 +2250,6 @@ paths:
type: array
items:
$ref: '#/components/schemas/Microsoft.OData.Service.Sample.TrippinInMemory.Models.Trip'
links:
PlanItems:
operationId: Trips.Trip.GetTrip
parameters:
TripId: $request.path.TripId
default:
$ref: '#/components/responses/error'
x-ms-docs-operation-type: operation
@ -2523,11 +2417,6 @@ paths:
type: array
items:
type: string
links:
PlanItems:
operationId: Trips.Trip.GetTrip
parameters:
TripId: $request.path.TripId
default:
$ref: '#/components/responses/error'
x-ms-docs-operation-type: operation
@ -2688,19 +2577,6 @@ paths:
type: array
items:
$ref: '#/components/schemas/Microsoft.OData.Service.Sample.TrippinInMemory.Models.Person'
links:
Friends:
operationId: People.Person.GetPerson
parameters:
UserName: $request.path.UserName
BestFriend:
operationId: People.Person.GetPerson
parameters:
UserName: $request.path.UserName
Trips:
operationId: People.Person.GetPerson
parameters:
UserName: $request.path.UserName
default:
$ref: '#/components/responses/error'
post:
@ -2786,19 +2662,6 @@ paths:
application/json:
schema:
$ref: '#/components/schemas/Microsoft.OData.Service.Sample.TrippinInMemory.Models.Person'
links:
Friends:
operationId: People.Person.GetPerson
parameters:
UserName: $request.path.UserName
BestFriend:
operationId: People.Person.GetPerson
parameters:
UserName: $request.path.UserName
Trips:
operationId: People.Person.GetPerson
parameters:
UserName: $request.path.UserName
default:
$ref: '#/components/responses/error'
x-ms-docs-operation-type: operation
@ -3095,19 +2958,6 @@ paths:
type: array
items:
$ref: '#/components/schemas/Microsoft.OData.Service.Sample.TrippinInMemory.Models.Person'
links:
Friends:
operationId: Friends.Person.GetPerson
parameters:
UserName: $request.path.UserName
BestFriend:
operationId: Friends.Person.GetPerson
parameters:
UserName: $request.path.UserName
Trips:
operationId: Friends.Person.GetPerson
parameters:
UserName: $request.path.UserName
default:
$ref: '#/components/responses/error'
x-ms-docs-operation-type: operation
@ -3247,19 +3097,6 @@ paths:
type: array
items:
type: string
links:
Friends:
operationId: Friends.Person.GetPerson
parameters:
UserName: $request.path.UserName
BestFriend:
operationId: Friends.Person.GetPerson
parameters:
UserName: $request.path.UserName
Trips:
operationId: Friends.Person.GetPerson
parameters:
UserName: $request.path.UserName
default:
$ref: '#/components/responses/error'
x-ms-docs-operation-type: operation
@ -3581,11 +3418,6 @@ paths:
type: array
items:
$ref: '#/components/schemas/Microsoft.OData.Service.Sample.TrippinInMemory.Models.Trip'
links:
PlanItems:
operationId: Trips.Trip.GetTrip
parameters:
TripId: $request.path.TripId
default:
$ref: '#/components/responses/error'
x-ms-docs-operation-type: operation
@ -3753,11 +3585,6 @@ paths:
type: array
items:
type: string
links:
PlanItems:
operationId: Trips.Trip.GetTrip
parameters:
TripId: $request.path.TripId
default:
$ref: '#/components/responses/error'
x-ms-docs-operation-type: operation