diff --git a/docs/usage/openapi-client.md b/docs/usage/openapi-client.md
index 3f0b93f52e..2acd8f2fe6 100644
--- a/docs/usage/openapi-client.md
+++ b/docs/usage/openapi-client.md
@@ -39,7 +39,7 @@ The next steps describe how to generate a JSON:API client library and use our pa
5. Add the next line inside the **OpenApiReference** section in your project file:
```xml
- /GenerateExceptionClasses:false /AdditionalNamespaceUsages:JsonApiDotNetCore.OpenApi.Client.Exceptions
+ /GenerateExceptionClasses:false /AdditionalNamespaceUsages:JsonApiDotNetCore.OpenApi.Client
```
6. Add the following glue code to connect our package with your generated code.
@@ -77,7 +77,7 @@ The next steps describe how to generate a JSON:API client library and use our pa
["filter"] = "has(assignedTodoItems)",
["sort"] = "-lastName",
["page[size]"] = "5"
- });
+ }, null);
foreach (var person in getResponse.Data)
{
@@ -166,3 +166,34 @@ For example, the next section puts the generated code in a namespace and generat
/GenerateClientInterfaces:true
```
+
+## Headers and caching
+
+To use [ETags for caching](~/usage/caching.md), NSwag needs extra settings to make response headers accessible.
+Specify the following in the `` element of your project file:
+
+```
+/GenerateExceptionClasses:false /WrapResponses:true /GenerateResponseClasses:false /ResponseClass:ApiResponse /AdditionalNamespaceUsages:JsonApiDotNetCore.OpenApi.Client
+```
+
+This enables the following code, which is explained below:
+
+```c#
+var getResponse = await ApiResponse.TranslateAsync(() => apiClient.GetPersonCollectionAsync(null, null));
+string eTag = getResponse.Headers[HeaderNames.ETag].Single();
+Console.WriteLine($"Retrieved {getResponse.Result.Data.Count} people.");
+
+// wait some time...
+
+getResponse = await ApiResponse.TranslateAsync(() => apiClient.GetPersonCollectionAsync(null, eTag));
+
+if (getResponse is { StatusCode: (int)HttpStatusCode.NotModified, Result: null })
+{
+ Console.WriteLine("The HTTP response hasn't changed, so no response body was returned.");
+}
+```
+
+The response of the first API call contains both data and an ETag header, which is a fingerprint of the response.
+That ETag gets passed to the second API call. This enables the server to detect if something changed, which optimizes
+network usage: no data is sent back, unless is has changed.
+If you only want to ask whether data has changed without fetching it, use a HEAD request instead.
diff --git a/src/Examples/JsonApiDotNetCoreExample/GeneratedSwagger/JsonApiDotNetCoreExample.json b/src/Examples/JsonApiDotNetCoreExample/GeneratedSwagger/JsonApiDotNetCoreExample.json
index 40ace7117f..36dfff6ef6 100644
--- a/src/Examples/JsonApiDotNetCoreExample/GeneratedSwagger/JsonApiDotNetCoreExample.json
+++ b/src/Examples/JsonApiDotNetCoreExample/GeneratedSwagger/JsonApiDotNetCoreExample.json
@@ -30,11 +30,28 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
"description": "Successfully returns the found people, or an empty array if none were found.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ },
"content": {
"application/vnd.api+json": {
"schema": {
@@ -43,6 +60,18 @@
}
}
},
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
+ },
"400": {
"description": "The query string is invalid.",
"content": {
@@ -75,11 +104,48 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
- "description": "The operation completed successfully."
+ "description": "The operation completed successfully.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ "Content-Length": {
+ "description": "Size of the HTTP response body, in bytes.",
+ "required": true,
+ "schema": {
+ "type": "integer",
+ "format": "int64"
+ }
+ }
+ }
+ },
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
},
"400": {
"description": "The query string is invalid."
@@ -124,6 +190,16 @@
"responses": {
"201": {
"description": "The person was successfully created, which resulted in additional changes. The newly created person is returned.",
+ "headers": {
+ "Location": {
+ "description": "The URL at which the newly created person can be retrieved.",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "format": "uri"
+ }
+ }
+ },
"content": {
"application/vnd.api+json": {
"schema": {
@@ -207,11 +283,28 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
"description": "Successfully returns the found person.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ },
"content": {
"application/vnd.api+json": {
"schema": {
@@ -220,6 +313,18 @@
}
}
},
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
+ },
"400": {
"description": "The query string is invalid.",
"content": {
@@ -271,11 +376,48 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
- "description": "The operation completed successfully."
+ "description": "The operation completed successfully.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ "Content-Length": {
+ "description": "Size of the HTTP response body, in bytes.",
+ "required": true,
+ "schema": {
+ "type": "integer",
+ "format": "int64"
+ }
+ }
+ }
+ },
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
},
"400": {
"description": "The query string is invalid."
@@ -448,11 +590,28 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
"description": "Successfully returns the found todoItems, or an empty array if none were found.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ },
"content": {
"application/vnd.api+json": {
"schema": {
@@ -461,6 +620,18 @@
}
}
},
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
+ },
"400": {
"description": "The query string is invalid.",
"content": {
@@ -512,11 +683,48 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
- "description": "The operation completed successfully."
+ "description": "The operation completed successfully.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ "Content-Length": {
+ "description": "Size of the HTTP response body, in bytes.",
+ "required": true,
+ "schema": {
+ "type": "integer",
+ "format": "int64"
+ }
+ }
+ }
+ },
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
},
"400": {
"description": "The query string is invalid."
@@ -556,11 +764,28 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
"description": "Successfully returns the found todoItem identities, or an empty array if none were found.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ },
"content": {
"application/vnd.api+json": {
"schema": {
@@ -569,6 +794,18 @@
}
}
},
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
+ },
"400": {
"description": "The query string is invalid.",
"content": {
@@ -620,11 +857,48 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
- "description": "The operation completed successfully."
+ "description": "The operation completed successfully.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ "Content-Length": {
+ "description": "Size of the HTTP response body, in bytes.",
+ "required": true,
+ "schema": {
+ "type": "integer",
+ "format": "int64"
+ }
+ }
+ }
+ },
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
},
"400": {
"description": "The query string is invalid."
@@ -865,11 +1139,28 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
"description": "Successfully returns the found todoItems, or an empty array if none were found.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ },
"content": {
"application/vnd.api+json": {
"schema": {
@@ -878,6 +1169,18 @@
}
}
},
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
+ },
"400": {
"description": "The query string is invalid.",
"content": {
@@ -929,11 +1232,48 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
- "description": "The operation completed successfully."
+ "description": "The operation completed successfully.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ "Content-Length": {
+ "description": "Size of the HTTP response body, in bytes.",
+ "required": true,
+ "schema": {
+ "type": "integer",
+ "format": "int64"
+ }
+ }
+ }
+ },
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
},
"400": {
"description": "The query string is invalid."
@@ -973,11 +1313,28 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
"description": "Successfully returns the found todoItem identities, or an empty array if none were found.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ },
"content": {
"application/vnd.api+json": {
"schema": {
@@ -986,6 +1343,18 @@
}
}
},
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
+ },
"400": {
"description": "The query string is invalid.",
"content": {
@@ -1037,11 +1406,48 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
- "description": "The operation completed successfully."
+ "description": "The operation completed successfully.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ "Content-Length": {
+ "description": "Size of the HTTP response body, in bytes.",
+ "required": true,
+ "schema": {
+ "type": "integer",
+ "format": "int64"
+ }
+ }
+ }
+ },
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
},
"400": {
"description": "The query string is invalid."
@@ -1273,11 +1679,28 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
"description": "Successfully returns the found tags, or an empty array if none were found.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ },
"content": {
"application/vnd.api+json": {
"schema": {
@@ -1286,6 +1709,18 @@
}
}
},
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
+ },
"400": {
"description": "The query string is invalid.",
"content": {
@@ -1318,11 +1753,48 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
- "description": "The operation completed successfully."
+ "description": "The operation completed successfully.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ "Content-Length": {
+ "description": "Size of the HTTP response body, in bytes.",
+ "required": true,
+ "schema": {
+ "type": "integer",
+ "format": "int64"
+ }
+ }
+ }
+ },
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
},
"400": {
"description": "The query string is invalid."
@@ -1367,6 +1839,16 @@
"responses": {
"201": {
"description": "The tag was successfully created, which resulted in additional changes. The newly created tag is returned.",
+ "headers": {
+ "Location": {
+ "description": "The URL at which the newly created tag can be retrieved.",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "format": "uri"
+ }
+ }
+ },
"content": {
"application/vnd.api+json": {
"schema": {
@@ -1450,11 +1932,28 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
"description": "Successfully returns the found tag.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ },
"content": {
"application/vnd.api+json": {
"schema": {
@@ -1463,6 +1962,18 @@
}
}
},
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
+ },
"400": {
"description": "The query string is invalid.",
"content": {
@@ -1514,11 +2025,48 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
- "description": "The operation completed successfully."
+ "description": "The operation completed successfully.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ "Content-Length": {
+ "description": "Size of the HTTP response body, in bytes.",
+ "required": true,
+ "schema": {
+ "type": "integer",
+ "format": "int64"
+ }
+ }
+ }
+ },
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
},
"400": {
"description": "The query string is invalid."
@@ -1691,11 +2239,28 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
"description": "Successfully returns the found todoItems, or an empty array if none were found.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ },
"content": {
"application/vnd.api+json": {
"schema": {
@@ -1704,6 +2269,18 @@
}
}
},
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
+ },
"400": {
"description": "The query string is invalid.",
"content": {
@@ -1755,11 +2332,48 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
- "description": "The operation completed successfully."
+ "description": "The operation completed successfully.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ "Content-Length": {
+ "description": "Size of the HTTP response body, in bytes.",
+ "required": true,
+ "schema": {
+ "type": "integer",
+ "format": "int64"
+ }
+ }
+ }
+ },
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
},
"400": {
"description": "The query string is invalid."
@@ -1799,11 +2413,28 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
"description": "Successfully returns the found todoItem identities, or an empty array if none were found.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ },
"content": {
"application/vnd.api+json": {
"schema": {
@@ -1812,6 +2443,18 @@
}
}
},
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
+ },
"400": {
"description": "The query string is invalid.",
"content": {
@@ -1863,11 +2506,48 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
- "description": "The operation completed successfully."
+ "description": "The operation completed successfully.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ "Content-Length": {
+ "description": "Size of the HTTP response body, in bytes.",
+ "required": true,
+ "schema": {
+ "type": "integer",
+ "format": "int64"
+ }
+ }
+ }
+ },
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
},
"400": {
"description": "The query string is invalid."
@@ -2099,11 +2779,28 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
"description": "Successfully returns the found todoItems, or an empty array if none were found.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ },
"content": {
"application/vnd.api+json": {
"schema": {
@@ -2112,6 +2809,18 @@
}
}
},
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
+ },
"400": {
"description": "The query string is invalid.",
"content": {
@@ -2144,11 +2853,48 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
- "description": "The operation completed successfully."
+ "description": "The operation completed successfully.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ "Content-Length": {
+ "description": "Size of the HTTP response body, in bytes.",
+ "required": true,
+ "schema": {
+ "type": "integer",
+ "format": "int64"
+ }
+ }
+ }
+ },
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
},
"400": {
"description": "The query string is invalid."
@@ -2193,6 +2939,16 @@
"responses": {
"201": {
"description": "The todoItem was successfully created, which resulted in additional changes. The newly created todoItem is returned.",
+ "headers": {
+ "Location": {
+ "description": "The URL at which the newly created todoItem can be retrieved.",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "format": "uri"
+ }
+ }
+ },
"content": {
"application/vnd.api+json": {
"schema": {
@@ -2276,11 +3032,28 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
"description": "Successfully returns the found todoItem.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ },
"content": {
"application/vnd.api+json": {
"schema": {
@@ -2289,6 +3062,18 @@
}
}
},
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
+ },
"400": {
"description": "The query string is invalid.",
"content": {
@@ -2340,11 +3125,48 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
- "description": "The operation completed successfully."
+ "description": "The operation completed successfully.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ "Content-Length": {
+ "description": "Size of the HTTP response body, in bytes.",
+ "required": true,
+ "schema": {
+ "type": "integer",
+ "format": "int64"
+ }
+ }
+ }
+ },
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
},
"400": {
"description": "The query string is invalid."
@@ -2517,11 +3339,28 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
"description": "Successfully returns the found person, or `null` if it was not found.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ },
"content": {
"application/vnd.api+json": {
"schema": {
@@ -2530,6 +3369,18 @@
}
}
},
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
+ },
"400": {
"description": "The query string is invalid.",
"content": {
@@ -2581,11 +3432,48 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
- "description": "The operation completed successfully."
+ "description": "The operation completed successfully.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ "Content-Length": {
+ "description": "Size of the HTTP response body, in bytes.",
+ "required": true,
+ "schema": {
+ "type": "integer",
+ "format": "int64"
+ }
+ }
+ }
+ },
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
},
"400": {
"description": "The query string is invalid."
@@ -2625,11 +3513,28 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
"description": "Successfully returns the found person identity, or `null` if it was not found.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ },
"content": {
"application/vnd.api+json": {
"schema": {
@@ -2638,6 +3543,18 @@
}
}
},
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
+ },
"400": {
"description": "The query string is invalid.",
"content": {
@@ -2689,11 +3606,48 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
- "description": "The operation completed successfully."
+ "description": "The operation completed successfully.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ "Content-Length": {
+ "description": "Size of the HTTP response body, in bytes.",
+ "required": true,
+ "schema": {
+ "type": "integer",
+ "format": "int64"
+ }
+ }
+ }
+ },
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
},
"400": {
"description": "The query string is invalid."
@@ -2800,11 +3754,28 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
"description": "Successfully returns the found person, or `null` if it was not found.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ },
"content": {
"application/vnd.api+json": {
"schema": {
@@ -2813,6 +3784,18 @@
}
}
},
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
+ },
"400": {
"description": "The query string is invalid.",
"content": {
@@ -2864,11 +3847,48 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
- "description": "The operation completed successfully."
+ "description": "The operation completed successfully.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ "Content-Length": {
+ "description": "Size of the HTTP response body, in bytes.",
+ "required": true,
+ "schema": {
+ "type": "integer",
+ "format": "int64"
+ }
+ }
+ }
+ },
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
},
"400": {
"description": "The query string is invalid."
@@ -2908,11 +3928,28 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
"description": "Successfully returns the found person identity, or `null` if it was not found.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ },
"content": {
"application/vnd.api+json": {
"schema": {
@@ -2921,6 +3958,18 @@
}
}
},
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
+ },
"400": {
"description": "The query string is invalid.",
"content": {
@@ -2972,11 +4021,48 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
- "description": "The operation completed successfully."
+ "description": "The operation completed successfully.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ "Content-Length": {
+ "description": "Size of the HTTP response body, in bytes.",
+ "required": true,
+ "schema": {
+ "type": "integer",
+ "format": "int64"
+ }
+ }
+ }
+ },
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
},
"400": {
"description": "The query string is invalid."
@@ -3083,11 +4169,28 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
"description": "Successfully returns the found tags, or an empty array if none were found.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ },
"content": {
"application/vnd.api+json": {
"schema": {
@@ -3096,6 +4199,18 @@
}
}
},
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
+ },
"400": {
"description": "The query string is invalid.",
"content": {
@@ -3147,11 +4262,48 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
- "description": "The operation completed successfully."
+ "description": "The operation completed successfully.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ "Content-Length": {
+ "description": "Size of the HTTP response body, in bytes.",
+ "required": true,
+ "schema": {
+ "type": "integer",
+ "format": "int64"
+ }
+ }
+ }
+ },
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
},
"400": {
"description": "The query string is invalid."
@@ -3191,11 +4343,28 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
"description": "Successfully returns the found tag identities, or an empty array if none were found.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ },
"content": {
"application/vnd.api+json": {
"schema": {
@@ -3204,6 +4373,18 @@
}
}
},
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
+ },
"400": {
"description": "The query string is invalid.",
"content": {
@@ -3255,11 +4436,48 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
- "description": "The operation completed successfully."
+ "description": "The operation completed successfully.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ "Content-Length": {
+ "description": "Size of the HTTP response body, in bytes.",
+ "required": true,
+ "schema": {
+ "type": "integer",
+ "format": "int64"
+ }
+ }
+ }
+ },
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
},
"400": {
"description": "The query string is invalid."
diff --git a/src/Examples/JsonApiDotNetCoreExampleClient/JsonApiDotNetCoreExampleClient.csproj b/src/Examples/JsonApiDotNetCoreExampleClient/JsonApiDotNetCoreExampleClient.csproj
index 7d03f808b6..326827e86f 100644
--- a/src/Examples/JsonApiDotNetCoreExampleClient/JsonApiDotNetCoreExampleClient.csproj
+++ b/src/Examples/JsonApiDotNetCoreExampleClient/JsonApiDotNetCoreExampleClient.csproj
@@ -25,7 +25,7 @@
- /GenerateExceptionClasses:false /AdditionalNamespaceUsages:JsonApiDotNetCore.OpenApi.Client.Exceptions
+ /GenerateExceptionClasses:false /WrapResponses:true /GenerateResponseClasses:false /ResponseClass:ApiResponse /AdditionalNamespaceUsages:JsonApiDotNetCore.OpenApi.Client
diff --git a/src/Examples/JsonApiDotNetCoreExampleClient/Program.cs b/src/Examples/JsonApiDotNetCoreExampleClient/Program.cs
index a174a94747..7f3926f00c 100644
--- a/src/Examples/JsonApiDotNetCoreExampleClient/Program.cs
+++ b/src/Examples/JsonApiDotNetCoreExampleClient/Program.cs
@@ -1,5 +1,7 @@
+using System.Net;
using JsonApiDotNetCore.OpenApi.Client;
using JsonApiDotNetCoreExampleClient;
+using Microsoft.Net.Http.Headers;
#if DEBUG
using var httpClient = new HttpClient(new ColoredConsoleLogDelegatingHandler
@@ -12,17 +14,17 @@
var apiClient = new ExampleApiClient(httpClient);
-PersonCollectionResponseDocument getResponse = await apiClient.GetPersonCollectionAsync(new Dictionary
+ApiResponse getResponse1 = await GetPersonCollectionAsync(apiClient, null);
+ApiResponse getResponse2 = await GetPersonCollectionAsync(apiClient, getResponse1.Headers[HeaderNames.ETag].First());
+
+if (getResponse2 is { StatusCode: (int)HttpStatusCode.NotModified, Result: null })
{
- ["filter"] = "has(assignedTodoItems)",
- ["sort"] = "-lastName",
- ["page[size]"] = "5",
- ["include"] = "assignedTodoItems.tags"
-});
+ Console.WriteLine("The HTTP response hasn't changed, so no response body was returned.");
+}
-foreach (PersonDataInResponse person in getResponse.Data)
+foreach (PersonDataInResponse person in getResponse1.Result!.Data)
{
- PrintPerson(person, getResponse.Included);
+ PrintPerson(person, getResponse1.Result.Included);
}
var patchRequest = new PersonPatchRequestDocument
@@ -47,6 +49,17 @@
Console.WriteLine("Press any key to close.");
Console.ReadKey();
+static Task> GetPersonCollectionAsync(ExampleApiClient apiClient, string? ifNoneMatch)
+{
+ return ApiResponse.TranslateAsync(() => apiClient.GetPersonCollectionAsync(new Dictionary
+ {
+ ["filter"] = "has(assignedTodoItems)",
+ ["sort"] = "-lastName",
+ ["page[size]"] = "5",
+ ["include"] = "assignedTodoItems.tags"
+ }, ifNoneMatch));
+}
+
static void PrintPerson(PersonDataInResponse person, ICollection includes)
{
ToManyTodoItemInResponse assignedTodoItems = person.Relationships.AssignedTodoItems;
diff --git a/src/JsonApiDotNetCore.OpenApi.Client/Exceptions/ApiException.cs b/src/JsonApiDotNetCore.OpenApi.Client/ApiException.cs
similarity index 95%
rename from src/JsonApiDotNetCore.OpenApi.Client/Exceptions/ApiException.cs
rename to src/JsonApiDotNetCore.OpenApi.Client/ApiException.cs
index 7b89e5cc6a..d05aaeb111 100644
--- a/src/JsonApiDotNetCore.OpenApi.Client/Exceptions/ApiException.cs
+++ b/src/JsonApiDotNetCore.OpenApi.Client/ApiException.cs
@@ -3,7 +3,7 @@
// We cannot rely on generating ApiException as soon as we are generating multiple clients, see https://github.com/RicoSuter/NSwag/issues/2839#issuecomment-776647377.
// Instead, we configure NSwag to point to the exception below in the generated code.
-namespace JsonApiDotNetCore.OpenApi.Client.Exceptions;
+namespace JsonApiDotNetCore.OpenApi.Client;
[UsedImplicitly(ImplicitUseTargetFlags.Members)]
public class ApiException(string message, int statusCode, string? response, IReadOnlyDictionary> headers, Exception? innerException)
diff --git a/src/JsonApiDotNetCore.OpenApi.Client/ApiResponse.cs b/src/JsonApiDotNetCore.OpenApi.Client/ApiResponse.cs
index c144177d22..b719371d58 100644
--- a/src/JsonApiDotNetCore.OpenApi.Client/ApiResponse.cs
+++ b/src/JsonApiDotNetCore.OpenApi.Client/ApiResponse.cs
@@ -1,13 +1,14 @@
+using System.Net;
using JetBrains.Annotations;
-using JsonApiDotNetCore.OpenApi.Client.Exceptions;
-
-#pragma warning disable AV1008 // Class should not be static
namespace JsonApiDotNetCore.OpenApi.Client;
[PublicAPI]
-public static class ApiResponse
+public class ApiResponse(int statusCode, IReadOnlyDictionary> headers)
{
+ public int StatusCode { get; private set; } = statusCode;
+ public IReadOnlyDictionary> Headers { get; private set; } = headers;
+
public static async Task TranslateAsync(Func> operation)
where TResponse : class
{
@@ -17,7 +18,7 @@ public static class ApiResponse
{
return await operation().ConfigureAwait(false);
}
- catch (ApiException exception) when (exception.StatusCode == 204)
+ catch (ApiException exception) when (exception.StatusCode is (int)HttpStatusCode.NoContent or (int)HttpStatusCode.NotModified)
{
// Workaround for https://github.com/RicoSuter/NSwag/issues/2499
return null;
@@ -32,9 +33,46 @@ public static async Task TranslateAsync(Func operation)
{
await operation().ConfigureAwait(false);
}
- catch (ApiException exception) when (exception.StatusCode == 204)
+ catch (ApiException exception) when (exception.StatusCode is (int)HttpStatusCode.NoContent or (int)HttpStatusCode.NotModified)
{
// Workaround for https://github.com/RicoSuter/NSwag/issues/2499
}
}
+
+ public static async Task> TranslateAsync(Func>> operation)
+ where TResult : class
+ {
+ ArgumentGuard.NotNull(operation);
+
+ try
+ {
+ return (await operation().ConfigureAwait(false))!;
+ }
+ catch (ApiException exception) when (exception.StatusCode is (int)HttpStatusCode.NoContent or (int)HttpStatusCode.NotModified)
+ {
+ // Workaround for https://github.com/RicoSuter/NSwag/issues/2499
+ return new ApiResponse(exception.StatusCode, exception.Headers, null);
+ }
+ }
+
+ public static async Task TranslateAsync(Func> operation)
+ {
+ ArgumentGuard.NotNull(operation);
+
+ try
+ {
+ return await operation().ConfigureAwait(false);
+ }
+ catch (ApiException exception) when (exception.StatusCode is (int)HttpStatusCode.NoContent or (int)HttpStatusCode.NotModified)
+ {
+ // Workaround for https://github.com/RicoSuter/NSwag/issues/2499
+ return new ApiResponse(exception.StatusCode, exception.Headers);
+ }
+ }
+}
+
+[PublicAPI]
+public class ApiResponse(int statusCode, IReadOnlyDictionary> headers, TResult result) : ApiResponse(statusCode, headers)
+{
+ public TResult Result { get; private set; } = result;
}
diff --git a/src/JsonApiDotNetCore.OpenApi/OpenApiEndpointConvention.cs b/src/JsonApiDotNetCore.OpenApi/OpenApiEndpointConvention.cs
index bbeb4bbe6b..1a9a71a5ba 100644
--- a/src/JsonApiDotNetCore.OpenApi/OpenApiEndpointConvention.cs
+++ b/src/JsonApiDotNetCore.OpenApi/OpenApiEndpointConvention.cs
@@ -147,8 +147,11 @@ private static IEnumerable GetSuccessStatusCodesForEndpoint(Json
{
return endpoint switch
{
- JsonApiEndpoint.GetCollection or JsonApiEndpoint.GetSingle or JsonApiEndpoint.GetSecondary or JsonApiEndpoint.GetRelationship
- => [HttpStatusCode.OK],
+ JsonApiEndpoint.GetCollection or JsonApiEndpoint.GetSingle or JsonApiEndpoint.GetSecondary or JsonApiEndpoint.GetRelationship =>
+ [
+ HttpStatusCode.OK,
+ HttpStatusCode.NotModified
+ ],
JsonApiEndpoint.Post =>
[
HttpStatusCode.Created,
diff --git a/src/JsonApiDotNetCore.OpenApi/SwaggerComponents/JsonApiOperationDocumentationFilter.cs b/src/JsonApiDotNetCore.OpenApi/SwaggerComponents/JsonApiOperationDocumentationFilter.cs
index 34bf14a222..9539e9c666 100644
--- a/src/JsonApiDotNetCore.OpenApi/SwaggerComponents/JsonApiOperationDocumentationFilter.cs
+++ b/src/JsonApiDotNetCore.OpenApi/SwaggerComponents/JsonApiOperationDocumentationFilter.cs
@@ -7,6 +7,7 @@
using JsonApiDotNetCore.Resources;
using JsonApiDotNetCore.Resources.Annotations;
using Microsoft.AspNetCore.Mvc.ApiExplorer;
+using Microsoft.Net.Http.Headers;
using Microsoft.OpenApi.Any;
using Microsoft.OpenApi.Models;
using Swashbuckle.AspNetCore.SwaggerGen;
@@ -30,6 +31,7 @@ internal sealed class JsonApiOperationDocumentationFilter : IOperationFilter
"Compare the returned ETag HTTP header with an earlier one to determine if the response has changed since it was fetched.";
private const string TextCompletedSuccessfully = "The operation completed successfully.";
+ private const string TextNotModified = "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.";
private const string TextQueryStringBad = "The query string is invalid.";
private const string TextRequestBodyBad = "The request body is missing or malformed.";
private const string TextQueryStringOrRequestBodyBad = "The query string is invalid or the request body is missing or malformed.";
@@ -162,6 +164,10 @@ private static void ApplyGetPrimary(OpenApiOperation operation, ResourceType res
SetOperationSummary(operation, $"Retrieves a collection of {resourceType} without returning them.");
SetOperationRemarks(operation, TextCompareETag);
SetResponseDescription(operation.Responses, HttpStatusCode.OK, TextCompletedSuccessfully);
+ SetResponseHeaderETag(operation.Responses, HttpStatusCode.OK);
+ SetResponseHeaderContentLength(operation.Responses, HttpStatusCode.OK);
+ SetResponseDescription(operation.Responses, HttpStatusCode.NotModified, TextNotModified);
+ SetResponseHeaderETag(operation.Responses, HttpStatusCode.NotModified);
}
else
{
@@ -169,9 +175,14 @@ private static void ApplyGetPrimary(OpenApiOperation operation, ResourceType res
SetResponseDescription(operation.Responses, HttpStatusCode.OK,
$"Successfully returns the found {resourceType}, or an empty array if none were found.");
+
+ SetResponseHeaderETag(operation.Responses, HttpStatusCode.OK);
+ SetResponseDescription(operation.Responses, HttpStatusCode.NotModified, TextNotModified);
+ SetResponseHeaderETag(operation.Responses, HttpStatusCode.NotModified);
}
AddQueryStringParameters(operation, false);
+ AddRequestHeaderIfNoneMatch(operation);
SetResponseDescription(operation.Responses, HttpStatusCode.BadRequest, TextQueryStringBad);
}
else if (operation.Parameters.Count == 1)
@@ -183,15 +194,23 @@ private static void ApplyGetPrimary(OpenApiOperation operation, ResourceType res
SetOperationSummary(operation, $"Retrieves an individual {singularName} by its identifier without returning it.");
SetOperationRemarks(operation, TextCompareETag);
SetResponseDescription(operation.Responses, HttpStatusCode.OK, TextCompletedSuccessfully);
+ SetResponseHeaderETag(operation.Responses, HttpStatusCode.OK);
+ SetResponseHeaderContentLength(operation.Responses, HttpStatusCode.OK);
+ SetResponseDescription(operation.Responses, HttpStatusCode.NotModified, TextNotModified);
+ SetResponseHeaderETag(operation.Responses, HttpStatusCode.NotModified);
}
else
{
SetOperationSummary(operation, $"Retrieves an individual {singularName} by its identifier.");
SetResponseDescription(operation.Responses, HttpStatusCode.OK, $"Successfully returns the found {singularName}.");
+ SetResponseHeaderETag(operation.Responses, HttpStatusCode.OK);
+ SetResponseDescription(operation.Responses, HttpStatusCode.NotModified, TextNotModified);
+ SetResponseHeaderETag(operation.Responses, HttpStatusCode.NotModified);
}
SetParameterDescription(operation.Parameters[0], $"The identifier of the {singularName} to retrieve.");
AddQueryStringParameters(operation, false);
+ AddRequestHeaderIfNoneMatch(operation);
SetResponseDescription(operation.Responses, HttpStatusCode.BadRequest, TextQueryStringBad);
SetResponseDescription(operation.Responses, HttpStatusCode.NotFound, $"The {singularName} does not exist.");
}
@@ -208,6 +227,8 @@ private void ApplyPostResource(OpenApiOperation operation, ResourceType resource
SetResponseDescription(operation.Responses, HttpStatusCode.Created,
$"The {singularName} was successfully created, which resulted in additional changes. The newly created {singularName} is returned.");
+ SetResponseHeaderLocation(operation.Responses, HttpStatusCode.Created, singularName);
+
SetResponseDescription(operation.Responses, HttpStatusCode.NoContent,
$"The {singularName} was successfully created, which did not result in additional changes.");
@@ -271,6 +292,10 @@ relationship is HasOneAttribute
SetOperationRemarks(operation, TextCompareETag);
SetResponseDescription(operation.Responses, HttpStatusCode.OK, TextCompletedSuccessfully);
+ SetResponseHeaderETag(operation.Responses, HttpStatusCode.OK);
+ SetResponseHeaderContentLength(operation.Responses, HttpStatusCode.OK);
+ SetResponseDescription(operation.Responses, HttpStatusCode.NotModified, TextNotModified);
+ SetResponseHeaderETag(operation.Responses, HttpStatusCode.NotModified);
}
else
{
@@ -280,10 +305,15 @@ relationship is HasOneAttribute
relationship is HasOneAttribute
? $"Successfully returns the found {rightName}, or null if it was not found."
: $"Successfully returns the found {rightName}, or an empty array if none were found.");
+
+ SetResponseHeaderETag(operation.Responses, HttpStatusCode.OK);
+ SetResponseDescription(operation.Responses, HttpStatusCode.NotModified, TextNotModified);
+ SetResponseHeaderETag(operation.Responses, HttpStatusCode.NotModified);
}
SetParameterDescription(operation.Parameters[0], $"The identifier of the {singularLeftName} whose related {rightName} to retrieve.");
AddQueryStringParameters(operation, false);
+ AddRequestHeaderIfNoneMatch(operation);
SetResponseDescription(operation.Responses, HttpStatusCode.BadRequest, TextQueryStringBad);
SetResponseDescription(operation.Responses, HttpStatusCode.NotFound, $"The {singularLeftName} does not exist.");
}
@@ -303,6 +333,10 @@ relationship is HasOneAttribute
SetOperationRemarks(operation, TextCompareETag);
SetResponseDescription(operation.Responses, HttpStatusCode.OK, TextCompletedSuccessfully);
+ SetResponseHeaderETag(operation.Responses, HttpStatusCode.OK);
+ SetResponseHeaderContentLength(operation.Responses, HttpStatusCode.OK);
+ SetResponseDescription(operation.Responses, HttpStatusCode.NotModified, TextNotModified);
+ SetResponseHeaderETag(operation.Responses, HttpStatusCode.NotModified);
}
else
{
@@ -313,10 +347,15 @@ relationship is HasOneAttribute
relationship is HasOneAttribute
? $"Successfully returns the found {singularRightName} {ident}, or null if it was not found."
: $"Successfully returns the found {singularRightName} {ident}, or an empty array if none were found.");
+
+ SetResponseHeaderETag(operation.Responses, HttpStatusCode.OK);
+ SetResponseDescription(operation.Responses, HttpStatusCode.NotModified, TextNotModified);
+ SetResponseHeaderETag(operation.Responses, HttpStatusCode.NotModified);
}
SetParameterDescription(operation.Parameters[0], $"The identifier of the {singularLeftName} whose related {singularRightName} {ident} to retrieve.");
AddQueryStringParameters(operation, true);
+ AddRequestHeaderIfNoneMatch(operation);
SetResponseDescription(operation.Responses, HttpStatusCode.BadRequest, TextQueryStringBad);
SetResponseDescription(operation.Responses, HttpStatusCode.NotFound, $"The {singularLeftName} does not exist.");
}
@@ -420,6 +459,59 @@ private static void SetRequestBodyDescription(OpenApiRequestBody requestBody, st
}
private static void SetResponseDescription(OpenApiResponses responses, HttpStatusCode statusCode, string description)
+ {
+ OpenApiResponse response = GetOrAddResponse(responses, statusCode);
+ response.Description = XmlCommentsTextHelper.Humanize(description);
+ }
+
+ private static void SetResponseHeaderETag(OpenApiResponses responses, HttpStatusCode statusCode)
+ {
+ OpenApiResponse response = GetOrAddResponse(responses, statusCode);
+
+ response.Headers[HeaderNames.ETag] = new OpenApiHeader
+ {
+ Description = "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ Required = true,
+ Schema = new OpenApiSchema
+ {
+ Type = "string"
+ }
+ };
+ }
+
+ private static void SetResponseHeaderContentLength(OpenApiResponses responses, HttpStatusCode statusCode)
+ {
+ OpenApiResponse response = GetOrAddResponse(responses, statusCode);
+
+ response.Headers[HeaderNames.ContentLength] = new OpenApiHeader
+ {
+ Description = "Size of the HTTP response body, in bytes.",
+ Required = true,
+ Schema = new OpenApiSchema
+ {
+ Type = "integer",
+ Format = "int64"
+ }
+ };
+ }
+
+ private static void SetResponseHeaderLocation(OpenApiResponses responses, HttpStatusCode statusCode, string resourceName)
+ {
+ OpenApiResponse response = GetOrAddResponse(responses, statusCode);
+
+ response.Headers[HeaderNames.Location] = new OpenApiHeader
+ {
+ Description = $"The URL at which the newly created {resourceName} can be retrieved.",
+ Required = true,
+ Schema = new OpenApiSchema
+ {
+ Type = "string",
+ Format = "uri"
+ }
+ };
+ }
+
+ private static OpenApiResponse GetOrAddResponse(OpenApiResponses responses, HttpStatusCode statusCode)
{
string responseCode = ((int)statusCode).ToString();
@@ -429,7 +521,7 @@ private static void SetResponseDescription(OpenApiResponses responses, HttpStatu
responses.Add(responseCode, response);
}
- response.Description = XmlCommentsTextHelper.Humanize(description);
+ return response;
}
private static void AddQueryStringParameters(OpenApiOperation operation, bool isRelationshipEndpoint)
@@ -462,4 +554,18 @@ private static void AddQueryStringParameters(OpenApiOperation operation, bool is
Description = isRelationshipEndpoint ? RelationshipQueryStringParameters : ResourceQueryStringParameters
});
}
+
+ private static void AddRequestHeaderIfNoneMatch(OpenApiOperation operation)
+ {
+ operation.Parameters.Add(new OpenApiParameter
+ {
+ In = ParameterLocation.Header,
+ Name = "If-None-Match",
+ Description = "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ Schema = new OpenApiSchema
+ {
+ Type = "string"
+ }
+ });
+ }
}
diff --git a/test/OpenApiClientTests/LegacyClient/RequestTests.cs b/test/OpenApiClientTests/LegacyClient/RequestTests.cs
index dc4bdfc75e..7a8edc786f 100644
--- a/test/OpenApiClientTests/LegacyClient/RequestTests.cs
+++ b/test/OpenApiClientTests/LegacyClient/RequestTests.cs
@@ -23,7 +23,7 @@ public async Task Getting_resource_collection_produces_expected_request()
IOpenApiClient apiClient = new OpenApiClient(wrapper.HttpClient);
// Act
- _ = await ApiResponse.TranslateAsync(() => apiClient.GetFlightCollectionAsync(null));
+ _ = await ApiResponse.TranslateAsync(() => apiClient.GetFlightCollectionAsync(null, null));
// Assert
wrapper.Request.ShouldNotBeNull();
@@ -43,7 +43,7 @@ public async Task Getting_resource_produces_expected_request()
IOpenApiClient apiClient = new OpenApiClient(wrapper.HttpClient);
// Act
- _ = await ApiResponse.TranslateAsync(() => apiClient.GetFlightAsync(flightId, null));
+ _ = await ApiResponse.TranslateAsync(() => apiClient.GetFlightAsync(flightId, null, null));
// Assert
wrapper.Request.ShouldNotBeNull();
@@ -269,7 +269,7 @@ public async Task Getting_secondary_resource_produces_expected_request()
IOpenApiClient apiClient = new OpenApiClient(wrapper.HttpClient);
// Act
- _ = await ApiResponse.TranslateAsync(() => apiClient.GetFlightPurserAsync(flightId, null));
+ _ = await ApiResponse.TranslateAsync(() => apiClient.GetFlightPurserAsync(flightId, null, null));
// Assert
wrapper.Request.ShouldNotBeNull();
@@ -289,7 +289,7 @@ public async Task Getting_secondary_resources_produces_expected_request()
IOpenApiClient apiClient = new OpenApiClient(wrapper.HttpClient);
// Act
- _ = await ApiResponse.TranslateAsync(() => apiClient.GetFlightCabinCrewMembersAsync(flightId, null));
+ _ = await ApiResponse.TranslateAsync(() => apiClient.GetFlightCabinCrewMembersAsync(flightId, null, null));
// Assert
wrapper.Request.ShouldNotBeNull();
@@ -309,7 +309,7 @@ public async Task Getting_ToOne_relationship_produces_expected_request()
IOpenApiClient apiClient = new OpenApiClient(wrapper.HttpClient);
// Act
- _ = await ApiResponse.TranslateAsync(() => apiClient.GetFlightPurserRelationshipAsync(flightId, null));
+ _ = await ApiResponse.TranslateAsync(() => apiClient.GetFlightPurserRelationshipAsync(flightId, null, null));
// Assert
wrapper.Request.ShouldNotBeNull();
@@ -368,7 +368,7 @@ public async Task Getting_ToMany_relationship_produces_expected_request()
IOpenApiClient apiClient = new OpenApiClient(wrapper.HttpClient);
// Act
- _ = await ApiResponse.TranslateAsync(() => apiClient.GetFlightCabinCrewMembersRelationshipAsync(flightId, null));
+ _ = await ApiResponse.TranslateAsync(() => apiClient.GetFlightCabinCrewMembersRelationshipAsync(flightId, null, null));
// Assert
wrapper.Request.ShouldNotBeNull();
diff --git a/test/OpenApiClientTests/LegacyClient/ResponseTests.cs b/test/OpenApiClientTests/LegacyClient/ResponseTests.cs
index 99df1935fe..a93789dea1 100644
--- a/test/OpenApiClientTests/LegacyClient/ResponseTests.cs
+++ b/test/OpenApiClientTests/LegacyClient/ResponseTests.cs
@@ -2,7 +2,6 @@
using System.Net;
using FluentAssertions;
using JsonApiDotNetCore.OpenApi.Client;
-using JsonApiDotNetCore.OpenApi.Client.Exceptions;
using OpenApiClientTests.LegacyClient.GeneratedCode;
using TestBuildingBlocks;
using Xunit;
@@ -99,7 +98,7 @@ public async Task Getting_resource_collection_translates_response()
IOpenApiClient apiClient = new OpenApiClient(wrapper.HttpClient);
// Act
- FlightCollectionResponseDocument document = await apiClient.GetFlightCollectionAsync(null);
+ FlightCollectionResponseDocument document = await apiClient.GetFlightCollectionAsync(null, null);
// Assert
document.Jsonapi.Should().BeNull();
@@ -180,7 +179,7 @@ public async Task Getting_resource_translates_response()
IOpenApiClient apiClient = new OpenApiClient(wrapper.HttpClient);
// Act
- FlightPrimaryResponseDocument document = await apiClient.GetFlightAsync(flightId, null);
+ FlightPrimaryResponseDocument document = await apiClient.GetFlightAsync(flightId, null, null);
// Assert
document.Jsonapi.Should().BeNull();
@@ -218,7 +217,7 @@ public async Task Getting_unknown_resource_translates_error_response()
IOpenApiClient apiClient = new OpenApiClient(wrapper.HttpClient);
// Act
- Func> action = () => apiClient.GetFlightAsync(flightId, null);
+ Func> action = () => apiClient.GetFlightAsync(flightId, null, null);
// Assert
ApiException exception = (await action.Should().ThrowExactlyAsync>()).Which;
@@ -447,7 +446,7 @@ public async Task Getting_secondary_resource_translates_response()
IOpenApiClient apiClient = new OpenApiClient(wrapper.HttpClient);
// Act
- FlightAttendantSecondaryResponseDocument document = await apiClient.GetFlightPurserAsync(flightId, null);
+ FlightAttendantSecondaryResponseDocument document = await apiClient.GetFlightPurserAsync(flightId, null, null);
// Assert
document.Data.Should().NotBeNull();
@@ -479,7 +478,7 @@ public async Task Getting_nullable_secondary_resource_translates_response()
IOpenApiClient apiClient = new OpenApiClient(wrapper.HttpClient);
// Act
- NullableFlightAttendantSecondaryResponseDocument document = await apiClient.GetFlightBackupPurserAsync(flightId, null);
+ NullableFlightAttendantSecondaryResponseDocument document = await apiClient.GetFlightBackupPurserAsync(flightId, null, null);
// Assert
document.Data.Should().BeNull();
@@ -505,7 +504,7 @@ public async Task Getting_secondary_resources_translates_response()
IOpenApiClient apiClient = new OpenApiClient(wrapper.HttpClient);
// Act
- FlightAttendantCollectionResponseDocument document = await apiClient.GetFlightCabinCrewMembersAsync(flightId, null);
+ FlightAttendantCollectionResponseDocument document = await apiClient.GetFlightCabinCrewMembersAsync(flightId, null, null);
// Assert
document.Data.Should().BeEmpty();
@@ -531,7 +530,7 @@ public async Task Getting_nullable_ToOne_relationship_translates_response()
IOpenApiClient apiClient = new OpenApiClient(wrapper.HttpClient);
// Act
- NullableFlightAttendantIdentifierResponseDocument document = await apiClient.GetFlightBackupPurserRelationshipAsync(flightId, null);
+ NullableFlightAttendantIdentifierResponseDocument document = await apiClient.GetFlightBackupPurserRelationshipAsync(flightId, null, null);
// Assert
document.Data.Should().BeNull();
@@ -561,7 +560,7 @@ public async Task Getting_ToOne_relationship_translates_response()
IOpenApiClient apiClient = new OpenApiClient(wrapper.HttpClient);
// Act
- FlightAttendantIdentifierResponseDocument document = await apiClient.GetFlightPurserRelationshipAsync(flightId, null);
+ FlightAttendantIdentifierResponseDocument document = await apiClient.GetFlightPurserRelationshipAsync(flightId, null, null);
// Assert
document.Data.Should().NotBeNull();
@@ -617,7 +616,7 @@ public async Task Getting_ToMany_relationship_translates_response()
IOpenApiClient apiClient = new OpenApiClient(wrapper.HttpClient);
// Act
- FlightAttendantIdentifierCollectionResponseDocument document = await apiClient.GetFlightCabinCrewMembersRelationshipAsync(flightId, null);
+ FlightAttendantIdentifierCollectionResponseDocument document = await apiClient.GetFlightCabinCrewMembersRelationshipAsync(flightId, null, null);
// Assert
document.Data.Should().HaveCount(2);
diff --git a/test/OpenApiClientTests/LegacyClient/swagger.g.json b/test/OpenApiClientTests/LegacyClient/swagger.g.json
index 7736381583..fac1314112 100644
--- a/test/OpenApiClientTests/LegacyClient/swagger.g.json
+++ b/test/OpenApiClientTests/LegacyClient/swagger.g.json
@@ -30,11 +30,28 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
"description": "Successfully returns the found airplanes, or an empty array if none were found.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ },
"content": {
"application/vnd.api+json": {
"schema": {
@@ -43,6 +60,18 @@
}
}
},
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
+ },
"400": {
"description": "The query string is invalid.",
"content": {
@@ -75,11 +104,48 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
- "description": "The operation completed successfully."
+ "description": "The operation completed successfully.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ "Content-Length": {
+ "description": "Size of the HTTP response body, in bytes.",
+ "required": true,
+ "schema": {
+ "type": "integer",
+ "format": "int64"
+ }
+ }
+ }
+ },
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
},
"400": {
"description": "The query string is invalid."
@@ -124,6 +190,16 @@
"responses": {
"201": {
"description": "The airplane was successfully created, which resulted in additional changes. The newly created airplane is returned.",
+ "headers": {
+ "Location": {
+ "description": "The URL at which the newly created airplane can be retrieved.",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "format": "uri"
+ }
+ }
+ },
"content": {
"application/vnd.api+json": {
"schema": {
@@ -207,11 +283,28 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
"description": "Successfully returns the found airplane.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ },
"content": {
"application/vnd.api+json": {
"schema": {
@@ -220,6 +313,18 @@
}
}
},
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
+ },
"400": {
"description": "The query string is invalid.",
"content": {
@@ -271,11 +376,48 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
- "description": "The operation completed successfully."
+ "description": "The operation completed successfully.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ "Content-Length": {
+ "description": "Size of the HTTP response body, in bytes.",
+ "required": true,
+ "schema": {
+ "type": "integer",
+ "format": "int64"
+ }
+ }
+ }
+ },
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
},
"400": {
"description": "The query string is invalid."
@@ -448,11 +590,28 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
"description": "Successfully returns the found flights, or an empty array if none were found.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ },
"content": {
"application/vnd.api+json": {
"schema": {
@@ -461,6 +620,18 @@
}
}
},
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
+ },
"400": {
"description": "The query string is invalid.",
"content": {
@@ -512,11 +683,48 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
- "description": "The operation completed successfully."
+ "description": "The operation completed successfully.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ "Content-Length": {
+ "description": "Size of the HTTP response body, in bytes.",
+ "required": true,
+ "schema": {
+ "type": "integer",
+ "format": "int64"
+ }
+ }
+ }
+ },
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
},
"400": {
"description": "The query string is invalid."
@@ -556,11 +764,28 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
"description": "Successfully returns the found flight identities, or an empty array if none were found.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ },
"content": {
"application/vnd.api+json": {
"schema": {
@@ -569,6 +794,18 @@
}
}
},
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
+ },
"400": {
"description": "The query string is invalid.",
"content": {
@@ -620,11 +857,48 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
- "description": "The operation completed successfully."
+ "description": "The operation completed successfully.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ "Content-Length": {
+ "description": "Size of the HTTP response body, in bytes.",
+ "required": true,
+ "schema": {
+ "type": "integer",
+ "format": "int64"
+ }
+ }
+ }
+ },
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
},
"400": {
"description": "The query string is invalid."
@@ -856,11 +1130,28 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
"description": "Successfully returns the found flight-attendants, or an empty array if none were found.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ },
"content": {
"application/vnd.api+json": {
"schema": {
@@ -869,6 +1160,18 @@
}
}
},
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
+ },
"400": {
"description": "The query string is invalid.",
"content": {
@@ -901,11 +1204,48 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
- "description": "The operation completed successfully."
+ "description": "The operation completed successfully.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ "Content-Length": {
+ "description": "Size of the HTTP response body, in bytes.",
+ "required": true,
+ "schema": {
+ "type": "integer",
+ "format": "int64"
+ }
+ }
+ }
+ },
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
},
"400": {
"description": "The query string is invalid."
@@ -950,6 +1290,16 @@
"responses": {
"201": {
"description": "The flight-attendant was successfully created, which resulted in additional changes. The newly created flight-attendant is returned.",
+ "headers": {
+ "Location": {
+ "description": "The URL at which the newly created flight-attendant can be retrieved.",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "format": "uri"
+ }
+ }
+ },
"content": {
"application/vnd.api+json": {
"schema": {
@@ -1033,11 +1383,28 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
"description": "Successfully returns the found flight-attendant.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ },
"content": {
"application/vnd.api+json": {
"schema": {
@@ -1046,6 +1413,18 @@
}
}
},
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
+ },
"400": {
"description": "The query string is invalid.",
"content": {
@@ -1097,11 +1476,48 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
- "description": "The operation completed successfully."
+ "description": "The operation completed successfully.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ "Content-Length": {
+ "description": "Size of the HTTP response body, in bytes.",
+ "required": true,
+ "schema": {
+ "type": "integer",
+ "format": "int64"
+ }
+ }
+ }
+ },
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
},
"400": {
"description": "The query string is invalid."
@@ -1274,11 +1690,28 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
"description": "Successfully returns the found flights, or an empty array if none were found.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ },
"content": {
"application/vnd.api+json": {
"schema": {
@@ -1287,6 +1720,18 @@
}
}
},
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
+ },
"400": {
"description": "The query string is invalid.",
"content": {
@@ -1338,11 +1783,48 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
- "description": "The operation completed successfully."
+ "description": "The operation completed successfully.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ "Content-Length": {
+ "description": "Size of the HTTP response body, in bytes.",
+ "required": true,
+ "schema": {
+ "type": "integer",
+ "format": "int64"
+ }
+ }
+ }
+ },
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
},
"400": {
"description": "The query string is invalid."
@@ -1382,11 +1864,28 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
"description": "Successfully returns the found flight identities, or an empty array if none were found.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ },
"content": {
"application/vnd.api+json": {
"schema": {
@@ -1395,6 +1894,18 @@
}
}
},
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
+ },
"400": {
"description": "The query string is invalid.",
"content": {
@@ -1446,11 +1957,48 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
- "description": "The operation completed successfully."
+ "description": "The operation completed successfully.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ "Content-Length": {
+ "description": "Size of the HTTP response body, in bytes.",
+ "required": true,
+ "schema": {
+ "type": "integer",
+ "format": "int64"
+ }
+ }
+ }
+ },
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
},
"400": {
"description": "The query string is invalid."
@@ -1691,11 +2239,28 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
"description": "Successfully returns the found flights, or an empty array if none were found.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ },
"content": {
"application/vnd.api+json": {
"schema": {
@@ -1704,6 +2269,18 @@
}
}
},
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
+ },
"400": {
"description": "The query string is invalid.",
"content": {
@@ -1755,11 +2332,48 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
- "description": "The operation completed successfully."
+ "description": "The operation completed successfully.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ "Content-Length": {
+ "description": "Size of the HTTP response body, in bytes.",
+ "required": true,
+ "schema": {
+ "type": "integer",
+ "format": "int64"
+ }
+ }
+ }
+ },
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
},
"400": {
"description": "The query string is invalid."
@@ -1799,11 +2413,28 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
"description": "Successfully returns the found flight identities, or an empty array if none were found.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ },
"content": {
"application/vnd.api+json": {
"schema": {
@@ -1812,6 +2443,18 @@
}
}
},
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
+ },
"400": {
"description": "The query string is invalid.",
"content": {
@@ -1863,11 +2506,48 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
- "description": "The operation completed successfully."
+ "description": "The operation completed successfully.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ "Content-Length": {
+ "description": "Size of the HTTP response body, in bytes.",
+ "required": true,
+ "schema": {
+ "type": "integer",
+ "format": "int64"
+ }
+ }
+ }
+ },
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
},
"400": {
"description": "The query string is invalid."
@@ -2099,11 +2779,28 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
"description": "Successfully returns the found flights, or an empty array if none were found.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ },
"content": {
"application/vnd.api+json": {
"schema": {
@@ -2112,6 +2809,18 @@
}
}
},
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
+ },
"400": {
"description": "The query string is invalid.",
"content": {
@@ -2144,11 +2853,48 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
- "description": "The operation completed successfully."
+ "description": "The operation completed successfully.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ "Content-Length": {
+ "description": "Size of the HTTP response body, in bytes.",
+ "required": true,
+ "schema": {
+ "type": "integer",
+ "format": "int64"
+ }
+ }
+ }
+ },
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
},
"400": {
"description": "The query string is invalid."
@@ -2193,6 +2939,16 @@
"responses": {
"201": {
"description": "The flight was successfully created, which resulted in additional changes. The newly created flight is returned.",
+ "headers": {
+ "Location": {
+ "description": "The URL at which the newly created flight can be retrieved.",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "format": "uri"
+ }
+ }
+ },
"content": {
"application/vnd.api+json": {
"schema": {
@@ -2276,11 +3032,28 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
"description": "Successfully returns the found flight.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ },
"content": {
"application/vnd.api+json": {
"schema": {
@@ -2289,6 +3062,18 @@
}
}
},
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
+ },
"400": {
"description": "The query string is invalid.",
"content": {
@@ -2340,11 +3125,48 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
- "description": "The operation completed successfully."
+ "description": "The operation completed successfully.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ "Content-Length": {
+ "description": "Size of the HTTP response body, in bytes.",
+ "required": true,
+ "schema": {
+ "type": "integer",
+ "format": "int64"
+ }
+ }
+ }
+ },
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
},
"400": {
"description": "The query string is invalid."
@@ -2517,11 +3339,28 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
"description": "Successfully returns the found flight-attendant, or `null` if it was not found.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ },
"content": {
"application/vnd.api+json": {
"schema": {
@@ -2530,6 +3369,18 @@
}
}
},
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
+ },
"400": {
"description": "The query string is invalid.",
"content": {
@@ -2581,11 +3432,48 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
- "description": "The operation completed successfully."
+ "description": "The operation completed successfully.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ "Content-Length": {
+ "description": "Size of the HTTP response body, in bytes.",
+ "required": true,
+ "schema": {
+ "type": "integer",
+ "format": "int64"
+ }
+ }
+ }
+ },
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
},
"400": {
"description": "The query string is invalid."
@@ -2625,11 +3513,28 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
"description": "Successfully returns the found flight-attendant identity, or `null` if it was not found.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ },
"content": {
"application/vnd.api+json": {
"schema": {
@@ -2638,6 +3543,18 @@
}
}
},
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
+ },
"400": {
"description": "The query string is invalid.",
"content": {
@@ -2689,11 +3606,48 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
- "description": "The operation completed successfully."
+ "description": "The operation completed successfully.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ "Content-Length": {
+ "description": "Size of the HTTP response body, in bytes.",
+ "required": true,
+ "schema": {
+ "type": "integer",
+ "format": "int64"
+ }
+ }
+ }
+ },
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
},
"400": {
"description": "The query string is invalid."
@@ -2800,11 +3754,28 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
"description": "Successfully returns the found flight-attendants, or an empty array if none were found.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ },
"content": {
"application/vnd.api+json": {
"schema": {
@@ -2813,6 +3784,18 @@
}
}
},
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
+ },
"400": {
"description": "The query string is invalid.",
"content": {
@@ -2864,11 +3847,48 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
- "description": "The operation completed successfully."
+ "description": "The operation completed successfully.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ "Content-Length": {
+ "description": "Size of the HTTP response body, in bytes.",
+ "required": true,
+ "schema": {
+ "type": "integer",
+ "format": "int64"
+ }
+ }
+ }
+ },
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
},
"400": {
"description": "The query string is invalid."
@@ -2908,11 +3928,28 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
"description": "Successfully returns the found flight-attendant identities, or an empty array if none were found.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ },
"content": {
"application/vnd.api+json": {
"schema": {
@@ -2921,6 +3958,18 @@
}
}
},
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
+ },
"400": {
"description": "The query string is invalid.",
"content": {
@@ -2972,11 +4021,48 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
- "description": "The operation completed successfully."
+ "description": "The operation completed successfully.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ "Content-Length": {
+ "description": "Size of the HTTP response body, in bytes.",
+ "required": true,
+ "schema": {
+ "type": "integer",
+ "format": "int64"
+ }
+ }
+ }
+ },
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
},
"400": {
"description": "The query string is invalid."
@@ -3217,11 +4303,28 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
"description": "Successfully returns the found passengers, or an empty array if none were found.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ },
"content": {
"application/vnd.api+json": {
"schema": {
@@ -3230,6 +4333,18 @@
}
}
},
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
+ },
"400": {
"description": "The query string is invalid.",
"content": {
@@ -3281,11 +4396,48 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
- "description": "The operation completed successfully."
+ "description": "The operation completed successfully.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ "Content-Length": {
+ "description": "Size of the HTTP response body, in bytes.",
+ "required": true,
+ "schema": {
+ "type": "integer",
+ "format": "int64"
+ }
+ }
+ }
+ },
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
},
"400": {
"description": "The query string is invalid."
@@ -3325,11 +4477,28 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
"description": "Successfully returns the found passenger identities, or an empty array if none were found.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ },
"content": {
"application/vnd.api+json": {
"schema": {
@@ -3338,6 +4507,18 @@
}
}
},
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
+ },
"400": {
"description": "The query string is invalid.",
"content": {
@@ -3389,11 +4570,48 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
- "description": "The operation completed successfully."
+ "description": "The operation completed successfully.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ "Content-Length": {
+ "description": "Size of the HTTP response body, in bytes.",
+ "required": true,
+ "schema": {
+ "type": "integer",
+ "format": "int64"
+ }
+ }
+ }
+ },
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
},
"400": {
"description": "The query string is invalid."
@@ -3634,11 +4852,28 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
"description": "Successfully returns the found flight-attendant, or `null` if it was not found.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ },
"content": {
"application/vnd.api+json": {
"schema": {
@@ -3647,6 +4882,18 @@
}
}
},
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
+ },
"400": {
"description": "The query string is invalid.",
"content": {
@@ -3698,11 +4945,48 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
- "description": "The operation completed successfully."
+ "description": "The operation completed successfully.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ "Content-Length": {
+ "description": "Size of the HTTP response body, in bytes.",
+ "required": true,
+ "schema": {
+ "type": "integer",
+ "format": "int64"
+ }
+ }
+ }
+ },
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
},
"400": {
"description": "The query string is invalid."
@@ -3742,11 +5026,28 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
"description": "Successfully returns the found flight-attendant identity, or `null` if it was not found.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ },
"content": {
"application/vnd.api+json": {
"schema": {
@@ -3755,6 +5056,18 @@
}
}
},
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
+ },
"400": {
"description": "The query string is invalid.",
"content": {
@@ -3806,11 +5119,48 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
- "description": "The operation completed successfully."
+ "description": "The operation completed successfully.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ "Content-Length": {
+ "description": "Size of the HTTP response body, in bytes.",
+ "required": true,
+ "schema": {
+ "type": "integer",
+ "format": "int64"
+ }
+ }
+ }
+ },
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
},
"400": {
"description": "The query string is invalid."
@@ -3908,11 +5258,28 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
"description": "Successfully returns the found passengers, or an empty array if none were found.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ },
"content": {
"application/vnd.api+json": {
"schema": {
@@ -3921,6 +5288,18 @@
}
}
},
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
+ },
"400": {
"description": "The query string is invalid.",
"content": {
@@ -3953,11 +5332,48 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
- "description": "The operation completed successfully."
+ "description": "The operation completed successfully.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ "Content-Length": {
+ "description": "Size of the HTTP response body, in bytes.",
+ "required": true,
+ "schema": {
+ "type": "integer",
+ "format": "int64"
+ }
+ }
+ }
+ },
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
},
"400": {
"description": "The query string is invalid."
@@ -4002,6 +5418,16 @@
"responses": {
"201": {
"description": "The passenger was successfully created, which resulted in additional changes. The newly created passenger is returned.",
+ "headers": {
+ "Location": {
+ "description": "The URL at which the newly created passenger can be retrieved.",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "format": "uri"
+ }
+ }
+ },
"content": {
"application/vnd.api+json": {
"schema": {
@@ -4085,11 +5511,28 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
"description": "Successfully returns the found passenger.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ },
"content": {
"application/vnd.api+json": {
"schema": {
@@ -4098,6 +5541,18 @@
}
}
},
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
+ },
"400": {
"description": "The query string is invalid.",
"content": {
@@ -4149,11 +5604,48 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
- "description": "The operation completed successfully."
+ "description": "The operation completed successfully.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ "Content-Length": {
+ "description": "Size of the HTTP response body, in bytes.",
+ "required": true,
+ "schema": {
+ "type": "integer",
+ "format": "int64"
+ }
+ }
+ }
+ },
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
},
"400": {
"description": "The query string is invalid."
diff --git a/test/OpenApiClientTests/NamingConventions/CamelCase/swagger.g.json b/test/OpenApiClientTests/NamingConventions/CamelCase/swagger.g.json
index f67656daec..545231baa0 100644
--- a/test/OpenApiClientTests/NamingConventions/CamelCase/swagger.g.json
+++ b/test/OpenApiClientTests/NamingConventions/CamelCase/swagger.g.json
@@ -30,11 +30,28 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
"description": "Successfully returns the found staffMembers, or an empty array if none were found.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ },
"content": {
"application/vnd.api+json": {
"schema": {
@@ -43,6 +60,18 @@
}
}
},
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
+ },
"400": {
"description": "The query string is invalid.",
"content": {
@@ -75,11 +104,48 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
- "description": "The operation completed successfully."
+ "description": "The operation completed successfully.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ "Content-Length": {
+ "description": "Size of the HTTP response body, in bytes.",
+ "required": true,
+ "schema": {
+ "type": "integer",
+ "format": "int64"
+ }
+ }
+ }
+ },
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
},
"400": {
"description": "The query string is invalid."
@@ -124,6 +190,16 @@
"responses": {
"201": {
"description": "The staffMember was successfully created, which resulted in additional changes. The newly created staffMember is returned.",
+ "headers": {
+ "Location": {
+ "description": "The URL at which the newly created staffMember can be retrieved.",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "format": "uri"
+ }
+ }
+ },
"content": {
"application/vnd.api+json": {
"schema": {
@@ -207,11 +283,28 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
"description": "Successfully returns the found staffMember.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ },
"content": {
"application/vnd.api+json": {
"schema": {
@@ -220,6 +313,18 @@
}
}
},
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
+ },
"400": {
"description": "The query string is invalid.",
"content": {
@@ -271,11 +376,48 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
- "description": "The operation completed successfully."
+ "description": "The operation completed successfully.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ "Content-Length": {
+ "description": "Size of the HTTP response body, in bytes.",
+ "required": true,
+ "schema": {
+ "type": "integer",
+ "format": "int64"
+ }
+ }
+ }
+ },
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
},
"400": {
"description": "The query string is invalid."
@@ -439,11 +581,28 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
"description": "Successfully returns the found supermarkets, or an empty array if none were found.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ },
"content": {
"application/vnd.api+json": {
"schema": {
@@ -452,6 +611,18 @@
}
}
},
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
+ },
"400": {
"description": "The query string is invalid.",
"content": {
@@ -484,11 +655,48 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
- "description": "The operation completed successfully."
+ "description": "The operation completed successfully.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ "Content-Length": {
+ "description": "Size of the HTTP response body, in bytes.",
+ "required": true,
+ "schema": {
+ "type": "integer",
+ "format": "int64"
+ }
+ }
+ }
+ },
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
},
"400": {
"description": "The query string is invalid."
@@ -533,6 +741,16 @@
"responses": {
"201": {
"description": "The supermarket was successfully created, which resulted in additional changes. The newly created supermarket is returned.",
+ "headers": {
+ "Location": {
+ "description": "The URL at which the newly created supermarket can be retrieved.",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "format": "uri"
+ }
+ }
+ },
"content": {
"application/vnd.api+json": {
"schema": {
@@ -616,11 +834,28 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
"description": "Successfully returns the found supermarket.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ },
"content": {
"application/vnd.api+json": {
"schema": {
@@ -629,6 +864,18 @@
}
}
},
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
+ },
"400": {
"description": "The query string is invalid.",
"content": {
@@ -680,11 +927,48 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
- "description": "The operation completed successfully."
+ "description": "The operation completed successfully.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ "Content-Length": {
+ "description": "Size of the HTTP response body, in bytes.",
+ "required": true,
+ "schema": {
+ "type": "integer",
+ "format": "int64"
+ }
+ }
+ }
+ },
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
},
"400": {
"description": "The query string is invalid."
@@ -857,11 +1141,28 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
"description": "Successfully returns the found staffMember, or `null` if it was not found.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ },
"content": {
"application/vnd.api+json": {
"schema": {
@@ -870,6 +1171,18 @@
}
}
},
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
+ },
"400": {
"description": "The query string is invalid.",
"content": {
@@ -921,11 +1234,48 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
- "description": "The operation completed successfully."
+ "description": "The operation completed successfully.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ "Content-Length": {
+ "description": "Size of the HTTP response body, in bytes.",
+ "required": true,
+ "schema": {
+ "type": "integer",
+ "format": "int64"
+ }
+ }
+ }
+ },
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
},
"400": {
"description": "The query string is invalid."
@@ -965,11 +1315,28 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
"description": "Successfully returns the found staffMember identity, or `null` if it was not found.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ },
"content": {
"application/vnd.api+json": {
"schema": {
@@ -978,6 +1345,18 @@
}
}
},
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
+ },
"400": {
"description": "The query string is invalid.",
"content": {
@@ -1029,11 +1408,48 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
- "description": "The operation completed successfully."
+ "description": "The operation completed successfully.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ "Content-Length": {
+ "description": "Size of the HTTP response body, in bytes.",
+ "required": true,
+ "schema": {
+ "type": "integer",
+ "format": "int64"
+ }
+ }
+ }
+ },
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
},
"400": {
"description": "The query string is invalid."
@@ -1140,11 +1556,28 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
"description": "Successfully returns the found staffMembers, or an empty array if none were found.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ },
"content": {
"application/vnd.api+json": {
"schema": {
@@ -1153,6 +1586,18 @@
}
}
},
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
+ },
"400": {
"description": "The query string is invalid.",
"content": {
@@ -1204,11 +1649,48 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
- "description": "The operation completed successfully."
+ "description": "The operation completed successfully.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ "Content-Length": {
+ "description": "Size of the HTTP response body, in bytes.",
+ "required": true,
+ "schema": {
+ "type": "integer",
+ "format": "int64"
+ }
+ }
+ }
+ },
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
},
"400": {
"description": "The query string is invalid."
@@ -1248,11 +1730,28 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
"description": "Successfully returns the found staffMember identities, or an empty array if none were found.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ },
"content": {
"application/vnd.api+json": {
"schema": {
@@ -1261,6 +1760,18 @@
}
}
},
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
+ },
"400": {
"description": "The query string is invalid.",
"content": {
@@ -1312,11 +1823,48 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
- "description": "The operation completed successfully."
+ "description": "The operation completed successfully.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ "Content-Length": {
+ "description": "Size of the HTTP response body, in bytes.",
+ "required": true,
+ "schema": {
+ "type": "integer",
+ "format": "int64"
+ }
+ }
+ }
+ },
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
},
"400": {
"description": "The query string is invalid."
@@ -1557,11 +2105,28 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
"description": "Successfully returns the found staffMember, or `null` if it was not found.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ },
"content": {
"application/vnd.api+json": {
"schema": {
@@ -1570,6 +2135,18 @@
}
}
},
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
+ },
"400": {
"description": "The query string is invalid.",
"content": {
@@ -1621,11 +2198,48 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
- "description": "The operation completed successfully."
+ "description": "The operation completed successfully.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ "Content-Length": {
+ "description": "Size of the HTTP response body, in bytes.",
+ "required": true,
+ "schema": {
+ "type": "integer",
+ "format": "int64"
+ }
+ }
+ }
+ },
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
},
"400": {
"description": "The query string is invalid."
@@ -1665,11 +2279,28 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
"description": "Successfully returns the found staffMember identity, or `null` if it was not found.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ },
"content": {
"application/vnd.api+json": {
"schema": {
@@ -1678,6 +2309,18 @@
}
}
},
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
+ },
"400": {
"description": "The query string is invalid.",
"content": {
@@ -1729,11 +2372,48 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
- "description": "The operation completed successfully."
+ "description": "The operation completed successfully.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ "Content-Length": {
+ "description": "Size of the HTTP response body, in bytes.",
+ "required": true,
+ "schema": {
+ "type": "integer",
+ "format": "int64"
+ }
+ }
+ }
+ },
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
},
"400": {
"description": "The query string is invalid."
diff --git a/test/OpenApiClientTests/NamingConventions/KebabCase/swagger.g.json b/test/OpenApiClientTests/NamingConventions/KebabCase/swagger.g.json
index 88f20b6310..22e59e773f 100644
--- a/test/OpenApiClientTests/NamingConventions/KebabCase/swagger.g.json
+++ b/test/OpenApiClientTests/NamingConventions/KebabCase/swagger.g.json
@@ -30,11 +30,28 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
"description": "Successfully returns the found staff-members, or an empty array if none were found.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ },
"content": {
"application/vnd.api+json": {
"schema": {
@@ -43,6 +60,18 @@
}
}
},
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
+ },
"400": {
"description": "The query string is invalid.",
"content": {
@@ -75,11 +104,48 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
- "description": "The operation completed successfully."
+ "description": "The operation completed successfully.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ "Content-Length": {
+ "description": "Size of the HTTP response body, in bytes.",
+ "required": true,
+ "schema": {
+ "type": "integer",
+ "format": "int64"
+ }
+ }
+ }
+ },
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
},
"400": {
"description": "The query string is invalid."
@@ -124,6 +190,16 @@
"responses": {
"201": {
"description": "The staff-member was successfully created, which resulted in additional changes. The newly created staff-member is returned.",
+ "headers": {
+ "Location": {
+ "description": "The URL at which the newly created staff-member can be retrieved.",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "format": "uri"
+ }
+ }
+ },
"content": {
"application/vnd.api+json": {
"schema": {
@@ -207,11 +283,28 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
"description": "Successfully returns the found staff-member.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ },
"content": {
"application/vnd.api+json": {
"schema": {
@@ -220,6 +313,18 @@
}
}
},
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
+ },
"400": {
"description": "The query string is invalid.",
"content": {
@@ -271,11 +376,48 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
- "description": "The operation completed successfully."
+ "description": "The operation completed successfully.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ "Content-Length": {
+ "description": "Size of the HTTP response body, in bytes.",
+ "required": true,
+ "schema": {
+ "type": "integer",
+ "format": "int64"
+ }
+ }
+ }
+ },
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
},
"400": {
"description": "The query string is invalid."
@@ -439,11 +581,28 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
"description": "Successfully returns the found supermarkets, or an empty array if none were found.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ },
"content": {
"application/vnd.api+json": {
"schema": {
@@ -452,6 +611,18 @@
}
}
},
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
+ },
"400": {
"description": "The query string is invalid.",
"content": {
@@ -484,11 +655,48 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
- "description": "The operation completed successfully."
+ "description": "The operation completed successfully.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ "Content-Length": {
+ "description": "Size of the HTTP response body, in bytes.",
+ "required": true,
+ "schema": {
+ "type": "integer",
+ "format": "int64"
+ }
+ }
+ }
+ },
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
},
"400": {
"description": "The query string is invalid."
@@ -533,6 +741,16 @@
"responses": {
"201": {
"description": "The supermarket was successfully created, which resulted in additional changes. The newly created supermarket is returned.",
+ "headers": {
+ "Location": {
+ "description": "The URL at which the newly created supermarket can be retrieved.",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "format": "uri"
+ }
+ }
+ },
"content": {
"application/vnd.api+json": {
"schema": {
@@ -616,11 +834,28 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
"description": "Successfully returns the found supermarket.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ },
"content": {
"application/vnd.api+json": {
"schema": {
@@ -629,6 +864,18 @@
}
}
},
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
+ },
"400": {
"description": "The query string is invalid.",
"content": {
@@ -680,11 +927,48 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
- "description": "The operation completed successfully."
+ "description": "The operation completed successfully.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ "Content-Length": {
+ "description": "Size of the HTTP response body, in bytes.",
+ "required": true,
+ "schema": {
+ "type": "integer",
+ "format": "int64"
+ }
+ }
+ }
+ },
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
},
"400": {
"description": "The query string is invalid."
@@ -857,11 +1141,28 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
"description": "Successfully returns the found staff-member, or `null` if it was not found.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ },
"content": {
"application/vnd.api+json": {
"schema": {
@@ -870,6 +1171,18 @@
}
}
},
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
+ },
"400": {
"description": "The query string is invalid.",
"content": {
@@ -921,11 +1234,48 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
- "description": "The operation completed successfully."
+ "description": "The operation completed successfully.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ "Content-Length": {
+ "description": "Size of the HTTP response body, in bytes.",
+ "required": true,
+ "schema": {
+ "type": "integer",
+ "format": "int64"
+ }
+ }
+ }
+ },
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
},
"400": {
"description": "The query string is invalid."
@@ -965,11 +1315,28 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
"description": "Successfully returns the found staff-member identity, or `null` if it was not found.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ },
"content": {
"application/vnd.api+json": {
"schema": {
@@ -978,6 +1345,18 @@
}
}
},
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
+ },
"400": {
"description": "The query string is invalid.",
"content": {
@@ -1029,11 +1408,48 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
- "description": "The operation completed successfully."
+ "description": "The operation completed successfully.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ "Content-Length": {
+ "description": "Size of the HTTP response body, in bytes.",
+ "required": true,
+ "schema": {
+ "type": "integer",
+ "format": "int64"
+ }
+ }
+ }
+ },
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
},
"400": {
"description": "The query string is invalid."
@@ -1140,11 +1556,28 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
"description": "Successfully returns the found staff-members, or an empty array if none were found.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ },
"content": {
"application/vnd.api+json": {
"schema": {
@@ -1153,6 +1586,18 @@
}
}
},
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
+ },
"400": {
"description": "The query string is invalid.",
"content": {
@@ -1204,11 +1649,48 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
- "description": "The operation completed successfully."
+ "description": "The operation completed successfully.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ "Content-Length": {
+ "description": "Size of the HTTP response body, in bytes.",
+ "required": true,
+ "schema": {
+ "type": "integer",
+ "format": "int64"
+ }
+ }
+ }
+ },
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
},
"400": {
"description": "The query string is invalid."
@@ -1248,11 +1730,28 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
"description": "Successfully returns the found staff-member identities, or an empty array if none were found.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ },
"content": {
"application/vnd.api+json": {
"schema": {
@@ -1261,6 +1760,18 @@
}
}
},
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
+ },
"400": {
"description": "The query string is invalid.",
"content": {
@@ -1312,11 +1823,48 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
- "description": "The operation completed successfully."
+ "description": "The operation completed successfully.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ "Content-Length": {
+ "description": "Size of the HTTP response body, in bytes.",
+ "required": true,
+ "schema": {
+ "type": "integer",
+ "format": "int64"
+ }
+ }
+ }
+ },
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
},
"400": {
"description": "The query string is invalid."
@@ -1557,11 +2105,28 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
"description": "Successfully returns the found staff-member, or `null` if it was not found.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ },
"content": {
"application/vnd.api+json": {
"schema": {
@@ -1570,6 +2135,18 @@
}
}
},
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
+ },
"400": {
"description": "The query string is invalid.",
"content": {
@@ -1621,11 +2198,48 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
- "description": "The operation completed successfully."
+ "description": "The operation completed successfully.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ "Content-Length": {
+ "description": "Size of the HTTP response body, in bytes.",
+ "required": true,
+ "schema": {
+ "type": "integer",
+ "format": "int64"
+ }
+ }
+ }
+ },
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
},
"400": {
"description": "The query string is invalid."
@@ -1665,11 +2279,28 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
"description": "Successfully returns the found staff-member identity, or `null` if it was not found.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ },
"content": {
"application/vnd.api+json": {
"schema": {
@@ -1678,6 +2309,18 @@
}
}
},
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
+ },
"400": {
"description": "The query string is invalid.",
"content": {
@@ -1729,11 +2372,48 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
- "description": "The operation completed successfully."
+ "description": "The operation completed successfully.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ "Content-Length": {
+ "description": "Size of the HTTP response body, in bytes.",
+ "required": true,
+ "schema": {
+ "type": "integer",
+ "format": "int64"
+ }
+ }
+ }
+ },
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
},
"400": {
"description": "The query string is invalid."
diff --git a/test/OpenApiClientTests/NamingConventions/PascalCase/swagger.g.json b/test/OpenApiClientTests/NamingConventions/PascalCase/swagger.g.json
index 6922cbb387..384bb5017f 100644
--- a/test/OpenApiClientTests/NamingConventions/PascalCase/swagger.g.json
+++ b/test/OpenApiClientTests/NamingConventions/PascalCase/swagger.g.json
@@ -30,11 +30,28 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
"description": "Successfully returns the found StaffMembers, or an empty array if none were found.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ },
"content": {
"application/vnd.api+json": {
"schema": {
@@ -43,6 +60,18 @@
}
}
},
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
+ },
"400": {
"description": "The query string is invalid.",
"content": {
@@ -75,11 +104,48 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
- "description": "The operation completed successfully."
+ "description": "The operation completed successfully.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ "Content-Length": {
+ "description": "Size of the HTTP response body, in bytes.",
+ "required": true,
+ "schema": {
+ "type": "integer",
+ "format": "int64"
+ }
+ }
+ }
+ },
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
},
"400": {
"description": "The query string is invalid."
@@ -124,6 +190,16 @@
"responses": {
"201": {
"description": "The StaffMember was successfully created, which resulted in additional changes. The newly created StaffMember is returned.",
+ "headers": {
+ "Location": {
+ "description": "The URL at which the newly created StaffMember can be retrieved.",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "format": "uri"
+ }
+ }
+ },
"content": {
"application/vnd.api+json": {
"schema": {
@@ -207,11 +283,28 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
"description": "Successfully returns the found StaffMember.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ },
"content": {
"application/vnd.api+json": {
"schema": {
@@ -220,6 +313,18 @@
}
}
},
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
+ },
"400": {
"description": "The query string is invalid.",
"content": {
@@ -271,11 +376,48 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
- "description": "The operation completed successfully."
+ "description": "The operation completed successfully.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ "Content-Length": {
+ "description": "Size of the HTTP response body, in bytes.",
+ "required": true,
+ "schema": {
+ "type": "integer",
+ "format": "int64"
+ }
+ }
+ }
+ },
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
},
"400": {
"description": "The query string is invalid."
@@ -439,11 +581,28 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
"description": "Successfully returns the found Supermarkets, or an empty array if none were found.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ },
"content": {
"application/vnd.api+json": {
"schema": {
@@ -452,6 +611,18 @@
}
}
},
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
+ },
"400": {
"description": "The query string is invalid.",
"content": {
@@ -484,11 +655,48 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
- "description": "The operation completed successfully."
+ "description": "The operation completed successfully.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ "Content-Length": {
+ "description": "Size of the HTTP response body, in bytes.",
+ "required": true,
+ "schema": {
+ "type": "integer",
+ "format": "int64"
+ }
+ }
+ }
+ },
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
},
"400": {
"description": "The query string is invalid."
@@ -533,6 +741,16 @@
"responses": {
"201": {
"description": "The Supermarket was successfully created, which resulted in additional changes. The newly created Supermarket is returned.",
+ "headers": {
+ "Location": {
+ "description": "The URL at which the newly created Supermarket can be retrieved.",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "format": "uri"
+ }
+ }
+ },
"content": {
"application/vnd.api+json": {
"schema": {
@@ -616,11 +834,28 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
"description": "Successfully returns the found Supermarket.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ },
"content": {
"application/vnd.api+json": {
"schema": {
@@ -629,6 +864,18 @@
}
}
},
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
+ },
"400": {
"description": "The query string is invalid.",
"content": {
@@ -680,11 +927,48 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
- "description": "The operation completed successfully."
+ "description": "The operation completed successfully.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ "Content-Length": {
+ "description": "Size of the HTTP response body, in bytes.",
+ "required": true,
+ "schema": {
+ "type": "integer",
+ "format": "int64"
+ }
+ }
+ }
+ },
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
},
"400": {
"description": "The query string is invalid."
@@ -857,11 +1141,28 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
"description": "Successfully returns the found StaffMember, or `null` if it was not found.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ },
"content": {
"application/vnd.api+json": {
"schema": {
@@ -870,6 +1171,18 @@
}
}
},
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
+ },
"400": {
"description": "The query string is invalid.",
"content": {
@@ -921,11 +1234,48 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
- "description": "The operation completed successfully."
+ "description": "The operation completed successfully.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ "Content-Length": {
+ "description": "Size of the HTTP response body, in bytes.",
+ "required": true,
+ "schema": {
+ "type": "integer",
+ "format": "int64"
+ }
+ }
+ }
+ },
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
},
"400": {
"description": "The query string is invalid."
@@ -965,11 +1315,28 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
"description": "Successfully returns the found StaffMember identity, or `null` if it was not found.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ },
"content": {
"application/vnd.api+json": {
"schema": {
@@ -978,6 +1345,18 @@
}
}
},
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
+ },
"400": {
"description": "The query string is invalid.",
"content": {
@@ -1029,11 +1408,48 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
- "description": "The operation completed successfully."
+ "description": "The operation completed successfully.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ "Content-Length": {
+ "description": "Size of the HTTP response body, in bytes.",
+ "required": true,
+ "schema": {
+ "type": "integer",
+ "format": "int64"
+ }
+ }
+ }
+ },
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
},
"400": {
"description": "The query string is invalid."
@@ -1140,11 +1556,28 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
"description": "Successfully returns the found StaffMembers, or an empty array if none were found.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ },
"content": {
"application/vnd.api+json": {
"schema": {
@@ -1153,6 +1586,18 @@
}
}
},
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
+ },
"400": {
"description": "The query string is invalid.",
"content": {
@@ -1204,11 +1649,48 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
- "description": "The operation completed successfully."
+ "description": "The operation completed successfully.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ "Content-Length": {
+ "description": "Size of the HTTP response body, in bytes.",
+ "required": true,
+ "schema": {
+ "type": "integer",
+ "format": "int64"
+ }
+ }
+ }
+ },
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
},
"400": {
"description": "The query string is invalid."
@@ -1248,11 +1730,28 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
"description": "Successfully returns the found StaffMember identities, or an empty array if none were found.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ },
"content": {
"application/vnd.api+json": {
"schema": {
@@ -1261,6 +1760,18 @@
}
}
},
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
+ },
"400": {
"description": "The query string is invalid.",
"content": {
@@ -1312,11 +1823,48 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
- "description": "The operation completed successfully."
+ "description": "The operation completed successfully.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ "Content-Length": {
+ "description": "Size of the HTTP response body, in bytes.",
+ "required": true,
+ "schema": {
+ "type": "integer",
+ "format": "int64"
+ }
+ }
+ }
+ },
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
},
"400": {
"description": "The query string is invalid."
@@ -1557,11 +2105,28 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
"description": "Successfully returns the found StaffMember, or `null` if it was not found.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ },
"content": {
"application/vnd.api+json": {
"schema": {
@@ -1570,6 +2135,18 @@
}
}
},
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
+ },
"400": {
"description": "The query string is invalid.",
"content": {
@@ -1621,11 +2198,48 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
- "description": "The operation completed successfully."
+ "description": "The operation completed successfully.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ "Content-Length": {
+ "description": "Size of the HTTP response body, in bytes.",
+ "required": true,
+ "schema": {
+ "type": "integer",
+ "format": "int64"
+ }
+ }
+ }
+ },
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
},
"400": {
"description": "The query string is invalid."
@@ -1665,11 +2279,28 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
"description": "Successfully returns the found StaffMember identity, or `null` if it was not found.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ },
"content": {
"application/vnd.api+json": {
"schema": {
@@ -1678,6 +2309,18 @@
}
}
},
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
+ },
"400": {
"description": "The query string is invalid.",
"content": {
@@ -1729,11 +2372,48 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
- "description": "The operation completed successfully."
+ "description": "The operation completed successfully.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ "Content-Length": {
+ "description": "Size of the HTTP response body, in bytes.",
+ "required": true,
+ "schema": {
+ "type": "integer",
+ "format": "int64"
+ }
+ }
+ }
+ },
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
},
"400": {
"description": "The query string is invalid."
diff --git a/test/OpenApiClientTests/OpenApiClientTests.csproj b/test/OpenApiClientTests/OpenApiClientTests.csproj
index e849696f0c..6d2fb45151 100644
--- a/test/OpenApiClientTests/OpenApiClientTests.csproj
+++ b/test/OpenApiClientTests/OpenApiClientTests.csproj
@@ -28,56 +28,56 @@
OpenApiClient
OpenApiClient.cs
NSwagCSharp
- /GenerateClientInterfaces:true /ClientClassAccessModifier:internal /GenerateExceptionClasses:false /AdditionalNamespaceUsages:JsonApiDotNetCore.OpenApi.Client.Exceptions
+ /GenerateClientInterfaces:true /ClientClassAccessModifier:internal /GenerateExceptionClasses:false /AdditionalNamespaceUsages:JsonApiDotNetCore.OpenApi.Client
OpenApiClientTests.NamingConventions.KebabCase.GeneratedCode
KebabCaseClient
KebabCaseClient.cs
NSwagCSharp
- /ClientClassAccessModifier:internal /GenerateExceptionClasses:false /AdditionalNamespaceUsages:JsonApiDotNetCore.OpenApi.Client.Exceptions
+ /ClientClassAccessModifier:internal /GenerateExceptionClasses:false /AdditionalNamespaceUsages:JsonApiDotNetCore.OpenApi.Client
OpenApiClientTests.NamingConventions.CamelCase.GeneratedCode
CamelCaseClient
CamelCaseClient.cs
NSwagCSharp
- /ClientClassAccessModifier:internal /GenerateExceptionClasses:false /AdditionalNamespaceUsages:JsonApiDotNetCore.OpenApi.Client.Exceptions
+ /ClientClassAccessModifier:internal /GenerateExceptionClasses:false /AdditionalNamespaceUsages:JsonApiDotNetCore.OpenApi.Client
OpenApiClientTests.NamingConventions.PascalCase.GeneratedCode
PascalCaseClient
PascalCaseClient.cs
NSwagCSharp
- /ClientClassAccessModifier:internal /GenerateExceptionClasses:false /AdditionalNamespaceUsages:JsonApiDotNetCore.OpenApi.Client.Exceptions
+ /ClientClassAccessModifier:internal /GenerateExceptionClasses:false /AdditionalNamespaceUsages:JsonApiDotNetCore.OpenApi.Client
NrtOffMsvOffClient
NrtOffMsvOffClient.cs
NSwagCSharp
OpenApiClientTests.ResourceFieldValidation.NullableReferenceTypesOff.ModelStateValidationOff.GeneratedCode
- /ClientClassAccessModifier:internal /GenerateExceptionClasses:false /AdditionalNamespaceUsages:JsonApiDotNetCore.OpenApi.Client.Exceptions /GenerateNullableReferenceTypes:false
+ /ClientClassAccessModifier:internal /GenerateExceptionClasses:false /AdditionalNamespaceUsages:JsonApiDotNetCore.OpenApi.Client /GenerateNullableReferenceTypes:false
NrtOffMsvOnClient
NrtOffMsvOnClient.cs
NSwagCSharp
OpenApiClientTests.ResourceFieldValidation.NullableReferenceTypesOff.ModelStateValidationOn.GeneratedCode
- /ClientClassAccessModifier:internal /GenerateExceptionClasses:false /AdditionalNamespaceUsages:JsonApiDotNetCore.OpenApi.Client.Exceptions /GenerateNullableReferenceTypes:false
+ /ClientClassAccessModifier:internal /GenerateExceptionClasses:false /AdditionalNamespaceUsages:JsonApiDotNetCore.OpenApi.Client /GenerateNullableReferenceTypes:false
NrtOnMsvOffClient
NrtOnMsvOffClient.cs
NSwagCSharp
OpenApiClientTests.ResourceFieldValidation.NullableReferenceTypesOn.ModelStateValidationOff.GeneratedCode
- /ClientClassAccessModifier:internal /GenerateExceptionClasses:false /AdditionalNamespaceUsages:JsonApiDotNetCore.OpenApi.Client.Exceptions /GenerateNullableReferenceTypes:true
+ /ClientClassAccessModifier:internal /GenerateExceptionClasses:false /AdditionalNamespaceUsages:JsonApiDotNetCore.OpenApi.Client /GenerateNullableReferenceTypes:true
NrtOnMsvOnClient
NrtOnMsvOnClient.cs
NSwagCSharp
OpenApiClientTests.ResourceFieldValidation.NullableReferenceTypesOn.ModelStateValidationOn.GeneratedCode
- /ClientClassAccessModifier:internal /GenerateExceptionClasses:false /AdditionalNamespaceUsages:JsonApiDotNetCore.OpenApi.Client.Exceptions /GenerateNullableReferenceTypes:true
+ /ClientClassAccessModifier:internal /GenerateExceptionClasses:false /AdditionalNamespaceUsages:JsonApiDotNetCore.OpenApi.Client /GenerateNullableReferenceTypes:true
diff --git a/test/OpenApiClientTests/ResourceFieldValidation/NullableReferenceTypesOff/ModelStateValidationOff/swagger.g.json b/test/OpenApiClientTests/ResourceFieldValidation/NullableReferenceTypesOff/ModelStateValidationOff/swagger.g.json
index eef7a522cd..a2d386cefd 100644
--- a/test/OpenApiClientTests/ResourceFieldValidation/NullableReferenceTypesOff/ModelStateValidationOff/swagger.g.json
+++ b/test/OpenApiClientTests/ResourceFieldValidation/NullableReferenceTypesOff/ModelStateValidationOff/swagger.g.json
@@ -30,11 +30,28 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
"description": "Successfully returns the found resources, or an empty array if none were found.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ },
"content": {
"application/vnd.api+json": {
"schema": {
@@ -43,6 +60,18 @@
}
}
},
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
+ },
"400": {
"description": "The query string is invalid.",
"content": {
@@ -75,11 +104,48 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
- "description": "The operation completed successfully."
+ "description": "The operation completed successfully.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ "Content-Length": {
+ "description": "Size of the HTTP response body, in bytes.",
+ "required": true,
+ "schema": {
+ "type": "integer",
+ "format": "int64"
+ }
+ }
+ }
+ },
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
},
"400": {
"description": "The query string is invalid."
@@ -124,6 +190,16 @@
"responses": {
"201": {
"description": "The resource was successfully created, which resulted in additional changes. The newly created resource is returned.",
+ "headers": {
+ "Location": {
+ "description": "The URL at which the newly created resource can be retrieved.",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "format": "uri"
+ }
+ }
+ },
"content": {
"application/vnd.api+json": {
"schema": {
@@ -207,11 +283,28 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
"description": "Successfully returns the found resource.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ },
"content": {
"application/vnd.api+json": {
"schema": {
@@ -220,6 +313,18 @@
}
}
},
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
+ },
"400": {
"description": "The query string is invalid.",
"content": {
@@ -271,11 +376,48 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
- "description": "The operation completed successfully."
+ "description": "The operation completed successfully.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ "Content-Length": {
+ "description": "Size of the HTTP response body, in bytes.",
+ "required": true,
+ "schema": {
+ "type": "integer",
+ "format": "int64"
+ }
+ }
+ }
+ },
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
},
"400": {
"description": "The query string is invalid."
@@ -448,11 +590,28 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
"description": "Successfully returns the found empties, or an empty array if none were found.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ },
"content": {
"application/vnd.api+json": {
"schema": {
@@ -461,6 +620,18 @@
}
}
},
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
+ },
"400": {
"description": "The query string is invalid.",
"content": {
@@ -512,11 +683,48 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
- "description": "The operation completed successfully."
+ "description": "The operation completed successfully.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ "Content-Length": {
+ "description": "Size of the HTTP response body, in bytes.",
+ "required": true,
+ "schema": {
+ "type": "integer",
+ "format": "int64"
+ }
+ }
+ }
+ },
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
},
"400": {
"description": "The query string is invalid."
@@ -556,11 +764,28 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
"description": "Successfully returns the found empty identities, or an empty array if none were found.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ },
"content": {
"application/vnd.api+json": {
"schema": {
@@ -569,6 +794,18 @@
}
}
},
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
+ },
"400": {
"description": "The query string is invalid.",
"content": {
@@ -620,11 +857,48 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
- "description": "The operation completed successfully."
+ "description": "The operation completed successfully.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ "Content-Length": {
+ "description": "Size of the HTTP response body, in bytes.",
+ "required": true,
+ "schema": {
+ "type": "integer",
+ "format": "int64"
+ }
+ }
+ }
+ },
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
},
"400": {
"description": "The query string is invalid."
@@ -865,11 +1139,28 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
"description": "Successfully returns the found empty, or `null` if it was not found.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ },
"content": {
"application/vnd.api+json": {
"schema": {
@@ -878,6 +1169,18 @@
}
}
},
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
+ },
"400": {
"description": "The query string is invalid.",
"content": {
@@ -929,11 +1232,48 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
- "description": "The operation completed successfully."
+ "description": "The operation completed successfully.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ "Content-Length": {
+ "description": "Size of the HTTP response body, in bytes.",
+ "required": true,
+ "schema": {
+ "type": "integer",
+ "format": "int64"
+ }
+ }
+ }
+ },
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
},
"400": {
"description": "The query string is invalid."
@@ -973,11 +1313,28 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
"description": "Successfully returns the found empty identity, or `null` if it was not found.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ },
"content": {
"application/vnd.api+json": {
"schema": {
@@ -986,6 +1343,18 @@
}
}
},
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
+ },
"400": {
"description": "The query string is invalid.",
"content": {
@@ -1037,11 +1406,48 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
- "description": "The operation completed successfully."
+ "description": "The operation completed successfully.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ "Content-Length": {
+ "description": "Size of the HTTP response body, in bytes.",
+ "required": true,
+ "schema": {
+ "type": "integer",
+ "format": "int64"
+ }
+ }
+ }
+ },
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
},
"400": {
"description": "The query string is invalid."
@@ -1148,11 +1554,28 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
"description": "Successfully returns the found empties, or an empty array if none were found.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ },
"content": {
"application/vnd.api+json": {
"schema": {
@@ -1161,6 +1584,18 @@
}
}
},
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
+ },
"400": {
"description": "The query string is invalid.",
"content": {
@@ -1212,11 +1647,48 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
- "description": "The operation completed successfully."
+ "description": "The operation completed successfully.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ "Content-Length": {
+ "description": "Size of the HTTP response body, in bytes.",
+ "required": true,
+ "schema": {
+ "type": "integer",
+ "format": "int64"
+ }
+ }
+ }
+ },
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
},
"400": {
"description": "The query string is invalid."
@@ -1256,11 +1728,28 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
"description": "Successfully returns the found empty identities, or an empty array if none were found.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ },
"content": {
"application/vnd.api+json": {
"schema": {
@@ -1269,6 +1758,18 @@
}
}
},
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
+ },
"400": {
"description": "The query string is invalid.",
"content": {
@@ -1320,11 +1821,48 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
- "description": "The operation completed successfully."
+ "description": "The operation completed successfully.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ "Content-Length": {
+ "description": "Size of the HTTP response body, in bytes.",
+ "required": true,
+ "schema": {
+ "type": "integer",
+ "format": "int64"
+ }
+ }
+ }
+ },
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
},
"400": {
"description": "The query string is invalid."
@@ -1565,11 +2103,28 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
"description": "Successfully returns the found empty, or `null` if it was not found.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ },
"content": {
"application/vnd.api+json": {
"schema": {
@@ -1578,6 +2133,18 @@
}
}
},
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
+ },
"400": {
"description": "The query string is invalid.",
"content": {
@@ -1629,11 +2196,48 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
- "description": "The operation completed successfully."
+ "description": "The operation completed successfully.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ "Content-Length": {
+ "description": "Size of the HTTP response body, in bytes.",
+ "required": true,
+ "schema": {
+ "type": "integer",
+ "format": "int64"
+ }
+ }
+ }
+ },
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
},
"400": {
"description": "The query string is invalid."
@@ -1673,11 +2277,28 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
"description": "Successfully returns the found empty identity, or `null` if it was not found.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ },
"content": {
"application/vnd.api+json": {
"schema": {
@@ -1686,6 +2307,18 @@
}
}
},
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
+ },
"400": {
"description": "The query string is invalid.",
"content": {
@@ -1737,11 +2370,48 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
- "description": "The operation completed successfully."
+ "description": "The operation completed successfully.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ "Content-Length": {
+ "description": "Size of the HTTP response body, in bytes.",
+ "required": true,
+ "schema": {
+ "type": "integer",
+ "format": "int64"
+ }
+ }
+ }
+ },
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
},
"400": {
"description": "The query string is invalid."
diff --git a/test/OpenApiClientTests/ResourceFieldValidation/NullableReferenceTypesOff/ModelStateValidationOn/swagger.g.json b/test/OpenApiClientTests/ResourceFieldValidation/NullableReferenceTypesOff/ModelStateValidationOn/swagger.g.json
index 20eb52fdb5..7afb42a553 100644
--- a/test/OpenApiClientTests/ResourceFieldValidation/NullableReferenceTypesOff/ModelStateValidationOn/swagger.g.json
+++ b/test/OpenApiClientTests/ResourceFieldValidation/NullableReferenceTypesOff/ModelStateValidationOn/swagger.g.json
@@ -30,11 +30,28 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
"description": "Successfully returns the found resources, or an empty array if none were found.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ },
"content": {
"application/vnd.api+json": {
"schema": {
@@ -43,6 +60,18 @@
}
}
},
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
+ },
"400": {
"description": "The query string is invalid.",
"content": {
@@ -75,11 +104,48 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
- "description": "The operation completed successfully."
+ "description": "The operation completed successfully.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ "Content-Length": {
+ "description": "Size of the HTTP response body, in bytes.",
+ "required": true,
+ "schema": {
+ "type": "integer",
+ "format": "int64"
+ }
+ }
+ }
+ },
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
},
"400": {
"description": "The query string is invalid."
@@ -124,6 +190,16 @@
"responses": {
"201": {
"description": "The resource was successfully created, which resulted in additional changes. The newly created resource is returned.",
+ "headers": {
+ "Location": {
+ "description": "The URL at which the newly created resource can be retrieved.",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "format": "uri"
+ }
+ }
+ },
"content": {
"application/vnd.api+json": {
"schema": {
@@ -207,11 +283,28 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
"description": "Successfully returns the found resource.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ },
"content": {
"application/vnd.api+json": {
"schema": {
@@ -220,6 +313,18 @@
}
}
},
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
+ },
"400": {
"description": "The query string is invalid.",
"content": {
@@ -271,11 +376,48 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
- "description": "The operation completed successfully."
+ "description": "The operation completed successfully.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ "Content-Length": {
+ "description": "Size of the HTTP response body, in bytes.",
+ "required": true,
+ "schema": {
+ "type": "integer",
+ "format": "int64"
+ }
+ }
+ }
+ },
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
},
"400": {
"description": "The query string is invalid."
@@ -448,11 +590,28 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
"description": "Successfully returns the found empties, or an empty array if none were found.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ },
"content": {
"application/vnd.api+json": {
"schema": {
@@ -461,6 +620,18 @@
}
}
},
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
+ },
"400": {
"description": "The query string is invalid.",
"content": {
@@ -512,11 +683,48 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
- "description": "The operation completed successfully."
+ "description": "The operation completed successfully.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ "Content-Length": {
+ "description": "Size of the HTTP response body, in bytes.",
+ "required": true,
+ "schema": {
+ "type": "integer",
+ "format": "int64"
+ }
+ }
+ }
+ },
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
},
"400": {
"description": "The query string is invalid."
@@ -556,11 +764,28 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
"description": "Successfully returns the found empty identities, or an empty array if none were found.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ },
"content": {
"application/vnd.api+json": {
"schema": {
@@ -569,6 +794,18 @@
}
}
},
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
+ },
"400": {
"description": "The query string is invalid.",
"content": {
@@ -620,11 +857,48 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
- "description": "The operation completed successfully."
+ "description": "The operation completed successfully.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ "Content-Length": {
+ "description": "Size of the HTTP response body, in bytes.",
+ "required": true,
+ "schema": {
+ "type": "integer",
+ "format": "int64"
+ }
+ }
+ }
+ },
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
},
"400": {
"description": "The query string is invalid."
@@ -865,11 +1139,28 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
"description": "Successfully returns the found empty, or `null` if it was not found.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ },
"content": {
"application/vnd.api+json": {
"schema": {
@@ -878,6 +1169,18 @@
}
}
},
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
+ },
"400": {
"description": "The query string is invalid.",
"content": {
@@ -929,11 +1232,48 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
- "description": "The operation completed successfully."
+ "description": "The operation completed successfully.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ "Content-Length": {
+ "description": "Size of the HTTP response body, in bytes.",
+ "required": true,
+ "schema": {
+ "type": "integer",
+ "format": "int64"
+ }
+ }
+ }
+ },
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
},
"400": {
"description": "The query string is invalid."
@@ -973,11 +1313,28 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
"description": "Successfully returns the found empty identity, or `null` if it was not found.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ },
"content": {
"application/vnd.api+json": {
"schema": {
@@ -986,6 +1343,18 @@
}
}
},
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
+ },
"400": {
"description": "The query string is invalid.",
"content": {
@@ -1037,11 +1406,48 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
- "description": "The operation completed successfully."
+ "description": "The operation completed successfully.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ "Content-Length": {
+ "description": "Size of the HTTP response body, in bytes.",
+ "required": true,
+ "schema": {
+ "type": "integer",
+ "format": "int64"
+ }
+ }
+ }
+ },
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
},
"400": {
"description": "The query string is invalid."
@@ -1148,11 +1554,28 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
"description": "Successfully returns the found empties, or an empty array if none were found.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ },
"content": {
"application/vnd.api+json": {
"schema": {
@@ -1161,6 +1584,18 @@
}
}
},
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
+ },
"400": {
"description": "The query string is invalid.",
"content": {
@@ -1212,11 +1647,48 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
- "description": "The operation completed successfully."
+ "description": "The operation completed successfully.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ "Content-Length": {
+ "description": "Size of the HTTP response body, in bytes.",
+ "required": true,
+ "schema": {
+ "type": "integer",
+ "format": "int64"
+ }
+ }
+ }
+ },
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
},
"400": {
"description": "The query string is invalid."
@@ -1256,11 +1728,28 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
"description": "Successfully returns the found empty identities, or an empty array if none were found.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ },
"content": {
"application/vnd.api+json": {
"schema": {
@@ -1269,6 +1758,18 @@
}
}
},
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
+ },
"400": {
"description": "The query string is invalid.",
"content": {
@@ -1320,11 +1821,48 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
- "description": "The operation completed successfully."
+ "description": "The operation completed successfully.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ "Content-Length": {
+ "description": "Size of the HTTP response body, in bytes.",
+ "required": true,
+ "schema": {
+ "type": "integer",
+ "format": "int64"
+ }
+ }
+ }
+ },
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
},
"400": {
"description": "The query string is invalid."
@@ -1565,11 +2103,28 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
"description": "Successfully returns the found empty, or `null` if it was not found.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ },
"content": {
"application/vnd.api+json": {
"schema": {
@@ -1578,6 +2133,18 @@
}
}
},
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
+ },
"400": {
"description": "The query string is invalid.",
"content": {
@@ -1629,11 +2196,48 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
- "description": "The operation completed successfully."
+ "description": "The operation completed successfully.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ "Content-Length": {
+ "description": "Size of the HTTP response body, in bytes.",
+ "required": true,
+ "schema": {
+ "type": "integer",
+ "format": "int64"
+ }
+ }
+ }
+ },
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
},
"400": {
"description": "The query string is invalid."
@@ -1673,11 +2277,28 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
"description": "Successfully returns the found empty identity, or `null` if it was not found.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ },
"content": {
"application/vnd.api+json": {
"schema": {
@@ -1686,6 +2307,18 @@
}
}
},
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
+ },
"400": {
"description": "The query string is invalid.",
"content": {
@@ -1737,11 +2370,48 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
- "description": "The operation completed successfully."
+ "description": "The operation completed successfully.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ "Content-Length": {
+ "description": "Size of the HTTP response body, in bytes.",
+ "required": true,
+ "schema": {
+ "type": "integer",
+ "format": "int64"
+ }
+ }
+ }
+ },
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
},
"400": {
"description": "The query string is invalid."
diff --git a/test/OpenApiClientTests/ResourceFieldValidation/NullableReferenceTypesOn/ModelStateValidationOff/swagger.g.json b/test/OpenApiClientTests/ResourceFieldValidation/NullableReferenceTypesOn/ModelStateValidationOff/swagger.g.json
index 5b8e57278a..02ccee3eb3 100644
--- a/test/OpenApiClientTests/ResourceFieldValidation/NullableReferenceTypesOn/ModelStateValidationOff/swagger.g.json
+++ b/test/OpenApiClientTests/ResourceFieldValidation/NullableReferenceTypesOn/ModelStateValidationOff/swagger.g.json
@@ -30,11 +30,28 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
"description": "Successfully returns the found resources, or an empty array if none were found.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ },
"content": {
"application/vnd.api+json": {
"schema": {
@@ -43,6 +60,18 @@
}
}
},
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
+ },
"400": {
"description": "The query string is invalid.",
"content": {
@@ -75,11 +104,48 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
- "description": "The operation completed successfully."
+ "description": "The operation completed successfully.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ "Content-Length": {
+ "description": "Size of the HTTP response body, in bytes.",
+ "required": true,
+ "schema": {
+ "type": "integer",
+ "format": "int64"
+ }
+ }
+ }
+ },
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
},
"400": {
"description": "The query string is invalid."
@@ -124,6 +190,16 @@
"responses": {
"201": {
"description": "The resource was successfully created, which resulted in additional changes. The newly created resource is returned.",
+ "headers": {
+ "Location": {
+ "description": "The URL at which the newly created resource can be retrieved.",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "format": "uri"
+ }
+ }
+ },
"content": {
"application/vnd.api+json": {
"schema": {
@@ -207,11 +283,28 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
"description": "Successfully returns the found resource.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ },
"content": {
"application/vnd.api+json": {
"schema": {
@@ -220,6 +313,18 @@
}
}
},
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
+ },
"400": {
"description": "The query string is invalid.",
"content": {
@@ -271,11 +376,48 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
- "description": "The operation completed successfully."
+ "description": "The operation completed successfully.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ "Content-Length": {
+ "description": "Size of the HTTP response body, in bytes.",
+ "required": true,
+ "schema": {
+ "type": "integer",
+ "format": "int64"
+ }
+ }
+ }
+ },
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
},
"400": {
"description": "The query string is invalid."
@@ -448,11 +590,28 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
"description": "Successfully returns the found empty, or `null` if it was not found.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ },
"content": {
"application/vnd.api+json": {
"schema": {
@@ -461,6 +620,18 @@
}
}
},
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
+ },
"400": {
"description": "The query string is invalid.",
"content": {
@@ -512,11 +683,48 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
- "description": "The operation completed successfully."
+ "description": "The operation completed successfully.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ "Content-Length": {
+ "description": "Size of the HTTP response body, in bytes.",
+ "required": true,
+ "schema": {
+ "type": "integer",
+ "format": "int64"
+ }
+ }
+ }
+ },
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
},
"400": {
"description": "The query string is invalid."
@@ -556,11 +764,28 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
"description": "Successfully returns the found empty identity, or `null` if it was not found.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ },
"content": {
"application/vnd.api+json": {
"schema": {
@@ -569,6 +794,18 @@
}
}
},
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
+ },
"400": {
"description": "The query string is invalid.",
"content": {
@@ -620,11 +857,48 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
- "description": "The operation completed successfully."
+ "description": "The operation completed successfully.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ "Content-Length": {
+ "description": "Size of the HTTP response body, in bytes.",
+ "required": true,
+ "schema": {
+ "type": "integer",
+ "format": "int64"
+ }
+ }
+ }
+ },
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
},
"400": {
"description": "The query string is invalid."
@@ -731,11 +1005,28 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
"description": "Successfully returns the found empty, or `null` if it was not found.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ },
"content": {
"application/vnd.api+json": {
"schema": {
@@ -744,6 +1035,18 @@
}
}
},
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
+ },
"400": {
"description": "The query string is invalid.",
"content": {
@@ -795,11 +1098,48 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
- "description": "The operation completed successfully."
+ "description": "The operation completed successfully.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ "Content-Length": {
+ "description": "Size of the HTTP response body, in bytes.",
+ "required": true,
+ "schema": {
+ "type": "integer",
+ "format": "int64"
+ }
+ }
+ }
+ },
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
},
"400": {
"description": "The query string is invalid."
@@ -839,11 +1179,28 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
"description": "Successfully returns the found empty identity, or `null` if it was not found.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ },
"content": {
"application/vnd.api+json": {
"schema": {
@@ -852,6 +1209,18 @@
}
}
},
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
+ },
"400": {
"description": "The query string is invalid.",
"content": {
@@ -903,11 +1272,48 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
- "description": "The operation completed successfully."
+ "description": "The operation completed successfully.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ "Content-Length": {
+ "description": "Size of the HTTP response body, in bytes.",
+ "required": true,
+ "schema": {
+ "type": "integer",
+ "format": "int64"
+ }
+ }
+ }
+ },
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
},
"400": {
"description": "The query string is invalid."
@@ -1014,11 +1420,28 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
"description": "Successfully returns the found empty, or `null` if it was not found.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ },
"content": {
"application/vnd.api+json": {
"schema": {
@@ -1027,6 +1450,18 @@
}
}
},
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
+ },
"400": {
"description": "The query string is invalid.",
"content": {
@@ -1078,11 +1513,48 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
- "description": "The operation completed successfully."
+ "description": "The operation completed successfully.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ "Content-Length": {
+ "description": "Size of the HTTP response body, in bytes.",
+ "required": true,
+ "schema": {
+ "type": "integer",
+ "format": "int64"
+ }
+ }
+ }
+ },
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
},
"400": {
"description": "The query string is invalid."
@@ -1122,11 +1594,28 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
"description": "Successfully returns the found empty identity, or `null` if it was not found.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ },
"content": {
"application/vnd.api+json": {
"schema": {
@@ -1135,6 +1624,18 @@
}
}
},
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
+ },
"400": {
"description": "The query string is invalid.",
"content": {
@@ -1186,11 +1687,48 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
- "description": "The operation completed successfully."
+ "description": "The operation completed successfully.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ "Content-Length": {
+ "description": "Size of the HTTP response body, in bytes.",
+ "required": true,
+ "schema": {
+ "type": "integer",
+ "format": "int64"
+ }
+ }
+ }
+ },
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
},
"400": {
"description": "The query string is invalid."
@@ -1297,11 +1835,28 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
"description": "Successfully returns the found empty, or `null` if it was not found.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ },
"content": {
"application/vnd.api+json": {
"schema": {
@@ -1310,6 +1865,18 @@
}
}
},
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
+ },
"400": {
"description": "The query string is invalid.",
"content": {
@@ -1361,11 +1928,48 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
- "description": "The operation completed successfully."
+ "description": "The operation completed successfully.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ "Content-Length": {
+ "description": "Size of the HTTP response body, in bytes.",
+ "required": true,
+ "schema": {
+ "type": "integer",
+ "format": "int64"
+ }
+ }
+ }
+ },
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
},
"400": {
"description": "The query string is invalid."
@@ -1405,11 +2009,28 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
"description": "Successfully returns the found empty identity, or `null` if it was not found.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ },
"content": {
"application/vnd.api+json": {
"schema": {
@@ -1418,6 +2039,18 @@
}
}
},
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
+ },
"400": {
"description": "The query string is invalid.",
"content": {
@@ -1469,11 +2102,48 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
- "description": "The operation completed successfully."
+ "description": "The operation completed successfully.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ "Content-Length": {
+ "description": "Size of the HTTP response body, in bytes.",
+ "required": true,
+ "schema": {
+ "type": "integer",
+ "format": "int64"
+ }
+ }
+ }
+ },
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
},
"400": {
"description": "The query string is invalid."
@@ -1580,11 +2250,28 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
"description": "Successfully returns the found empties, or an empty array if none were found.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ },
"content": {
"application/vnd.api+json": {
"schema": {
@@ -1593,6 +2280,18 @@
}
}
},
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
+ },
"400": {
"description": "The query string is invalid.",
"content": {
@@ -1644,11 +2343,48 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
- "description": "The operation completed successfully."
+ "description": "The operation completed successfully.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ "Content-Length": {
+ "description": "Size of the HTTP response body, in bytes.",
+ "required": true,
+ "schema": {
+ "type": "integer",
+ "format": "int64"
+ }
+ }
+ }
+ },
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
},
"400": {
"description": "The query string is invalid."
@@ -1688,11 +2424,28 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
"description": "Successfully returns the found empty identities, or an empty array if none were found.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ },
"content": {
"application/vnd.api+json": {
"schema": {
@@ -1701,6 +2454,18 @@
}
}
},
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
+ },
"400": {
"description": "The query string is invalid.",
"content": {
@@ -1752,11 +2517,48 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
- "description": "The operation completed successfully."
+ "description": "The operation completed successfully.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ "Content-Length": {
+ "description": "Size of the HTTP response body, in bytes.",
+ "required": true,
+ "schema": {
+ "type": "integer",
+ "format": "int64"
+ }
+ }
+ }
+ },
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
},
"400": {
"description": "The query string is invalid."
@@ -1997,11 +2799,28 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
"description": "Successfully returns the found empties, or an empty array if none were found.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ },
"content": {
"application/vnd.api+json": {
"schema": {
@@ -2010,6 +2829,18 @@
}
}
},
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
+ },
"400": {
"description": "The query string is invalid.",
"content": {
@@ -2061,11 +2892,48 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
- "description": "The operation completed successfully."
+ "description": "The operation completed successfully.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ "Content-Length": {
+ "description": "Size of the HTTP response body, in bytes.",
+ "required": true,
+ "schema": {
+ "type": "integer",
+ "format": "int64"
+ }
+ }
+ }
+ },
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
},
"400": {
"description": "The query string is invalid."
@@ -2105,11 +2973,28 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
"description": "Successfully returns the found empty identities, or an empty array if none were found.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ },
"content": {
"application/vnd.api+json": {
"schema": {
@@ -2118,6 +3003,18 @@
}
}
},
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
+ },
"400": {
"description": "The query string is invalid.",
"content": {
@@ -2169,11 +3066,48 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
- "description": "The operation completed successfully."
+ "description": "The operation completed successfully.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ "Content-Length": {
+ "description": "Size of the HTTP response body, in bytes.",
+ "required": true,
+ "schema": {
+ "type": "integer",
+ "format": "int64"
+ }
+ }
+ }
+ },
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
},
"400": {
"description": "The query string is invalid."
diff --git a/test/OpenApiClientTests/ResourceFieldValidation/NullableReferenceTypesOn/ModelStateValidationOn/swagger.g.json b/test/OpenApiClientTests/ResourceFieldValidation/NullableReferenceTypesOn/ModelStateValidationOn/swagger.g.json
index c9984786b3..6cda95634b 100644
--- a/test/OpenApiClientTests/ResourceFieldValidation/NullableReferenceTypesOn/ModelStateValidationOn/swagger.g.json
+++ b/test/OpenApiClientTests/ResourceFieldValidation/NullableReferenceTypesOn/ModelStateValidationOn/swagger.g.json
@@ -30,11 +30,28 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
"description": "Successfully returns the found resources, or an empty array if none were found.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ },
"content": {
"application/vnd.api+json": {
"schema": {
@@ -43,6 +60,18 @@
}
}
},
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
+ },
"400": {
"description": "The query string is invalid.",
"content": {
@@ -75,11 +104,48 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
- "description": "The operation completed successfully."
+ "description": "The operation completed successfully.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ "Content-Length": {
+ "description": "Size of the HTTP response body, in bytes.",
+ "required": true,
+ "schema": {
+ "type": "integer",
+ "format": "int64"
+ }
+ }
+ }
+ },
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
},
"400": {
"description": "The query string is invalid."
@@ -124,6 +190,16 @@
"responses": {
"201": {
"description": "The resource was successfully created, which resulted in additional changes. The newly created resource is returned.",
+ "headers": {
+ "Location": {
+ "description": "The URL at which the newly created resource can be retrieved.",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "format": "uri"
+ }
+ }
+ },
"content": {
"application/vnd.api+json": {
"schema": {
@@ -207,11 +283,28 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
"description": "Successfully returns the found resource.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ },
"content": {
"application/vnd.api+json": {
"schema": {
@@ -220,6 +313,18 @@
}
}
},
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
+ },
"400": {
"description": "The query string is invalid.",
"content": {
@@ -271,11 +376,48 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
- "description": "The operation completed successfully."
+ "description": "The operation completed successfully.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ "Content-Length": {
+ "description": "Size of the HTTP response body, in bytes.",
+ "required": true,
+ "schema": {
+ "type": "integer",
+ "format": "int64"
+ }
+ }
+ }
+ },
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
},
"400": {
"description": "The query string is invalid."
@@ -448,11 +590,28 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
"description": "Successfully returns the found empty, or `null` if it was not found.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ },
"content": {
"application/vnd.api+json": {
"schema": {
@@ -461,6 +620,18 @@
}
}
},
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
+ },
"400": {
"description": "The query string is invalid.",
"content": {
@@ -512,11 +683,48 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
- "description": "The operation completed successfully."
+ "description": "The operation completed successfully.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ "Content-Length": {
+ "description": "Size of the HTTP response body, in bytes.",
+ "required": true,
+ "schema": {
+ "type": "integer",
+ "format": "int64"
+ }
+ }
+ }
+ },
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
},
"400": {
"description": "The query string is invalid."
@@ -556,11 +764,28 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
"description": "Successfully returns the found empty identity, or `null` if it was not found.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ },
"content": {
"application/vnd.api+json": {
"schema": {
@@ -569,6 +794,18 @@
}
}
},
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
+ },
"400": {
"description": "The query string is invalid.",
"content": {
@@ -620,11 +857,48 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
- "description": "The operation completed successfully."
+ "description": "The operation completed successfully.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ "Content-Length": {
+ "description": "Size of the HTTP response body, in bytes.",
+ "required": true,
+ "schema": {
+ "type": "integer",
+ "format": "int64"
+ }
+ }
+ }
+ },
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
},
"400": {
"description": "The query string is invalid."
@@ -731,11 +1005,28 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
"description": "Successfully returns the found empty, or `null` if it was not found.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ },
"content": {
"application/vnd.api+json": {
"schema": {
@@ -744,6 +1035,18 @@
}
}
},
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
+ },
"400": {
"description": "The query string is invalid.",
"content": {
@@ -795,11 +1098,48 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
- "description": "The operation completed successfully."
+ "description": "The operation completed successfully.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ "Content-Length": {
+ "description": "Size of the HTTP response body, in bytes.",
+ "required": true,
+ "schema": {
+ "type": "integer",
+ "format": "int64"
+ }
+ }
+ }
+ },
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
},
"400": {
"description": "The query string is invalid."
@@ -839,11 +1179,28 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
"description": "Successfully returns the found empty identity, or `null` if it was not found.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ },
"content": {
"application/vnd.api+json": {
"schema": {
@@ -852,6 +1209,18 @@
}
}
},
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
+ },
"400": {
"description": "The query string is invalid.",
"content": {
@@ -903,11 +1272,48 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
- "description": "The operation completed successfully."
+ "description": "The operation completed successfully.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ "Content-Length": {
+ "description": "Size of the HTTP response body, in bytes.",
+ "required": true,
+ "schema": {
+ "type": "integer",
+ "format": "int64"
+ }
+ }
+ }
+ },
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
},
"400": {
"description": "The query string is invalid."
@@ -1014,11 +1420,28 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
"description": "Successfully returns the found empty, or `null` if it was not found.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ },
"content": {
"application/vnd.api+json": {
"schema": {
@@ -1027,6 +1450,18 @@
}
}
},
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
+ },
"400": {
"description": "The query string is invalid.",
"content": {
@@ -1078,11 +1513,48 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
- "description": "The operation completed successfully."
+ "description": "The operation completed successfully.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ "Content-Length": {
+ "description": "Size of the HTTP response body, in bytes.",
+ "required": true,
+ "schema": {
+ "type": "integer",
+ "format": "int64"
+ }
+ }
+ }
+ },
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
},
"400": {
"description": "The query string is invalid."
@@ -1122,11 +1594,28 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
"description": "Successfully returns the found empty identity, or `null` if it was not found.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ },
"content": {
"application/vnd.api+json": {
"schema": {
@@ -1135,6 +1624,18 @@
}
}
},
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
+ },
"400": {
"description": "The query string is invalid.",
"content": {
@@ -1186,11 +1687,48 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
- "description": "The operation completed successfully."
+ "description": "The operation completed successfully.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ "Content-Length": {
+ "description": "Size of the HTTP response body, in bytes.",
+ "required": true,
+ "schema": {
+ "type": "integer",
+ "format": "int64"
+ }
+ }
+ }
+ },
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
},
"400": {
"description": "The query string is invalid."
@@ -1297,11 +1835,28 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
"description": "Successfully returns the found empty, or `null` if it was not found.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ },
"content": {
"application/vnd.api+json": {
"schema": {
@@ -1310,6 +1865,18 @@
}
}
},
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
+ },
"400": {
"description": "The query string is invalid.",
"content": {
@@ -1361,11 +1928,48 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
- "description": "The operation completed successfully."
+ "description": "The operation completed successfully.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ "Content-Length": {
+ "description": "Size of the HTTP response body, in bytes.",
+ "required": true,
+ "schema": {
+ "type": "integer",
+ "format": "int64"
+ }
+ }
+ }
+ },
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
},
"400": {
"description": "The query string is invalid."
@@ -1405,11 +2009,28 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
"description": "Successfully returns the found empty identity, or `null` if it was not found.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ },
"content": {
"application/vnd.api+json": {
"schema": {
@@ -1418,6 +2039,18 @@
}
}
},
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
+ },
"400": {
"description": "The query string is invalid.",
"content": {
@@ -1469,11 +2102,48 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
- "description": "The operation completed successfully."
+ "description": "The operation completed successfully.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ "Content-Length": {
+ "description": "Size of the HTTP response body, in bytes.",
+ "required": true,
+ "schema": {
+ "type": "integer",
+ "format": "int64"
+ }
+ }
+ }
+ },
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
},
"400": {
"description": "The query string is invalid."
@@ -1580,11 +2250,28 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
"description": "Successfully returns the found empties, or an empty array if none were found.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ },
"content": {
"application/vnd.api+json": {
"schema": {
@@ -1593,6 +2280,18 @@
}
}
},
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
+ },
"400": {
"description": "The query string is invalid.",
"content": {
@@ -1644,11 +2343,48 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
- "description": "The operation completed successfully."
+ "description": "The operation completed successfully.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ "Content-Length": {
+ "description": "Size of the HTTP response body, in bytes.",
+ "required": true,
+ "schema": {
+ "type": "integer",
+ "format": "int64"
+ }
+ }
+ }
+ },
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
},
"400": {
"description": "The query string is invalid."
@@ -1688,11 +2424,28 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
"description": "Successfully returns the found empty identities, or an empty array if none were found.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ },
"content": {
"application/vnd.api+json": {
"schema": {
@@ -1701,6 +2454,18 @@
}
}
},
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
+ },
"400": {
"description": "The query string is invalid.",
"content": {
@@ -1752,11 +2517,48 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
- "description": "The operation completed successfully."
+ "description": "The operation completed successfully.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ "Content-Length": {
+ "description": "Size of the HTTP response body, in bytes.",
+ "required": true,
+ "schema": {
+ "type": "integer",
+ "format": "int64"
+ }
+ }
+ }
+ },
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
},
"400": {
"description": "The query string is invalid."
@@ -1997,11 +2799,28 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
"description": "Successfully returns the found empties, or an empty array if none were found.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ },
"content": {
"application/vnd.api+json": {
"schema": {
@@ -2010,6 +2829,18 @@
}
}
},
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
+ },
"400": {
"description": "The query string is invalid.",
"content": {
@@ -2061,11 +2892,48 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
- "description": "The operation completed successfully."
+ "description": "The operation completed successfully.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ "Content-Length": {
+ "description": "Size of the HTTP response body, in bytes.",
+ "required": true,
+ "schema": {
+ "type": "integer",
+ "format": "int64"
+ }
+ }
+ }
+ },
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
},
"400": {
"description": "The query string is invalid."
@@ -2105,11 +2973,28 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
"description": "Successfully returns the found empty identities, or an empty array if none were found.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ },
"content": {
"application/vnd.api+json": {
"schema": {
@@ -2118,6 +3003,18 @@
}
}
},
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
+ },
"400": {
"description": "The query string is invalid.",
"content": {
@@ -2169,11 +3066,48 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
- "description": "The operation completed successfully."
+ "description": "The operation completed successfully.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ "Content-Length": {
+ "description": "Size of the HTTP response body, in bytes.",
+ "required": true,
+ "schema": {
+ "type": "integer",
+ "format": "int64"
+ }
+ }
+ }
+ },
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
},
"400": {
"description": "The query string is invalid."
diff --git a/test/OpenApiEndToEndTests/Headers/ETagTests.cs b/test/OpenApiEndToEndTests/Headers/ETagTests.cs
new file mode 100644
index 0000000000..97a4dd9467
--- /dev/null
+++ b/test/OpenApiEndToEndTests/Headers/ETagTests.cs
@@ -0,0 +1,184 @@
+using System.Net;
+using FluentAssertions;
+using JsonApiDotNetCore.OpenApi.Client;
+using Microsoft.Net.Http.Headers;
+using OpenApiEndToEndTests.Headers.GeneratedCode;
+using OpenApiTests;
+using OpenApiTests.Headers;
+using TestBuildingBlocks;
+using Xunit;
+
+namespace OpenApiEndToEndTests.Headers;
+
+public sealed class ETagTests : IClassFixture, HeadersDbContext>>
+{
+ private readonly IntegrationTestContext, HeadersDbContext> _testContext;
+ private readonly HeaderFakers _fakers = new();
+
+ public ETagTests(IntegrationTestContext, HeadersDbContext> testContext)
+ {
+ _testContext = testContext;
+
+ testContext.UseController();
+ }
+
+ [Fact]
+ public async Task Returns_ETag_for_HEAD_request()
+ {
+ // Arrange
+ List countries = _fakers.Country.Generate(2);
+
+ await _testContext.RunOnDatabaseAsync(async dbContext =>
+ {
+ await dbContext.ClearTableAsync();
+ dbContext.Countries.AddRange(countries);
+ await dbContext.SaveChangesAsync();
+ });
+
+ using HttpClient httpClient = _testContext.Factory.CreateClient();
+ var apiClient = new HeadersClient(httpClient);
+
+ // Act
+ ApiResponse response = await ApiResponse.TranslateAsync(() => apiClient.HeadCountryCollectionAsync(null, null));
+
+ // Assert
+ response.StatusCode.Should().Be((int)HttpStatusCode.OK);
+
+ response.Headers.Should().ContainKey(HeaderNames.ETag).WhoseValue.Should().NotBeNullOrEmpty();
+ }
+
+ [Fact]
+ public async Task Returns_ETag_for_GET_request()
+ {
+ // Arrange
+ List countries = _fakers.Country.Generate(2);
+
+ await _testContext.RunOnDatabaseAsync(async dbContext =>
+ {
+ await dbContext.ClearTableAsync();
+ dbContext.Countries.AddRange(countries);
+ await dbContext.SaveChangesAsync();
+ });
+
+ using HttpClient httpClient = _testContext.Factory.CreateClient();
+ var apiClient = new HeadersClient(httpClient);
+
+ // Act
+ ApiResponse response = await ApiResponse.TranslateAsync(() => apiClient.GetCountryCollectionAsync(null, null));
+
+ // Assert
+ response.StatusCode.Should().Be((int)HttpStatusCode.OK);
+
+ response.Headers.Should().ContainKey(HeaderNames.ETag).WhoseValue.Should().NotBeNullOrEmpty();
+
+ response.Result.ShouldNotBeNull();
+ }
+
+ [Fact]
+ public async Task Returns_no_ETag_for_failed_GET_request()
+ {
+ // Arrange
+ using HttpClient httpClient = _testContext.Factory.CreateClient();
+ var apiClient = new HeadersClient(httpClient);
+
+ // Act
+ Func>> action = () =>
+ ApiResponse.TranslateAsync(() => apiClient.GetCountryAsync(Unknown.StringId.For(), null, null));
+
+ // Assert
+ ApiException exception = (await action.Should().ThrowExactlyAsync>()).Which;
+ exception.StatusCode.Should().Be((int)HttpStatusCode.NotFound);
+ exception.Headers.Should().NotContainKey(HeaderNames.ETag);
+ }
+
+ [Fact]
+ public async Task Returns_no_ETag_for_POST_request()
+ {
+ // Arrange
+ Country newCountry = _fakers.Country.Generate();
+
+ using HttpClient httpClient = _testContext.Factory.CreateClient();
+ var apiClient = new HeadersClient(httpClient);
+
+ // Act
+ ApiResponse response = await ApiResponse.TranslateAsync(() => apiClient.PostCountryAsync(null,
+ new CountryPostRequestDocument
+ {
+ Data = new CountryDataInPostRequest
+ {
+ Attributes = new CountryAttributesInPostRequest
+ {
+ Name = newCountry.Name,
+ Population = newCountry.Population
+ }
+ }
+ }));
+
+ // Assert
+ response.StatusCode.Should().Be((int)HttpStatusCode.Created);
+
+ response.Headers.Should().NotContainKey(HeaderNames.ETag);
+
+ response.Result.ShouldNotBeNull();
+ }
+
+ [Fact]
+ public async Task Returns_NotModified_for_matching_ETag()
+ {
+ // Arrange
+ List countries = _fakers.Country.Generate(2);
+
+ await _testContext.RunOnDatabaseAsync(async dbContext =>
+ {
+ await dbContext.ClearTableAsync();
+ dbContext.Countries.AddRange(countries);
+ await dbContext.SaveChangesAsync();
+ });
+
+ using HttpClient httpClient = _testContext.Factory.CreateClient();
+ var apiClient = new HeadersClient(httpClient);
+
+ ApiResponse response1 = await ApiResponse.TranslateAsync(() => apiClient.GetCountryCollectionAsync(null, null));
+
+ string responseETag = response1.Headers[HeaderNames.ETag].Single();
+
+ // Act
+ ApiResponse response2 =
+ await ApiResponse.TranslateAsync(() => apiClient.GetCountryCollectionAsync(null, responseETag));
+
+ // Assert
+ response2.StatusCode.Should().Be((int)HttpStatusCode.NotModified);
+
+ response2.Headers.Should().ContainKey(HeaderNames.ETag).WhoseValue.Should().Equal([responseETag]);
+
+ response2.Result.Should().BeNull();
+ }
+
+ [Fact]
+ public async Task Returns_content_for_mismatching_ETag()
+ {
+ // Arrange
+ List countries = _fakers.Country.Generate(2);
+
+ await _testContext.RunOnDatabaseAsync(async dbContext =>
+ {
+ await dbContext.ClearTableAsync();
+ dbContext.Countries.AddRange(countries);
+ await dbContext.SaveChangesAsync();
+ });
+
+ using HttpClient httpClient = _testContext.Factory.CreateClient();
+ var apiClient = new HeadersClient(httpClient);
+
+ // Act
+ ApiResponse response2 =
+ await ApiResponse.TranslateAsync(() => apiClient.GetCountryCollectionAsync(null, "\"Not-a-matching-value\""));
+
+ // Assert
+ response2.StatusCode.Should().Be((int)HttpStatusCode.OK);
+
+ response2.Headers.Should().ContainKey(HeaderNames.ETag).WhoseValue.Should().NotBeNullOrEmpty();
+
+ response2.Result.ShouldNotBeNull();
+ }
+}
diff --git a/test/OpenApiEndToEndTests/Headers/swagger.g.json b/test/OpenApiEndToEndTests/Headers/swagger.g.json
new file mode 100644
index 0000000000..2e56437cb0
--- /dev/null
+++ b/test/OpenApiEndToEndTests/Headers/swagger.g.json
@@ -0,0 +1,1824 @@
+{
+ "openapi": "3.0.1",
+ "info": {
+ "title": "OpenApiTests",
+ "version": "1.0"
+ },
+ "servers": [
+ {
+ "url": "http://localhost"
+ }
+ ],
+ "paths": {
+ "/countries": {
+ "get": {
+ "tags": [
+ "countries"
+ ],
+ "summary": "Retrieves a collection of countries.",
+ "operationId": "getCountryCollection",
+ "parameters": [
+ {
+ "name": "query",
+ "in": "query",
+ "description": "For syntax, see the documentation for the [`include`](https://www.jsonapi.net/usage/reading/including-relationships.html)/[`filter`](https://www.jsonapi.net/usage/reading/filtering.html)/[`sort`](https://www.jsonapi.net/usage/reading/sorting.html)/[`page`](https://www.jsonapi.net/usage/reading/pagination.html)/[`fields`](https://www.jsonapi.net/usage/reading/sparse-fieldset-selection.html) query string parameters.",
+ "schema": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "string",
+ "nullable": true
+ },
+ "example": ""
+ }
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Successfully returns the found countries, or an empty array if none were found.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ },
+ "content": {
+ "application/vnd.api+json": {
+ "schema": {
+ "$ref": "#/components/schemas/countryCollectionResponseDocument"
+ }
+ }
+ }
+ },
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
+ },
+ "400": {
+ "description": "The query string is invalid.",
+ "content": {
+ "application/vnd.api+json": {
+ "schema": {
+ "$ref": "#/components/schemas/errorResponseDocument"
+ }
+ }
+ }
+ }
+ }
+ },
+ "head": {
+ "tags": [
+ "countries"
+ ],
+ "summary": "Retrieves a collection of countries without returning them.",
+ "description": "Compare the returned ETag HTTP header with an earlier one to determine if the response has changed since it was fetched.",
+ "operationId": "headCountryCollection",
+ "parameters": [
+ {
+ "name": "query",
+ "in": "query",
+ "description": "For syntax, see the documentation for the [`include`](https://www.jsonapi.net/usage/reading/including-relationships.html)/[`filter`](https://www.jsonapi.net/usage/reading/filtering.html)/[`sort`](https://www.jsonapi.net/usage/reading/sorting.html)/[`page`](https://www.jsonapi.net/usage/reading/pagination.html)/[`fields`](https://www.jsonapi.net/usage/reading/sparse-fieldset-selection.html) query string parameters.",
+ "schema": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "string",
+ "nullable": true
+ },
+ "example": ""
+ }
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "The operation completed successfully.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ "Content-Length": {
+ "description": "Size of the HTTP response body, in bytes.",
+ "required": true,
+ "schema": {
+ "type": "integer",
+ "format": "int64"
+ }
+ }
+ }
+ },
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
+ },
+ "400": {
+ "description": "The query string is invalid."
+ }
+ }
+ },
+ "post": {
+ "tags": [
+ "countries"
+ ],
+ "summary": "Creates a new country.",
+ "operationId": "postCountry",
+ "parameters": [
+ {
+ "name": "query",
+ "in": "query",
+ "description": "For syntax, see the documentation for the [`include`](https://www.jsonapi.net/usage/reading/including-relationships.html)/[`filter`](https://www.jsonapi.net/usage/reading/filtering.html)/[`sort`](https://www.jsonapi.net/usage/reading/sorting.html)/[`page`](https://www.jsonapi.net/usage/reading/pagination.html)/[`fields`](https://www.jsonapi.net/usage/reading/sparse-fieldset-selection.html) query string parameters.",
+ "schema": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "string",
+ "nullable": true
+ },
+ "example": ""
+ }
+ }
+ ],
+ "requestBody": {
+ "description": "The attributes and relationships of the country to create.",
+ "content": {
+ "application/vnd.api+json": {
+ "schema": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/countryPostRequestDocument"
+ }
+ ]
+ }
+ }
+ }
+ },
+ "responses": {
+ "201": {
+ "description": "The country was successfully created, which resulted in additional changes. The newly created country is returned.",
+ "headers": {
+ "Location": {
+ "description": "The URL at which the newly created country can be retrieved.",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "format": "uri"
+ }
+ }
+ },
+ "content": {
+ "application/vnd.api+json": {
+ "schema": {
+ "$ref": "#/components/schemas/countryPrimaryResponseDocument"
+ }
+ }
+ }
+ },
+ "204": {
+ "description": "The country was successfully created, which did not result in additional changes."
+ },
+ "400": {
+ "description": "The query string is invalid or the request body is missing or malformed.",
+ "content": {
+ "application/vnd.api+json": {
+ "schema": {
+ "$ref": "#/components/schemas/errorResponseDocument"
+ }
+ }
+ }
+ },
+ "403": {
+ "description": "Client-generated IDs cannot be used at this endpoint.",
+ "content": {
+ "application/vnd.api+json": {
+ "schema": {
+ "$ref": "#/components/schemas/errorResponseDocument"
+ }
+ }
+ }
+ },
+ "409": {
+ "description": "A resource type in the request body is incompatible.",
+ "content": {
+ "application/vnd.api+json": {
+ "schema": {
+ "$ref": "#/components/schemas/errorResponseDocument"
+ }
+ }
+ }
+ },
+ "422": {
+ "description": "Validation of the request body failed.",
+ "content": {
+ "application/vnd.api+json": {
+ "schema": {
+ "$ref": "#/components/schemas/errorResponseDocument"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "/countries/{id}": {
+ "get": {
+ "tags": [
+ "countries"
+ ],
+ "summary": "Retrieves an individual country by its identifier.",
+ "operationId": "getCountry",
+ "parameters": [
+ {
+ "name": "id",
+ "in": "path",
+ "description": "The identifier of the country to retrieve.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "name": "query",
+ "in": "query",
+ "description": "For syntax, see the documentation for the [`include`](https://www.jsonapi.net/usage/reading/including-relationships.html)/[`filter`](https://www.jsonapi.net/usage/reading/filtering.html)/[`sort`](https://www.jsonapi.net/usage/reading/sorting.html)/[`page`](https://www.jsonapi.net/usage/reading/pagination.html)/[`fields`](https://www.jsonapi.net/usage/reading/sparse-fieldset-selection.html) query string parameters.",
+ "schema": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "string",
+ "nullable": true
+ },
+ "example": ""
+ }
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Successfully returns the found country.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ },
+ "content": {
+ "application/vnd.api+json": {
+ "schema": {
+ "$ref": "#/components/schemas/countryPrimaryResponseDocument"
+ }
+ }
+ }
+ },
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
+ },
+ "400": {
+ "description": "The query string is invalid.",
+ "content": {
+ "application/vnd.api+json": {
+ "schema": {
+ "$ref": "#/components/schemas/errorResponseDocument"
+ }
+ }
+ }
+ },
+ "404": {
+ "description": "The country does not exist.",
+ "content": {
+ "application/vnd.api+json": {
+ "schema": {
+ "$ref": "#/components/schemas/errorResponseDocument"
+ }
+ }
+ }
+ }
+ }
+ },
+ "head": {
+ "tags": [
+ "countries"
+ ],
+ "summary": "Retrieves an individual country by its identifier without returning it.",
+ "description": "Compare the returned ETag HTTP header with an earlier one to determine if the response has changed since it was fetched.",
+ "operationId": "headCountry",
+ "parameters": [
+ {
+ "name": "id",
+ "in": "path",
+ "description": "The identifier of the country to retrieve.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "name": "query",
+ "in": "query",
+ "description": "For syntax, see the documentation for the [`include`](https://www.jsonapi.net/usage/reading/including-relationships.html)/[`filter`](https://www.jsonapi.net/usage/reading/filtering.html)/[`sort`](https://www.jsonapi.net/usage/reading/sorting.html)/[`page`](https://www.jsonapi.net/usage/reading/pagination.html)/[`fields`](https://www.jsonapi.net/usage/reading/sparse-fieldset-selection.html) query string parameters.",
+ "schema": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "string",
+ "nullable": true
+ },
+ "example": ""
+ }
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "The operation completed successfully.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ "Content-Length": {
+ "description": "Size of the HTTP response body, in bytes.",
+ "required": true,
+ "schema": {
+ "type": "integer",
+ "format": "int64"
+ }
+ }
+ }
+ },
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
+ },
+ "400": {
+ "description": "The query string is invalid."
+ },
+ "404": {
+ "description": "The country does not exist."
+ }
+ }
+ },
+ "patch": {
+ "tags": [
+ "countries"
+ ],
+ "summary": "Updates an existing country.",
+ "operationId": "patchCountry",
+ "parameters": [
+ {
+ "name": "id",
+ "in": "path",
+ "description": "The identifier of the country to update.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "name": "query",
+ "in": "query",
+ "description": "For syntax, see the documentation for the [`include`](https://www.jsonapi.net/usage/reading/including-relationships.html)/[`filter`](https://www.jsonapi.net/usage/reading/filtering.html)/[`sort`](https://www.jsonapi.net/usage/reading/sorting.html)/[`page`](https://www.jsonapi.net/usage/reading/pagination.html)/[`fields`](https://www.jsonapi.net/usage/reading/sparse-fieldset-selection.html) query string parameters.",
+ "schema": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "string",
+ "nullable": true
+ },
+ "example": ""
+ }
+ }
+ ],
+ "requestBody": {
+ "description": "The attributes and relationships of the country to update. Omitted fields are left unchanged.",
+ "content": {
+ "application/vnd.api+json": {
+ "schema": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/countryPatchRequestDocument"
+ }
+ ]
+ }
+ }
+ }
+ },
+ "responses": {
+ "200": {
+ "description": "The country was successfully updated, which resulted in additional changes. The updated country is returned.",
+ "content": {
+ "application/vnd.api+json": {
+ "schema": {
+ "$ref": "#/components/schemas/countryPrimaryResponseDocument"
+ }
+ }
+ }
+ },
+ "204": {
+ "description": "The country was successfully updated, which did not result in additional changes."
+ },
+ "400": {
+ "description": "The query string is invalid or the request body is missing or malformed.",
+ "content": {
+ "application/vnd.api+json": {
+ "schema": {
+ "$ref": "#/components/schemas/errorResponseDocument"
+ }
+ }
+ }
+ },
+ "404": {
+ "description": "The country or a related resource does not exist.",
+ "content": {
+ "application/vnd.api+json": {
+ "schema": {
+ "$ref": "#/components/schemas/errorResponseDocument"
+ }
+ }
+ }
+ },
+ "409": {
+ "description": "A resource type or identifier in the request body is incompatible.",
+ "content": {
+ "application/vnd.api+json": {
+ "schema": {
+ "$ref": "#/components/schemas/errorResponseDocument"
+ }
+ }
+ }
+ },
+ "422": {
+ "description": "Validation of the request body failed.",
+ "content": {
+ "application/vnd.api+json": {
+ "schema": {
+ "$ref": "#/components/schemas/errorResponseDocument"
+ }
+ }
+ }
+ }
+ }
+ },
+ "delete": {
+ "tags": [
+ "countries"
+ ],
+ "summary": "Deletes an existing country by its identifier.",
+ "operationId": "deleteCountry",
+ "parameters": [
+ {
+ "name": "id",
+ "in": "path",
+ "description": "The identifier of the country to delete.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "responses": {
+ "204": {
+ "description": "The country was successfully deleted."
+ },
+ "404": {
+ "description": "The country does not exist.",
+ "content": {
+ "application/vnd.api+json": {
+ "schema": {
+ "$ref": "#/components/schemas/errorResponseDocument"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "/countries/{id}/languages": {
+ "get": {
+ "tags": [
+ "countries"
+ ],
+ "summary": "Retrieves the related languages of an individual country's languages relationship.",
+ "operationId": "getCountryLanguages",
+ "parameters": [
+ {
+ "name": "id",
+ "in": "path",
+ "description": "The identifier of the country whose related languages to retrieve.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "name": "query",
+ "in": "query",
+ "description": "For syntax, see the documentation for the [`include`](https://www.jsonapi.net/usage/reading/including-relationships.html)/[`filter`](https://www.jsonapi.net/usage/reading/filtering.html)/[`sort`](https://www.jsonapi.net/usage/reading/sorting.html)/[`page`](https://www.jsonapi.net/usage/reading/pagination.html)/[`fields`](https://www.jsonapi.net/usage/reading/sparse-fieldset-selection.html) query string parameters.",
+ "schema": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "string",
+ "nullable": true
+ },
+ "example": ""
+ }
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Successfully returns the found languages, or an empty array if none were found.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ },
+ "content": {
+ "application/vnd.api+json": {
+ "schema": {
+ "$ref": "#/components/schemas/languageCollectionResponseDocument"
+ }
+ }
+ }
+ },
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
+ },
+ "400": {
+ "description": "The query string is invalid.",
+ "content": {
+ "application/vnd.api+json": {
+ "schema": {
+ "$ref": "#/components/schemas/errorResponseDocument"
+ }
+ }
+ }
+ },
+ "404": {
+ "description": "The country does not exist.",
+ "content": {
+ "application/vnd.api+json": {
+ "schema": {
+ "$ref": "#/components/schemas/errorResponseDocument"
+ }
+ }
+ }
+ }
+ }
+ },
+ "head": {
+ "tags": [
+ "countries"
+ ],
+ "summary": "Retrieves the related languages of an individual country's languages relationship without returning them.",
+ "description": "Compare the returned ETag HTTP header with an earlier one to determine if the response has changed since it was fetched.",
+ "operationId": "headCountryLanguages",
+ "parameters": [
+ {
+ "name": "id",
+ "in": "path",
+ "description": "The identifier of the country whose related languages to retrieve.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "name": "query",
+ "in": "query",
+ "description": "For syntax, see the documentation for the [`include`](https://www.jsonapi.net/usage/reading/including-relationships.html)/[`filter`](https://www.jsonapi.net/usage/reading/filtering.html)/[`sort`](https://www.jsonapi.net/usage/reading/sorting.html)/[`page`](https://www.jsonapi.net/usage/reading/pagination.html)/[`fields`](https://www.jsonapi.net/usage/reading/sparse-fieldset-selection.html) query string parameters.",
+ "schema": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "string",
+ "nullable": true
+ },
+ "example": ""
+ }
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "The operation completed successfully.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ "Content-Length": {
+ "description": "Size of the HTTP response body, in bytes.",
+ "required": true,
+ "schema": {
+ "type": "integer",
+ "format": "int64"
+ }
+ }
+ }
+ },
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
+ },
+ "400": {
+ "description": "The query string is invalid."
+ },
+ "404": {
+ "description": "The country does not exist."
+ }
+ }
+ }
+ },
+ "/countries/{id}/relationships/languages": {
+ "get": {
+ "tags": [
+ "countries"
+ ],
+ "summary": "Retrieves the related language identities of an individual country's languages relationship.",
+ "operationId": "getCountryLanguagesRelationship",
+ "parameters": [
+ {
+ "name": "id",
+ "in": "path",
+ "description": "The identifier of the country whose related language identities to retrieve.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "name": "query",
+ "in": "query",
+ "description": "For syntax, see the documentation for the [`filter`](https://www.jsonapi.net/usage/reading/filtering.html)/[`sort`](https://www.jsonapi.net/usage/reading/sorting.html)/[`page`](https://www.jsonapi.net/usage/reading/pagination.html)/[`fields`](https://www.jsonapi.net/usage/reading/sparse-fieldset-selection.html) query string parameters.",
+ "schema": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "string",
+ "nullable": true
+ },
+ "example": ""
+ }
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Successfully returns the found language identities, or an empty array if none were found.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ },
+ "content": {
+ "application/vnd.api+json": {
+ "schema": {
+ "$ref": "#/components/schemas/languageIdentifierCollectionResponseDocument"
+ }
+ }
+ }
+ },
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
+ },
+ "400": {
+ "description": "The query string is invalid.",
+ "content": {
+ "application/vnd.api+json": {
+ "schema": {
+ "$ref": "#/components/schemas/errorResponseDocument"
+ }
+ }
+ }
+ },
+ "404": {
+ "description": "The country does not exist.",
+ "content": {
+ "application/vnd.api+json": {
+ "schema": {
+ "$ref": "#/components/schemas/errorResponseDocument"
+ }
+ }
+ }
+ }
+ }
+ },
+ "head": {
+ "tags": [
+ "countries"
+ ],
+ "summary": "Retrieves the related language identities of an individual country's languages relationship without returning them.",
+ "description": "Compare the returned ETag HTTP header with an earlier one to determine if the response has changed since it was fetched.",
+ "operationId": "headCountryLanguagesRelationship",
+ "parameters": [
+ {
+ "name": "id",
+ "in": "path",
+ "description": "The identifier of the country whose related language identities to retrieve.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "name": "query",
+ "in": "query",
+ "description": "For syntax, see the documentation for the [`filter`](https://www.jsonapi.net/usage/reading/filtering.html)/[`sort`](https://www.jsonapi.net/usage/reading/sorting.html)/[`page`](https://www.jsonapi.net/usage/reading/pagination.html)/[`fields`](https://www.jsonapi.net/usage/reading/sparse-fieldset-selection.html) query string parameters.",
+ "schema": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "string",
+ "nullable": true
+ },
+ "example": ""
+ }
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "The operation completed successfully.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ "Content-Length": {
+ "description": "Size of the HTTP response body, in bytes.",
+ "required": true,
+ "schema": {
+ "type": "integer",
+ "format": "int64"
+ }
+ }
+ }
+ },
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
+ },
+ "400": {
+ "description": "The query string is invalid."
+ },
+ "404": {
+ "description": "The country does not exist."
+ }
+ }
+ },
+ "post": {
+ "tags": [
+ "countries"
+ ],
+ "summary": "Adds existing languages to the languages relationship of an individual country.",
+ "operationId": "postCountryLanguagesRelationship",
+ "parameters": [
+ {
+ "name": "id",
+ "in": "path",
+ "description": "The identifier of the country to add languages to.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "requestBody": {
+ "description": "The identities of the languages to add to the languages relationship.",
+ "content": {
+ "application/vnd.api+json": {
+ "schema": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/toManyLanguageInRequest"
+ }
+ ]
+ }
+ }
+ }
+ },
+ "responses": {
+ "204": {
+ "description": "The languages were successfully added, which did not result in additional changes."
+ },
+ "400": {
+ "description": "The request body is missing or malformed.",
+ "content": {
+ "application/vnd.api+json": {
+ "schema": {
+ "$ref": "#/components/schemas/errorResponseDocument"
+ }
+ }
+ }
+ },
+ "404": {
+ "description": "The country does not exist.",
+ "content": {
+ "application/vnd.api+json": {
+ "schema": {
+ "$ref": "#/components/schemas/errorResponseDocument"
+ }
+ }
+ }
+ },
+ "409": {
+ "description": "A resource type in the request body is incompatible.",
+ "content": {
+ "application/vnd.api+json": {
+ "schema": {
+ "$ref": "#/components/schemas/errorResponseDocument"
+ }
+ }
+ }
+ }
+ }
+ },
+ "patch": {
+ "tags": [
+ "countries"
+ ],
+ "summary": "Assigns existing languages to the languages relationship of an individual country.",
+ "operationId": "patchCountryLanguagesRelationship",
+ "parameters": [
+ {
+ "name": "id",
+ "in": "path",
+ "description": "The identifier of the country whose languages relationship to assign.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "requestBody": {
+ "description": "The identities of the languages to assign to the languages relationship, or an empty array to clear the relationship.",
+ "content": {
+ "application/vnd.api+json": {
+ "schema": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/toManyLanguageInRequest"
+ }
+ ]
+ }
+ }
+ }
+ },
+ "responses": {
+ "204": {
+ "description": "The languages relationship was successfully updated, which did not result in additional changes."
+ },
+ "400": {
+ "description": "The request body is missing or malformed.",
+ "content": {
+ "application/vnd.api+json": {
+ "schema": {
+ "$ref": "#/components/schemas/errorResponseDocument"
+ }
+ }
+ }
+ },
+ "404": {
+ "description": "The country does not exist.",
+ "content": {
+ "application/vnd.api+json": {
+ "schema": {
+ "$ref": "#/components/schemas/errorResponseDocument"
+ }
+ }
+ }
+ },
+ "409": {
+ "description": "A resource type in the request body is incompatible.",
+ "content": {
+ "application/vnd.api+json": {
+ "schema": {
+ "$ref": "#/components/schemas/errorResponseDocument"
+ }
+ }
+ }
+ }
+ }
+ },
+ "delete": {
+ "tags": [
+ "countries"
+ ],
+ "summary": "Removes existing languages from the languages relationship of an individual country.",
+ "operationId": "deleteCountryLanguagesRelationship",
+ "parameters": [
+ {
+ "name": "id",
+ "in": "path",
+ "description": "The identifier of the country to remove languages from.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "requestBody": {
+ "description": "The identities of the languages to remove from the languages relationship.",
+ "content": {
+ "application/vnd.api+json": {
+ "schema": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/toManyLanguageInRequest"
+ }
+ ]
+ }
+ }
+ }
+ },
+ "responses": {
+ "204": {
+ "description": "The languages were successfully removed, which did not result in additional changes."
+ },
+ "400": {
+ "description": "The request body is missing or malformed.",
+ "content": {
+ "application/vnd.api+json": {
+ "schema": {
+ "$ref": "#/components/schemas/errorResponseDocument"
+ }
+ }
+ }
+ },
+ "404": {
+ "description": "The country does not exist.",
+ "content": {
+ "application/vnd.api+json": {
+ "schema": {
+ "$ref": "#/components/schemas/errorResponseDocument"
+ }
+ }
+ }
+ },
+ "409": {
+ "description": "A resource type in the request body is incompatible.",
+ "content": {
+ "application/vnd.api+json": {
+ "schema": {
+ "$ref": "#/components/schemas/errorResponseDocument"
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "components": {
+ "schemas": {
+ "countryAttributesInPatchRequest": {
+ "type": "object",
+ "properties": {
+ "name": {
+ "type": "string"
+ },
+ "population": {
+ "type": "integer",
+ "format": "int64"
+ }
+ },
+ "additionalProperties": false
+ },
+ "countryAttributesInPostRequest": {
+ "required": [
+ "name"
+ ],
+ "type": "object",
+ "properties": {
+ "name": {
+ "type": "string"
+ },
+ "population": {
+ "type": "integer",
+ "format": "int64"
+ }
+ },
+ "additionalProperties": false
+ },
+ "countryAttributesInResponse": {
+ "type": "object",
+ "properties": {
+ "name": {
+ "type": "string"
+ },
+ "population": {
+ "type": "integer",
+ "format": "int64"
+ }
+ },
+ "additionalProperties": false
+ },
+ "countryCollectionResponseDocument": {
+ "required": [
+ "data",
+ "links"
+ ],
+ "type": "object",
+ "properties": {
+ "links": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/linksInResourceCollectionDocument"
+ }
+ ]
+ },
+ "data": {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/countryDataInResponse"
+ }
+ },
+ "included": {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/dataInResponse"
+ }
+ },
+ "meta": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "object",
+ "nullable": true
+ }
+ }
+ },
+ "additionalProperties": false
+ },
+ "countryDataInPatchRequest": {
+ "required": [
+ "id",
+ "type"
+ ],
+ "type": "object",
+ "properties": {
+ "type": {
+ "$ref": "#/components/schemas/countryResourceType"
+ },
+ "id": {
+ "minLength": 1,
+ "type": "string"
+ },
+ "attributes": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/countryAttributesInPatchRequest"
+ }
+ ]
+ },
+ "relationships": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/countryRelationshipsInPatchRequest"
+ }
+ ]
+ }
+ },
+ "additionalProperties": false
+ },
+ "countryDataInPostRequest": {
+ "required": [
+ "type"
+ ],
+ "type": "object",
+ "properties": {
+ "type": {
+ "$ref": "#/components/schemas/countryResourceType"
+ },
+ "attributes": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/countryAttributesInPostRequest"
+ }
+ ]
+ },
+ "relationships": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/countryRelationshipsInPostRequest"
+ }
+ ]
+ }
+ },
+ "additionalProperties": false
+ },
+ "countryDataInResponse": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/dataInResponse"
+ },
+ {
+ "required": [
+ "links"
+ ],
+ "type": "object",
+ "properties": {
+ "attributes": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/countryAttributesInResponse"
+ }
+ ]
+ },
+ "relationships": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/countryRelationshipsInResponse"
+ }
+ ]
+ },
+ "links": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/linksInResourceData"
+ }
+ ]
+ },
+ "meta": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "object",
+ "nullable": true
+ }
+ }
+ },
+ "additionalProperties": false
+ }
+ ],
+ "additionalProperties": false
+ },
+ "countryPatchRequestDocument": {
+ "required": [
+ "data"
+ ],
+ "type": "object",
+ "properties": {
+ "data": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/countryDataInPatchRequest"
+ }
+ ]
+ }
+ },
+ "additionalProperties": false
+ },
+ "countryPostRequestDocument": {
+ "required": [
+ "data"
+ ],
+ "type": "object",
+ "properties": {
+ "data": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/countryDataInPostRequest"
+ }
+ ]
+ }
+ },
+ "additionalProperties": false
+ },
+ "countryPrimaryResponseDocument": {
+ "required": [
+ "data",
+ "links"
+ ],
+ "type": "object",
+ "properties": {
+ "links": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/linksInResourceDocument"
+ }
+ ]
+ },
+ "data": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/countryDataInResponse"
+ }
+ ]
+ },
+ "included": {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/dataInResponse"
+ }
+ },
+ "meta": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "object",
+ "nullable": true
+ }
+ }
+ },
+ "additionalProperties": false
+ },
+ "countryRelationshipsInPatchRequest": {
+ "type": "object",
+ "properties": {
+ "languages": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/toManyLanguageInRequest"
+ }
+ ]
+ }
+ },
+ "additionalProperties": false
+ },
+ "countryRelationshipsInPostRequest": {
+ "type": "object",
+ "properties": {
+ "languages": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/toManyLanguageInRequest"
+ }
+ ]
+ }
+ },
+ "additionalProperties": false
+ },
+ "countryRelationshipsInResponse": {
+ "type": "object",
+ "properties": {
+ "languages": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/toManyLanguageInResponse"
+ }
+ ]
+ }
+ },
+ "additionalProperties": false
+ },
+ "countryResourceType": {
+ "enum": [
+ "countries"
+ ],
+ "type": "string",
+ "additionalProperties": false
+ },
+ "dataInResponse": {
+ "required": [
+ "id",
+ "type"
+ ],
+ "type": "object",
+ "properties": {
+ "type": {
+ "minLength": 1,
+ "type": "string"
+ },
+ "id": {
+ "minLength": 1,
+ "type": "string"
+ }
+ },
+ "additionalProperties": false,
+ "discriminator": {
+ "propertyName": "type",
+ "mapping": {
+ "countries": "#/components/schemas/countryDataInResponse",
+ "languages": "#/components/schemas/languageDataInResponse"
+ }
+ },
+ "x-abstract": true
+ },
+ "errorLinks": {
+ "type": "object",
+ "properties": {
+ "about": {
+ "type": "string",
+ "nullable": true
+ },
+ "type": {
+ "type": "string",
+ "nullable": true
+ }
+ },
+ "additionalProperties": false
+ },
+ "errorObject": {
+ "type": "object",
+ "properties": {
+ "id": {
+ "type": "string",
+ "nullable": true
+ },
+ "links": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/errorLinks"
+ }
+ ],
+ "nullable": true
+ },
+ "status": {
+ "type": "string"
+ },
+ "code": {
+ "type": "string",
+ "nullable": true
+ },
+ "title": {
+ "type": "string",
+ "nullable": true
+ },
+ "detail": {
+ "type": "string",
+ "nullable": true
+ },
+ "source": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/errorSource"
+ }
+ ],
+ "nullable": true
+ },
+ "meta": {
+ "type": "object",
+ "additionalProperties": { },
+ "nullable": true
+ }
+ },
+ "additionalProperties": false
+ },
+ "errorResponseDocument": {
+ "required": [
+ "errors"
+ ],
+ "type": "object",
+ "properties": {
+ "errors": {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/errorObject"
+ }
+ }
+ },
+ "additionalProperties": false
+ },
+ "errorSource": {
+ "type": "object",
+ "properties": {
+ "pointer": {
+ "type": "string",
+ "nullable": true
+ },
+ "parameter": {
+ "type": "string",
+ "nullable": true
+ },
+ "header": {
+ "type": "string",
+ "nullable": true
+ }
+ },
+ "additionalProperties": false
+ },
+ "languageAttributesInResponse": {
+ "type": "object",
+ "properties": {
+ "code": {
+ "type": "string"
+ },
+ "name": {
+ "type": "string"
+ }
+ },
+ "additionalProperties": false
+ },
+ "languageCollectionResponseDocument": {
+ "required": [
+ "data",
+ "links"
+ ],
+ "type": "object",
+ "properties": {
+ "links": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/linksInResourceCollectionDocument"
+ }
+ ]
+ },
+ "data": {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/languageDataInResponse"
+ }
+ },
+ "included": {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/dataInResponse"
+ }
+ },
+ "meta": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "object",
+ "nullable": true
+ }
+ }
+ },
+ "additionalProperties": false
+ },
+ "languageDataInResponse": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/dataInResponse"
+ },
+ {
+ "required": [
+ "links"
+ ],
+ "type": "object",
+ "properties": {
+ "attributes": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/languageAttributesInResponse"
+ }
+ ]
+ },
+ "links": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/linksInResourceData"
+ }
+ ]
+ },
+ "meta": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "object",
+ "nullable": true
+ }
+ }
+ },
+ "additionalProperties": false
+ }
+ ],
+ "additionalProperties": false
+ },
+ "languageIdentifier": {
+ "required": [
+ "id",
+ "type"
+ ],
+ "type": "object",
+ "properties": {
+ "type": {
+ "$ref": "#/components/schemas/languageResourceType"
+ },
+ "id": {
+ "minLength": 1,
+ "type": "string"
+ }
+ },
+ "additionalProperties": false
+ },
+ "languageIdentifierCollectionResponseDocument": {
+ "required": [
+ "data",
+ "links"
+ ],
+ "type": "object",
+ "properties": {
+ "links": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/linksInResourceIdentifierCollectionDocument"
+ }
+ ]
+ },
+ "data": {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/languageIdentifier"
+ }
+ },
+ "meta": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "object",
+ "nullable": true
+ }
+ }
+ },
+ "additionalProperties": false
+ },
+ "languageResourceType": {
+ "enum": [
+ "languages"
+ ],
+ "type": "string",
+ "additionalProperties": false
+ },
+ "linksInRelationship": {
+ "required": [
+ "related",
+ "self"
+ ],
+ "type": "object",
+ "properties": {
+ "self": {
+ "minLength": 1,
+ "type": "string"
+ },
+ "related": {
+ "minLength": 1,
+ "type": "string"
+ }
+ },
+ "additionalProperties": false
+ },
+ "linksInResourceCollectionDocument": {
+ "required": [
+ "self"
+ ],
+ "type": "object",
+ "properties": {
+ "self": {
+ "minLength": 1,
+ "type": "string"
+ },
+ "describedby": {
+ "type": "string"
+ },
+ "first": {
+ "type": "string"
+ },
+ "last": {
+ "type": "string"
+ },
+ "prev": {
+ "type": "string"
+ },
+ "next": {
+ "type": "string"
+ }
+ },
+ "additionalProperties": false
+ },
+ "linksInResourceData": {
+ "required": [
+ "self"
+ ],
+ "type": "object",
+ "properties": {
+ "self": {
+ "minLength": 1,
+ "type": "string"
+ }
+ },
+ "additionalProperties": false
+ },
+ "linksInResourceDocument": {
+ "required": [
+ "self"
+ ],
+ "type": "object",
+ "properties": {
+ "self": {
+ "minLength": 1,
+ "type": "string"
+ },
+ "describedby": {
+ "type": "string"
+ }
+ },
+ "additionalProperties": false
+ },
+ "linksInResourceIdentifierCollectionDocument": {
+ "required": [
+ "related",
+ "self"
+ ],
+ "type": "object",
+ "properties": {
+ "self": {
+ "minLength": 1,
+ "type": "string"
+ },
+ "related": {
+ "minLength": 1,
+ "type": "string"
+ },
+ "describedby": {
+ "type": "string"
+ },
+ "first": {
+ "type": "string"
+ },
+ "last": {
+ "type": "string"
+ },
+ "prev": {
+ "type": "string"
+ },
+ "next": {
+ "type": "string"
+ }
+ },
+ "additionalProperties": false
+ },
+ "toManyLanguageInRequest": {
+ "required": [
+ "data"
+ ],
+ "type": "object",
+ "properties": {
+ "data": {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/languageIdentifier"
+ }
+ }
+ },
+ "additionalProperties": false
+ },
+ "toManyLanguageInResponse": {
+ "required": [
+ "links"
+ ],
+ "type": "object",
+ "properties": {
+ "links": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/linksInRelationship"
+ }
+ ]
+ },
+ "data": {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/languageIdentifier"
+ }
+ },
+ "meta": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "object",
+ "nullable": true
+ }
+ }
+ },
+ "additionalProperties": false
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/test/OpenApiEndToEndTests/OpenApiEndToEndTests.csproj b/test/OpenApiEndToEndTests/OpenApiEndToEndTests.csproj
index d2fae2dc01..6566c17b4b 100644
--- a/test/OpenApiEndToEndTests/OpenApiEndToEndTests.csproj
+++ b/test/OpenApiEndToEndTests/OpenApiEndToEndTests.csproj
@@ -23,12 +23,19 @@
+
+ OpenApiEndToEndTests.Headers.GeneratedCode
+ HeadersClient
+ HeadersClient.cs
+ NSwagCSharp
+ /ClientClassAccessModifier:internal /GenerateExceptionClasses:false /WrapResponses:true /GenerateResponseClasses:false /ResponseClass:ApiResponse /AdditionalNamespaceUsages:JsonApiDotNetCore.OpenApi.Client /GenerateNullableReferenceTypes:true
+
OpenApiEndToEndTests.QueryStrings.GeneratedCode
QueryStringsClient
QueryStringsClient.cs
NSwagCSharp
- /ClientClassAccessModifier:internal /GenerateExceptionClasses:false /AdditionalNamespaceUsages:JsonApiDotNetCore.OpenApi.Client.Exceptions /GenerateNullableReferenceTypes:true
+ /ClientClassAccessModifier:internal /GenerateExceptionClasses:false /AdditionalNamespaceUsages:JsonApiDotNetCore.OpenApi.Client /GenerateNullableReferenceTypes:true
diff --git a/test/OpenApiEndToEndTests/QueryStrings/FilterTests.cs b/test/OpenApiEndToEndTests/QueryStrings/FilterTests.cs
index 27e0be14fb..b4e2d82ebe 100644
--- a/test/OpenApiEndToEndTests/QueryStrings/FilterTests.cs
+++ b/test/OpenApiEndToEndTests/QueryStrings/FilterTests.cs
@@ -1,6 +1,6 @@
using System.Net;
using FluentAssertions;
-using JsonApiDotNetCore.OpenApi.Client.Exceptions;
+using JsonApiDotNetCore.OpenApi.Client;
using OpenApiEndToEndTests.QueryStrings.GeneratedCode;
using OpenApiTests;
using OpenApiTests.QueryStrings;
@@ -48,7 +48,7 @@ await _testContext.RunOnDatabaseAsync(async dbContext =>
};
// Act
- NodeCollectionResponseDocument response = await apiClient.GetNodeCollectionAsync(queryString);
+ NodeCollectionResponseDocument response = await apiClient.GetNodeCollectionAsync(queryString, null);
// Assert
response.Data.Should().HaveCount(1);
@@ -84,7 +84,7 @@ await _testContext.RunOnDatabaseAsync(async dbContext =>
};
// Act
- NodeCollectionResponseDocument response = await apiClient.GetNodeChildrenAsync(node.StringId!, queryString);
+ NodeCollectionResponseDocument response = await apiClient.GetNodeChildrenAsync(node.StringId!, queryString, null);
// Assert
response.Data.Should().HaveCount(1);
@@ -120,7 +120,7 @@ await _testContext.RunOnDatabaseAsync(async dbContext =>
};
// Act
- NodeIdentifierCollectionResponseDocument response = await apiClient.GetNodeChildrenRelationshipAsync(node.StringId!, queryString);
+ NodeIdentifierCollectionResponseDocument response = await apiClient.GetNodeChildrenRelationshipAsync(node.StringId!, queryString, null);
// Assert
response.Data.Should().HaveCount(1);
@@ -142,7 +142,7 @@ public async Task Cannot_use_empty_filter()
};
// Act
- Func action = async () => _ = await apiClient.GetNodeAsync(Unknown.StringId.Int64, queryString);
+ Func action = async () => _ = await apiClient.GetNodeAsync(Unknown.StringId.Int64, queryString, null);
// Assert
ApiException exception = (await action.Should().ThrowExactlyAsync>()).Which;
diff --git a/test/OpenApiEndToEndTests/QueryStrings/IncludeTests.cs b/test/OpenApiEndToEndTests/QueryStrings/IncludeTests.cs
index 3cd1348d52..0892ff67fd 100644
--- a/test/OpenApiEndToEndTests/QueryStrings/IncludeTests.cs
+++ b/test/OpenApiEndToEndTests/QueryStrings/IncludeTests.cs
@@ -46,7 +46,7 @@ await _testContext.RunOnDatabaseAsync(async dbContext =>
};
// Act
- NodeCollectionResponseDocument response = await apiClient.GetNodeCollectionAsync(queryString);
+ NodeCollectionResponseDocument response = await apiClient.GetNodeCollectionAsync(queryString, null);
// Assert
response.Data.ShouldHaveCount(1);
@@ -81,7 +81,7 @@ await _testContext.RunOnDatabaseAsync(async dbContext =>
};
// Act
- NodePrimaryResponseDocument response = await apiClient.GetNodeAsync(node.StringId!, queryString);
+ NodePrimaryResponseDocument response = await apiClient.GetNodeAsync(node.StringId!, queryString, null);
// Assert
response.Data.Id.Should().Be(node.StringId);
@@ -116,7 +116,7 @@ await _testContext.RunOnDatabaseAsync(async dbContext =>
};
// Act
- NameValuePairCollectionResponseDocument response = await apiClient.GetNodeValuesAsync(node.StringId!, queryString);
+ NameValuePairCollectionResponseDocument response = await apiClient.GetNodeValuesAsync(node.StringId!, queryString, null);
// Assert
response.Data.ShouldHaveCount(2);
@@ -150,7 +150,7 @@ await _testContext.RunOnDatabaseAsync(async dbContext =>
};
// Act
- NullableNodeSecondaryResponseDocument response = await apiClient.GetNodeParentAsync(node.StringId!, queryString);
+ NullableNodeSecondaryResponseDocument response = await apiClient.GetNodeParentAsync(node.StringId!, queryString, null);
// Assert
response.Data.ShouldNotBeNull();
@@ -184,7 +184,7 @@ await _testContext.RunOnDatabaseAsync(async dbContext =>
};
// Act
- NodePrimaryResponseDocument response = await apiClient.GetNodeAsync(node.StringId!, queryString);
+ NodePrimaryResponseDocument response = await apiClient.GetNodeAsync(node.StringId!, queryString, null);
// Assert
response.Data.Id.Should().Be(node.StringId);
diff --git a/test/OpenApiEndToEndTests/QueryStrings/PaginationTests.cs b/test/OpenApiEndToEndTests/QueryStrings/PaginationTests.cs
index dc7c5892b3..35eb780024 100644
--- a/test/OpenApiEndToEndTests/QueryStrings/PaginationTests.cs
+++ b/test/OpenApiEndToEndTests/QueryStrings/PaginationTests.cs
@@ -1,6 +1,6 @@
using System.Net;
using FluentAssertions;
-using JsonApiDotNetCore.OpenApi.Client.Exceptions;
+using JsonApiDotNetCore.OpenApi.Client;
using OpenApiEndToEndTests.QueryStrings.GeneratedCode;
using OpenApiTests;
using OpenApiTests.QueryStrings;
@@ -47,7 +47,7 @@ await _testContext.RunOnDatabaseAsync(async dbContext =>
};
// Act
- NodeCollectionResponseDocument response = await apiClient.GetNodeCollectionAsync(queryString);
+ NodeCollectionResponseDocument response = await apiClient.GetNodeCollectionAsync(queryString, null);
// Assert
response.Data.Should().HaveCount(1);
@@ -80,7 +80,7 @@ await _testContext.RunOnDatabaseAsync(async dbContext =>
};
// Act
- NodeCollectionResponseDocument response = await apiClient.GetNodeChildrenAsync(node.StringId!, queryString);
+ NodeCollectionResponseDocument response = await apiClient.GetNodeChildrenAsync(node.StringId!, queryString, null);
// Assert
response.Data.Should().HaveCount(2);
@@ -114,7 +114,7 @@ await _testContext.RunOnDatabaseAsync(async dbContext =>
};
// Act
- NodeIdentifierCollectionResponseDocument response = await apiClient.GetNodeChildrenRelationshipAsync(node.StringId!, queryString);
+ NodeIdentifierCollectionResponseDocument response = await apiClient.GetNodeChildrenRelationshipAsync(node.StringId!, queryString, null);
// Assert
response.Data.Should().HaveCount(1);
@@ -136,7 +136,7 @@ public async Task Cannot_use_empty_page_size()
};
// Act
- Func action = async () => _ = await apiClient.GetNodeAsync(Unknown.StringId.Int64, queryString);
+ Func action = async () => _ = await apiClient.GetNodeAsync(Unknown.StringId.Int64, queryString, null);
// Assert
ApiException exception = (await action.Should().ThrowExactlyAsync>()).Which;
@@ -165,7 +165,7 @@ public async Task Cannot_use_empty_page_number()
};
// Act
- Func action = async () => _ = await apiClient.GetNodeAsync(Unknown.StringId.Int64, queryString);
+ Func action = async () => _ = await apiClient.GetNodeAsync(Unknown.StringId.Int64, queryString, null);
// Assert
ApiException exception = (await action.Should().ThrowExactlyAsync>()).Which;
diff --git a/test/OpenApiEndToEndTests/QueryStrings/SortTests.cs b/test/OpenApiEndToEndTests/QueryStrings/SortTests.cs
index b0ee517f3e..e988989632 100644
--- a/test/OpenApiEndToEndTests/QueryStrings/SortTests.cs
+++ b/test/OpenApiEndToEndTests/QueryStrings/SortTests.cs
@@ -1,6 +1,6 @@
using System.Net;
using FluentAssertions;
-using JsonApiDotNetCore.OpenApi.Client.Exceptions;
+using JsonApiDotNetCore.OpenApi.Client;
using OpenApiEndToEndTests.QueryStrings.GeneratedCode;
using OpenApiTests;
using OpenApiTests.QueryStrings;
@@ -48,7 +48,7 @@ await _testContext.RunOnDatabaseAsync(async dbContext =>
};
// Act
- NodeCollectionResponseDocument response = await apiClient.GetNodeCollectionAsync(queryString);
+ NodeCollectionResponseDocument response = await apiClient.GetNodeCollectionAsync(queryString, null);
// Assert
response.Data.Should().HaveCount(2);
@@ -81,7 +81,7 @@ await _testContext.RunOnDatabaseAsync(async dbContext =>
};
// Act
- NodeCollectionResponseDocument response = await apiClient.GetNodeChildrenAsync(node.StringId!, queryString);
+ NodeCollectionResponseDocument response = await apiClient.GetNodeChildrenAsync(node.StringId!, queryString, null);
// Assert
response.Data.Should().HaveCount(2);
@@ -114,7 +114,7 @@ await _testContext.RunOnDatabaseAsync(async dbContext =>
};
// Act
- NodeIdentifierCollectionResponseDocument response = await apiClient.GetNodeChildrenRelationshipAsync(node.StringId!, queryString);
+ NodeIdentifierCollectionResponseDocument response = await apiClient.GetNodeChildrenRelationshipAsync(node.StringId!, queryString, null);
// Assert
response.Data.Should().HaveCount(2);
@@ -135,7 +135,7 @@ public async Task Cannot_use_empty_sort()
};
// Act
- Func action = async () => _ = await apiClient.GetNodeAsync(Unknown.StringId.Int64, queryString);
+ Func action = async () => _ = await apiClient.GetNodeAsync(Unknown.StringId.Int64, queryString, null);
// Assert
ApiException exception = (await action.Should().ThrowExactlyAsync>()).Which;
diff --git a/test/OpenApiEndToEndTests/QueryStrings/SparseFieldSetTests.cs b/test/OpenApiEndToEndTests/QueryStrings/SparseFieldSetTests.cs
index 7172465408..05fa1f710a 100644
--- a/test/OpenApiEndToEndTests/QueryStrings/SparseFieldSetTests.cs
+++ b/test/OpenApiEndToEndTests/QueryStrings/SparseFieldSetTests.cs
@@ -45,7 +45,7 @@ await _testContext.RunOnDatabaseAsync(async dbContext =>
};
// Act
- NodeCollectionResponseDocument response = await apiClient.GetNodeCollectionAsync(queryString);
+ NodeCollectionResponseDocument response = await apiClient.GetNodeCollectionAsync(queryString, null);
// Assert
response.Data.Should().HaveCount(1);
@@ -76,7 +76,7 @@ await _testContext.RunOnDatabaseAsync(async dbContext =>
};
// Act
- NodePrimaryResponseDocument response = await apiClient.GetNodeAsync(node.StringId!, queryString);
+ NodePrimaryResponseDocument response = await apiClient.GetNodeAsync(node.StringId!, queryString, null);
// Assert
response.Data.Id.Should().Be(node.StringId);
@@ -109,7 +109,7 @@ await _testContext.RunOnDatabaseAsync(async dbContext =>
};
// Act
- NodeCollectionResponseDocument response = await apiClient.GetNodeChildrenAsync(node.StringId!, queryString);
+ NodeCollectionResponseDocument response = await apiClient.GetNodeChildrenAsync(node.StringId!, queryString, null);
// Assert
response.Data.Should().HaveCount(1);
@@ -142,7 +142,7 @@ await _testContext.RunOnDatabaseAsync(async dbContext =>
};
// Act
- NullableNodeSecondaryResponseDocument response = await apiClient.GetNodeParentAsync(node.StringId!, queryString);
+ NullableNodeSecondaryResponseDocument response = await apiClient.GetNodeParentAsync(node.StringId!, queryString, null);
// Assert
response.Data.ShouldNotBeNull();
@@ -174,7 +174,7 @@ await _testContext.RunOnDatabaseAsync(async dbContext =>
};
// Act
- NodePrimaryResponseDocument response = await apiClient.GetNodeAsync(node.StringId!, queryString);
+ NodePrimaryResponseDocument response = await apiClient.GetNodeAsync(node.StringId!, queryString, null);
// Assert
response.Data.Id.Should().Be(node.StringId);
diff --git a/test/OpenApiEndToEndTests/QueryStrings/swagger.g.json b/test/OpenApiEndToEndTests/QueryStrings/swagger.g.json
index f9c5132ed0..3b04c1abc9 100644
--- a/test/OpenApiEndToEndTests/QueryStrings/swagger.g.json
+++ b/test/OpenApiEndToEndTests/QueryStrings/swagger.g.json
@@ -30,11 +30,28 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
"description": "Successfully returns the found nameValuePairs, or an empty array if none were found.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ },
"content": {
"application/vnd.api+json": {
"schema": {
@@ -43,6 +60,18 @@
}
}
},
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
+ },
"400": {
"description": "The query string is invalid.",
"content": {
@@ -75,11 +104,48 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
- "description": "The operation completed successfully."
+ "description": "The operation completed successfully.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ "Content-Length": {
+ "description": "Size of the HTTP response body, in bytes.",
+ "required": true,
+ "schema": {
+ "type": "integer",
+ "format": "int64"
+ }
+ }
+ }
+ },
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
},
"400": {
"description": "The query string is invalid."
@@ -124,6 +190,16 @@
"responses": {
"201": {
"description": "The nameValuePair was successfully created, which resulted in additional changes. The newly created nameValuePair is returned.",
+ "headers": {
+ "Location": {
+ "description": "The URL at which the newly created nameValuePair can be retrieved.",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "format": "uri"
+ }
+ }
+ },
"content": {
"application/vnd.api+json": {
"schema": {
@@ -207,11 +283,28 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
"description": "Successfully returns the found nameValuePair.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ },
"content": {
"application/vnd.api+json": {
"schema": {
@@ -220,6 +313,18 @@
}
}
},
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
+ },
"400": {
"description": "The query string is invalid.",
"content": {
@@ -271,11 +376,48 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
- "description": "The operation completed successfully."
+ "description": "The operation completed successfully.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ "Content-Length": {
+ "description": "Size of the HTTP response body, in bytes.",
+ "required": true,
+ "schema": {
+ "type": "integer",
+ "format": "int64"
+ }
+ }
+ }
+ },
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
},
"400": {
"description": "The query string is invalid."
@@ -448,11 +590,28 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
"description": "Successfully returns the found node, or `null` if it was not found.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ },
"content": {
"application/vnd.api+json": {
"schema": {
@@ -461,6 +620,18 @@
}
}
},
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
+ },
"400": {
"description": "The query string is invalid.",
"content": {
@@ -512,11 +683,48 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
- "description": "The operation completed successfully."
+ "description": "The operation completed successfully.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ "Content-Length": {
+ "description": "Size of the HTTP response body, in bytes.",
+ "required": true,
+ "schema": {
+ "type": "integer",
+ "format": "int64"
+ }
+ }
+ }
+ },
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
},
"400": {
"description": "The query string is invalid."
@@ -556,11 +764,28 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
"description": "Successfully returns the found node identity, or `null` if it was not found.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ },
"content": {
"application/vnd.api+json": {
"schema": {
@@ -569,6 +794,18 @@
}
}
},
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
+ },
"400": {
"description": "The query string is invalid.",
"content": {
@@ -620,11 +857,48 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
- "description": "The operation completed successfully."
+ "description": "The operation completed successfully.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ "Content-Length": {
+ "description": "Size of the HTTP response body, in bytes.",
+ "required": true,
+ "schema": {
+ "type": "integer",
+ "format": "int64"
+ }
+ }
+ }
+ },
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
},
"400": {
"description": "The query string is invalid."
@@ -722,11 +996,28 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
"description": "Successfully returns the found nodes, or an empty array if none were found.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ },
"content": {
"application/vnd.api+json": {
"schema": {
@@ -735,6 +1026,18 @@
}
}
},
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
+ },
"400": {
"description": "The query string is invalid.",
"content": {
@@ -767,11 +1070,48 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
- "description": "The operation completed successfully."
+ "description": "The operation completed successfully.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ "Content-Length": {
+ "description": "Size of the HTTP response body, in bytes.",
+ "required": true,
+ "schema": {
+ "type": "integer",
+ "format": "int64"
+ }
+ }
+ }
+ },
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
},
"400": {
"description": "The query string is invalid."
@@ -816,6 +1156,16 @@
"responses": {
"201": {
"description": "The node was successfully created, which resulted in additional changes. The newly created node is returned.",
+ "headers": {
+ "Location": {
+ "description": "The URL at which the newly created node can be retrieved.",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "format": "uri"
+ }
+ }
+ },
"content": {
"application/vnd.api+json": {
"schema": {
@@ -899,11 +1249,28 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
"description": "Successfully returns the found node.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ },
"content": {
"application/vnd.api+json": {
"schema": {
@@ -912,6 +1279,18 @@
}
}
},
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
+ },
"400": {
"description": "The query string is invalid.",
"content": {
@@ -963,11 +1342,48 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
- "description": "The operation completed successfully."
+ "description": "The operation completed successfully.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ "Content-Length": {
+ "description": "Size of the HTTP response body, in bytes.",
+ "required": true,
+ "schema": {
+ "type": "integer",
+ "format": "int64"
+ }
+ }
+ }
+ },
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
},
"400": {
"description": "The query string is invalid."
@@ -1140,11 +1556,28 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
"description": "Successfully returns the found nodes, or an empty array if none were found.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ },
"content": {
"application/vnd.api+json": {
"schema": {
@@ -1153,6 +1586,18 @@
}
}
},
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
+ },
"400": {
"description": "The query string is invalid.",
"content": {
@@ -1204,11 +1649,48 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
- "description": "The operation completed successfully."
+ "description": "The operation completed successfully.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ "Content-Length": {
+ "description": "Size of the HTTP response body, in bytes.",
+ "required": true,
+ "schema": {
+ "type": "integer",
+ "format": "int64"
+ }
+ }
+ }
+ },
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
},
"400": {
"description": "The query string is invalid."
@@ -1248,11 +1730,28 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
"description": "Successfully returns the found node identities, or an empty array if none were found.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ },
"content": {
"application/vnd.api+json": {
"schema": {
@@ -1261,6 +1760,18 @@
}
}
},
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
+ },
"400": {
"description": "The query string is invalid.",
"content": {
@@ -1312,11 +1823,48 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
- "description": "The operation completed successfully."
+ "description": "The operation completed successfully.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ "Content-Length": {
+ "description": "Size of the HTTP response body, in bytes.",
+ "required": true,
+ "schema": {
+ "type": "integer",
+ "format": "int64"
+ }
+ }
+ }
+ },
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
},
"400": {
"description": "The query string is invalid."
@@ -1557,11 +2105,28 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
"description": "Successfully returns the found node, or `null` if it was not found.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ },
"content": {
"application/vnd.api+json": {
"schema": {
@@ -1570,6 +2135,18 @@
}
}
},
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
+ },
"400": {
"description": "The query string is invalid.",
"content": {
@@ -1621,11 +2198,48 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
- "description": "The operation completed successfully."
+ "description": "The operation completed successfully.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ "Content-Length": {
+ "description": "Size of the HTTP response body, in bytes.",
+ "required": true,
+ "schema": {
+ "type": "integer",
+ "format": "int64"
+ }
+ }
+ }
+ },
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
},
"400": {
"description": "The query string is invalid."
@@ -1665,11 +2279,28 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
"description": "Successfully returns the found node identity, or `null` if it was not found.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ },
"content": {
"application/vnd.api+json": {
"schema": {
@@ -1678,6 +2309,18 @@
}
}
},
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
+ },
"400": {
"description": "The query string is invalid.",
"content": {
@@ -1729,11 +2372,48 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
- "description": "The operation completed successfully."
+ "description": "The operation completed successfully.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ "Content-Length": {
+ "description": "Size of the HTTP response body, in bytes.",
+ "required": true,
+ "schema": {
+ "type": "integer",
+ "format": "int64"
+ }
+ }
+ }
+ },
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
},
"400": {
"description": "The query string is invalid."
@@ -1840,11 +2520,28 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
"description": "Successfully returns the found nameValuePairs, or an empty array if none were found.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ },
"content": {
"application/vnd.api+json": {
"schema": {
@@ -1853,6 +2550,18 @@
}
}
},
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
+ },
"400": {
"description": "The query string is invalid.",
"content": {
@@ -1904,11 +2613,48 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
- "description": "The operation completed successfully."
+ "description": "The operation completed successfully.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ "Content-Length": {
+ "description": "Size of the HTTP response body, in bytes.",
+ "required": true,
+ "schema": {
+ "type": "integer",
+ "format": "int64"
+ }
+ }
+ }
+ },
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
},
"400": {
"description": "The query string is invalid."
@@ -1948,11 +2694,28 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
"description": "Successfully returns the found nameValuePair identities, or an empty array if none were found.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ },
"content": {
"application/vnd.api+json": {
"schema": {
@@ -1961,6 +2724,18 @@
}
}
},
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
+ },
"400": {
"description": "The query string is invalid.",
"content": {
@@ -2012,11 +2787,48 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
- "description": "The operation completed successfully."
+ "description": "The operation completed successfully.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ "Content-Length": {
+ "description": "Size of the HTTP response body, in bytes.",
+ "required": true,
+ "schema": {
+ "type": "integer",
+ "format": "int64"
+ }
+ }
+ }
+ },
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
},
"400": {
"description": "The query string is invalid."
diff --git a/test/OpenApiTests/DocComments/DocCommentsTests.cs b/test/OpenApiTests/DocComments/DocCommentsTests.cs
index 71fbc68404..768a53decc 100644
--- a/test/OpenApiTests/DocComments/DocCommentsTests.cs
+++ b/test/OpenApiTests/DocComments/DocCommentsTests.cs
@@ -67,15 +67,21 @@ public async Task Endpoints_are_documented()
getElement.Should().ContainPath("parameters").With(parametersElement =>
{
- parametersElement.EnumerateArray().ShouldHaveCount(1);
+ parametersElement.EnumerateArray().ShouldHaveCount(2);
parametersElement.Should().HaveProperty("[0].in", "query");
parametersElement.Should().HaveProperty("[0].description", ResourceTextQueryString);
+ parametersElement.Should().HaveProperty("[1].name", "If-None-Match");
+ parametersElement.Should().HaveProperty("[1].in", "header");
+ parametersElement.Should().HaveProperty("[1].description", "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.");
});
getElement.Should().ContainPath("responses").With(responsesElement =>
{
- responsesElement.EnumerateObject().ShouldHaveCount(2);
+ responsesElement.EnumerateObject().ShouldHaveCount(3);
responsesElement.Should().HaveProperty("200.description", "Successfully returns the found skyscrapers, or an empty array if none were found.");
+ responsesElement.Should().HaveProperty("200.headers.ETag.description", "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.");
+ responsesElement.Should().HaveProperty("304.description", "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.");
+ responsesElement.Should().HaveProperty("304.headers.ETag.description", "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.");
responsesElement.Should().HaveProperty("400.description", "The query string is invalid.");
});
});
@@ -87,15 +93,22 @@ public async Task Endpoints_are_documented()
headElement.Should().ContainPath("parameters").With(parametersElement =>
{
- parametersElement.EnumerateArray().ShouldHaveCount(1);
+ parametersElement.EnumerateArray().ShouldHaveCount(2);
parametersElement.Should().HaveProperty("[0].in", "query");
parametersElement.Should().HaveProperty("[0].description", ResourceTextQueryString);
+ parametersElement.Should().HaveProperty("[1].name", "If-None-Match");
+ parametersElement.Should().HaveProperty("[1].in", "header");
+ parametersElement.Should().HaveProperty("[1].description", "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.");
});
headElement.Should().ContainPath("responses").With(responsesElement =>
{
- responsesElement.EnumerateObject().ShouldHaveCount(2);
+ responsesElement.EnumerateObject().ShouldHaveCount(3);
responsesElement.Should().HaveProperty("200.description", "The operation completed successfully.");
+ responsesElement.Should().HaveProperty("200.headers.ETag.description", "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.");
+ responsesElement.Should().HaveProperty("200.headers.Content-Length.description", "Size of the HTTP response body, in bytes.");
+ responsesElement.Should().HaveProperty("304.description", "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.");
+ responsesElement.Should().HaveProperty("304.headers.ETag.description", "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.");
responsesElement.Should().HaveProperty("400.description", "The query string is invalid.");
});
});
@@ -115,6 +128,7 @@ public async Task Endpoints_are_documented()
{
responsesElement.EnumerateObject().ShouldHaveCount(5);
responsesElement.Should().HaveProperty("201.description", "The skyscraper was successfully created, which resulted in additional changes. The newly created skyscraper is returned.");
+ responsesElement.Should().HaveProperty("201.headers.Location.description", "The URL at which the newly created skyscraper can be retrieved.");
responsesElement.Should().HaveProperty("204.description", "The skyscraper was successfully created, which did not result in additional changes.");
responsesElement.Should().HaveProperty("400.description", "The query string is invalid or the request body is missing or malformed.");
responsesElement.Should().HaveProperty("409.description", "A resource type in the request body is incompatible.");
@@ -131,17 +145,23 @@ public async Task Endpoints_are_documented()
getElement.Should().ContainPath("parameters").With(parametersElement =>
{
- parametersElement.EnumerateArray().ShouldHaveCount(2);
+ parametersElement.EnumerateArray().ShouldHaveCount(3);
parametersElement.Should().HaveProperty("[0].in", "path");
parametersElement.Should().HaveProperty("[0].description", "The identifier of the skyscraper to retrieve.");
parametersElement.Should().HaveProperty("[1].in", "query");
parametersElement.Should().HaveProperty("[1].description", ResourceTextQueryString);
+ parametersElement.Should().HaveProperty("[2].name", "If-None-Match");
+ parametersElement.Should().HaveProperty("[2].in", "header");
+ parametersElement.Should().HaveProperty("[2].description", "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.");
});
getElement.Should().ContainPath("responses").With(responsesElement =>
{
- responsesElement.EnumerateObject().ShouldHaveCount(3);
+ responsesElement.EnumerateObject().ShouldHaveCount(4);
responsesElement.Should().HaveProperty("200.description", "Successfully returns the found skyscraper.");
+ responsesElement.Should().HaveProperty("200.headers.ETag.description", "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.");
+ responsesElement.Should().HaveProperty("304.description", "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.");
+ responsesElement.Should().HaveProperty("304.headers.ETag.description", "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.");
responsesElement.Should().HaveProperty("400.description", "The query string is invalid.");
responsesElement.Should().HaveProperty("404.description", "The skyscraper does not exist.");
});
@@ -154,17 +174,24 @@ public async Task Endpoints_are_documented()
headElement.Should().ContainPath("parameters").With(parametersElement =>
{
- parametersElement.EnumerateArray().ShouldHaveCount(2);
+ parametersElement.EnumerateArray().ShouldHaveCount(3);
parametersElement.Should().HaveProperty("[0].in", "path");
parametersElement.Should().HaveProperty("[0].description", "The identifier of the skyscraper to retrieve.");
parametersElement.Should().HaveProperty("[1].in", "query");
parametersElement.Should().HaveProperty("[1].description", ResourceTextQueryString);
+ parametersElement.Should().HaveProperty("[2].name", "If-None-Match");
+ parametersElement.Should().HaveProperty("[2].in", "header");
+ parametersElement.Should().HaveProperty("[2].description", "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.");
});
headElement.Should().ContainPath("responses").With(responsesElement =>
{
- responsesElement.EnumerateObject().ShouldHaveCount(3);
+ responsesElement.EnumerateObject().ShouldHaveCount(4);
responsesElement.Should().HaveProperty("200.description", "The operation completed successfully.");
+ responsesElement.Should().HaveProperty("200.headers.ETag.description", "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.");
+ responsesElement.Should().HaveProperty("200.headers.Content-Length.description", "Size of the HTTP response body, in bytes.");
+ responsesElement.Should().HaveProperty("304.description", "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.");
+ responsesElement.Should().HaveProperty("304.headers.ETag.description", "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.");
responsesElement.Should().HaveProperty("400.description", "The query string is invalid.");
responsesElement.Should().HaveProperty("404.description", "The skyscraper does not exist.");
});
@@ -225,17 +252,23 @@ public async Task Endpoints_are_documented()
getElement.Should().ContainPath("parameters").With(parametersElement =>
{
- parametersElement.EnumerateArray().ShouldHaveCount(2);
+ parametersElement.EnumerateArray().ShouldHaveCount(3);
parametersElement.Should().HaveProperty("[0].in", "path");
parametersElement.Should().HaveProperty("[0].description", "The identifier of the skyscraper whose related elevator to retrieve.");
parametersElement.Should().HaveProperty("[1].in", "query");
parametersElement.Should().HaveProperty("[1].description", ResourceTextQueryString);
+ parametersElement.Should().HaveProperty("[2].name", "If-None-Match");
+ parametersElement.Should().HaveProperty("[2].in", "header");
+ parametersElement.Should().HaveProperty("[2].description", "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.");
});
getElement.Should().ContainPath("responses").With(responsesElement =>
{
- responsesElement.EnumerateObject().ShouldHaveCount(3);
+ responsesElement.EnumerateObject().ShouldHaveCount(4);
responsesElement.Should().HaveProperty("200.description", "Successfully returns the found elevator, or `null` if it was not found.");
+ responsesElement.Should().HaveProperty("200.headers.ETag.description", "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.");
+ responsesElement.Should().HaveProperty("304.description", "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.");
+ responsesElement.Should().HaveProperty("304.headers.ETag.description", "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.");
responsesElement.Should().HaveProperty("400.description", "The query string is invalid.");
responsesElement.Should().HaveProperty("404.description", "The skyscraper does not exist.");
});
@@ -248,17 +281,24 @@ public async Task Endpoints_are_documented()
headElement.Should().ContainPath("parameters").With(parametersElement =>
{
- parametersElement.EnumerateArray().ShouldHaveCount(2);
+ parametersElement.EnumerateArray().ShouldHaveCount(3);
parametersElement.Should().HaveProperty("[0].in", "path");
parametersElement.Should().HaveProperty("[0].description", "The identifier of the skyscraper whose related elevator to retrieve.");
parametersElement.Should().HaveProperty("[1].in", "query");
parametersElement.Should().HaveProperty("[1].description", ResourceTextQueryString);
+ parametersElement.Should().HaveProperty("[2].name", "If-None-Match");
+ parametersElement.Should().HaveProperty("[2].in", "header");
+ parametersElement.Should().HaveProperty("[2].description", "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.");
});
headElement.Should().ContainPath("responses").With(responsesElement =>
{
- responsesElement.EnumerateObject().ShouldHaveCount(3);
+ responsesElement.EnumerateObject().ShouldHaveCount(4);
responsesElement.Should().HaveProperty("200.description", "The operation completed successfully.");
+ responsesElement.Should().HaveProperty("200.headers.ETag.description", "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.");
+ responsesElement.Should().HaveProperty("200.headers.Content-Length.description", "Size of the HTTP response body, in bytes.");
+ responsesElement.Should().HaveProperty("304.description", "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.");
+ responsesElement.Should().HaveProperty("304.headers.ETag.description", "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.");
responsesElement.Should().HaveProperty("400.description", "The query string is invalid.");
responsesElement.Should().HaveProperty("404.description", "The skyscraper does not exist.");
});
@@ -273,17 +313,23 @@ public async Task Endpoints_are_documented()
getElement.Should().ContainPath("parameters").With(parametersElement =>
{
- parametersElement.EnumerateArray().ShouldHaveCount(2);
+ parametersElement.EnumerateArray().ShouldHaveCount(3);
parametersElement.Should().HaveProperty("[0].in", "path");
parametersElement.Should().HaveProperty("[0].description", "The identifier of the skyscraper whose related elevator identity to retrieve.");
parametersElement.Should().HaveProperty("[1].in", "query");
parametersElement.Should().HaveProperty("[1].description", RelationshipTextQueryString);
+ parametersElement.Should().HaveProperty("[2].name", "If-None-Match");
+ parametersElement.Should().HaveProperty("[2].in", "header");
+ parametersElement.Should().HaveProperty("[2].description", "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.");
});
getElement.Should().ContainPath("responses").With(responsesElement =>
{
- responsesElement.EnumerateObject().ShouldHaveCount(3);
+ responsesElement.EnumerateObject().ShouldHaveCount(4);
responsesElement.Should().HaveProperty("200.description", "Successfully returns the found elevator identity, or `null` if it was not found.");
+ responsesElement.Should().HaveProperty("200.headers.ETag.description", "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.");
+ responsesElement.Should().HaveProperty("304.description", "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.");
+ responsesElement.Should().HaveProperty("304.headers.ETag.description", "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.");
responsesElement.Should().HaveProperty("400.description", "The query string is invalid.");
responsesElement.Should().HaveProperty("404.description", "The skyscraper does not exist.");
});
@@ -296,17 +342,24 @@ public async Task Endpoints_are_documented()
headElement.Should().ContainPath("parameters").With(parametersElement =>
{
- parametersElement.EnumerateArray().ShouldHaveCount(2);
+ parametersElement.EnumerateArray().ShouldHaveCount(3);
parametersElement.Should().HaveProperty("[0].in", "path");
parametersElement.Should().HaveProperty("[0].description", "The identifier of the skyscraper whose related elevator identity to retrieve.");
parametersElement.Should().HaveProperty("[1].in", "query");
parametersElement.Should().HaveProperty("[1].description", RelationshipTextQueryString);
+ parametersElement.Should().HaveProperty("[2].name", "If-None-Match");
+ parametersElement.Should().HaveProperty("[2].in", "header");
+ parametersElement.Should().HaveProperty("[2].description", "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.");
});
headElement.Should().ContainPath("responses").With(responsesElement =>
{
- responsesElement.EnumerateObject().ShouldHaveCount(3);
+ responsesElement.EnumerateObject().ShouldHaveCount(4);
responsesElement.Should().HaveProperty("200.description", "The operation completed successfully.");
+ responsesElement.Should().HaveProperty("200.headers.ETag.description", "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.");
+ responsesElement.Should().HaveProperty("200.headers.Content-Length.description", "Size of the HTTP response body, in bytes.");
+ responsesElement.Should().HaveProperty("304.description", "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.");
+ responsesElement.Should().HaveProperty("304.headers.ETag.description", "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.");
responsesElement.Should().HaveProperty("400.description", "The query string is invalid.");
responsesElement.Should().HaveProperty("404.description", "The skyscraper does not exist.");
});
@@ -344,17 +397,23 @@ public async Task Endpoints_are_documented()
getElement.Should().ContainPath("parameters").With(parametersElement =>
{
- parametersElement.EnumerateArray().ShouldHaveCount(2);
+ parametersElement.EnumerateArray().ShouldHaveCount(3);
parametersElement.Should().HaveProperty("[0].in", "path");
parametersElement.Should().HaveProperty("[0].description", "The identifier of the skyscraper whose related spaces to retrieve.");
parametersElement.Should().HaveProperty("[1].in", "query");
parametersElement.Should().HaveProperty("[1].description", ResourceTextQueryString);
+ parametersElement.Should().HaveProperty("[2].name", "If-None-Match");
+ parametersElement.Should().HaveProperty("[2].in", "header");
+ parametersElement.Should().HaveProperty("[2].description", "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.");
});
getElement.Should().ContainPath("responses").With(responsesElement =>
{
- responsesElement.EnumerateObject().ShouldHaveCount(3);
+ responsesElement.EnumerateObject().ShouldHaveCount(4);
responsesElement.Should().HaveProperty("200.description", "Successfully returns the found spaces, or an empty array if none were found.");
+ responsesElement.Should().HaveProperty("200.headers.ETag.description", "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.");
+ responsesElement.Should().HaveProperty("304.description", "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.");
+ responsesElement.Should().HaveProperty("304.headers.ETag.description", "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.");
responsesElement.Should().HaveProperty("400.description", "The query string is invalid.");
responsesElement.Should().HaveProperty("404.description", "The skyscraper does not exist.");
});
@@ -367,17 +426,24 @@ public async Task Endpoints_are_documented()
headElement.Should().ContainPath("parameters").With(parametersElement =>
{
- parametersElement.EnumerateArray().ShouldHaveCount(2);
+ parametersElement.EnumerateArray().ShouldHaveCount(3);
parametersElement.Should().HaveProperty("[0].in", "path");
parametersElement.Should().HaveProperty("[0].description", "The identifier of the skyscraper whose related spaces to retrieve.");
parametersElement.Should().HaveProperty("[1].in", "query");
parametersElement.Should().HaveProperty("[1].description", ResourceTextQueryString);
+ parametersElement.Should().HaveProperty("[2].name", "If-None-Match");
+ parametersElement.Should().HaveProperty("[2].in", "header");
+ parametersElement.Should().HaveProperty("[2].description", "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.");
});
headElement.Should().ContainPath("responses").With(responsesElement =>
{
- responsesElement.EnumerateObject().ShouldHaveCount(3);
+ responsesElement.EnumerateObject().ShouldHaveCount(4);
responsesElement.Should().HaveProperty("200.description", "The operation completed successfully.");
+ responsesElement.Should().HaveProperty("200.headers.ETag.description", "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.");
+ responsesElement.Should().HaveProperty("200.headers.Content-Length.description", "Size of the HTTP response body, in bytes.");
+ responsesElement.Should().HaveProperty("304.description", "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.");
+ responsesElement.Should().HaveProperty("304.headers.ETag.description", "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.");
responsesElement.Should().HaveProperty("400.description", "The query string is invalid.");
responsesElement.Should().HaveProperty("404.description", "The skyscraper does not exist.");
});
@@ -392,17 +458,23 @@ public async Task Endpoints_are_documented()
getElement.Should().ContainPath("parameters").With(parametersElement =>
{
- parametersElement.EnumerateArray().ShouldHaveCount(2);
+ parametersElement.EnumerateArray().ShouldHaveCount(3);
parametersElement.Should().HaveProperty("[0].in", "path");
parametersElement.Should().HaveProperty("[0].description", "The identifier of the skyscraper whose related space identities to retrieve.");
parametersElement.Should().HaveProperty("[1].in", "query");
parametersElement.Should().HaveProperty("[1].description", RelationshipTextQueryString);
+ parametersElement.Should().HaveProperty("[2].name", "If-None-Match");
+ parametersElement.Should().HaveProperty("[2].in", "header");
+ parametersElement.Should().HaveProperty("[2].description", "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.");
});
getElement.Should().ContainPath("responses").With(responsesElement =>
{
- responsesElement.EnumerateObject().ShouldHaveCount(3);
+ responsesElement.EnumerateObject().ShouldHaveCount(4);
responsesElement.Should().HaveProperty("200.description", "Successfully returns the found space identities, or an empty array if none were found.");
+ responsesElement.Should().HaveProperty("200.headers.ETag.description", "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.");
+ responsesElement.Should().HaveProperty("304.description", "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.");
+ responsesElement.Should().HaveProperty("304.headers.ETag.description", "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.");
responsesElement.Should().HaveProperty("400.description", "The query string is invalid.");
responsesElement.Should().HaveProperty("404.description", "The skyscraper does not exist.");
});
@@ -415,17 +487,24 @@ public async Task Endpoints_are_documented()
headElement.Should().ContainPath("parameters").With(parametersElement =>
{
- parametersElement.EnumerateArray().ShouldHaveCount(2);
+ parametersElement.EnumerateArray().ShouldHaveCount(3);
parametersElement.Should().HaveProperty("[0].in", "path");
parametersElement.Should().HaveProperty("[0].description", "The identifier of the skyscraper whose related space identities to retrieve.");
parametersElement.Should().HaveProperty("[1].in", "query");
parametersElement.Should().HaveProperty("[1].description", RelationshipTextQueryString);
+ parametersElement.Should().HaveProperty("[2].name", "If-None-Match");
+ parametersElement.Should().HaveProperty("[2].in", "header");
+ parametersElement.Should().HaveProperty("[2].description", "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.");
});
headElement.Should().ContainPath("responses").With(responsesElement =>
{
- responsesElement.EnumerateObject().ShouldHaveCount(3);
+ responsesElement.EnumerateObject().ShouldHaveCount(4);
responsesElement.Should().HaveProperty("200.description", "The operation completed successfully.");
+ responsesElement.Should().HaveProperty("200.headers.ETag.description", "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.");
+ responsesElement.Should().HaveProperty("200.headers.Content-Length.description", "Size of the HTTP response body, in bytes.");
+ responsesElement.Should().HaveProperty("304.description", "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.");
+ responsesElement.Should().HaveProperty("304.headers.ETag.description", "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.");
responsesElement.Should().HaveProperty("400.description", "The query string is invalid.");
responsesElement.Should().HaveProperty("404.description", "The skyscraper does not exist.");
});
diff --git a/test/OpenApiTests/Headers/Country.cs b/test/OpenApiTests/Headers/Country.cs
new file mode 100644
index 0000000000..a0398c03bc
--- /dev/null
+++ b/test/OpenApiTests/Headers/Country.cs
@@ -0,0 +1,19 @@
+using JetBrains.Annotations;
+using JsonApiDotNetCore.Resources;
+using JsonApiDotNetCore.Resources.Annotations;
+
+namespace OpenApiTests.Headers;
+
+[UsedImplicitly(ImplicitUseTargetFlags.Members)]
+[Resource(ControllerNamespace = "OpenApiTests.Headers")]
+public sealed class Country : Identifiable
+{
+ [Attr]
+ public string Name { get; set; } = null!;
+
+ [Attr]
+ public long Population { get; set; }
+
+ [HasMany]
+ public ISet Languages { get; set; } = new HashSet();
+}
diff --git a/test/OpenApiTests/Headers/HeaderFakers.cs b/test/OpenApiTests/Headers/HeaderFakers.cs
new file mode 100644
index 0000000000..b22a0b0cd3
--- /dev/null
+++ b/test/OpenApiTests/Headers/HeaderFakers.cs
@@ -0,0 +1,36 @@
+using System.Globalization;
+using Bogus;
+using JetBrains.Annotations;
+using TestBuildingBlocks;
+
+// @formatter:wrap_chained_method_calls chop_if_long
+// @formatter:wrap_before_first_method_call true
+
+namespace OpenApiTests.Headers;
+
+[UsedImplicitly(ImplicitUseTargetFlags.Members)]
+public sealed class HeaderFakers : FakerContainer
+{
+ private static readonly Lazy LazyLanguageNames = new(() => CultureInfo
+ .GetCultures(CultureTypes.NeutralCultures)
+ .Select(culture => culture.DisplayName)
+ .ToArray());
+
+ private static readonly Lazy LazyLanguageCodes = new(() => CultureInfo
+ .GetCultures(CultureTypes.NeutralCultures)
+ .Select(culture => culture.ThreeLetterISOLanguageName)
+ .ToArray());
+
+ private readonly Lazy> _lazyCountryFaker = new(() => new Faker()
+ .UseSeed(GetFakerSeed())
+ .RuleFor(country => country.Name, faker => faker.Address.Country())
+ .RuleFor(country => country.Population, faker => faker.Random.Long(0, 2_000_000_000)));
+
+ private readonly Lazy> _lazyLanguageFaker = new(() => new Faker()
+ .UseSeed(GetFakerSeed())
+ .RuleFor(language => language.Name, faker => faker.PickRandom(LazyLanguageNames.Value))
+ .RuleFor(language => language.Code, faker => faker.PickRandom(LazyLanguageCodes.Value)));
+
+ public Faker Country => _lazyCountryFaker.Value;
+ public Faker Language => _lazyLanguageFaker.Value;
+}
diff --git a/test/OpenApiTests/Headers/HeaderTests.cs b/test/OpenApiTests/Headers/HeaderTests.cs
new file mode 100644
index 0000000000..99b8738a05
--- /dev/null
+++ b/test/OpenApiTests/Headers/HeaderTests.cs
@@ -0,0 +1,145 @@
+using System.Text.Json;
+using FluentAssertions;
+using TestBuildingBlocks;
+using Xunit;
+
+namespace OpenApiTests.Headers;
+
+public sealed class HeaderTests : IClassFixture, HeadersDbContext>>
+{
+ private readonly OpenApiTestContext, HeadersDbContext> _testContext;
+
+ public HeaderTests(OpenApiTestContext, HeadersDbContext> testContext)
+ {
+ _testContext = testContext;
+
+ testContext.UseController();
+
+ testContext.SwaggerDocumentOutputDirectory = "test/OpenApiEndToEndTests/Headers";
+ }
+
+ [Theory]
+ [InlineData("/countries.get")]
+ [InlineData("/countries.head")]
+ [InlineData("/countries/{id}.get")]
+ [InlineData("/countries/{id}.head")]
+ [InlineData("/countries/{id}/languages.get")]
+ [InlineData("/countries/{id}/languages.head")]
+ [InlineData("/countries/{id}/relationships/languages.get")]
+ [InlineData("/countries/{id}/relationships/languages.head")]
+ public async Task Endpoints_have_caching_headers(string endpointPath)
+ {
+ // Act
+ JsonElement document = await _testContext.GetSwaggerDocumentAsync();
+
+ // Assert
+ document.Should().ContainPath($"paths.{endpointPath}.parameters").With(parametersElement =>
+ {
+ parametersElement.EnumerateArray().Should().ContainSingle(parameterElement => parameterElement.GetProperty("in").ValueEquals("header")).Subject
+ .With(parameterElement =>
+ {
+ parameterElement.Should().HaveProperty("name", "If-None-Match");
+ parameterElement.Should().NotContainPath("required");
+
+ parameterElement.Should().HaveProperty("description",
+ "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.");
+
+ parameterElement.Should().ContainPath("schema").With(schemaElement =>
+ {
+ schemaElement.Should().HaveProperty("type", "string");
+ });
+ });
+ });
+
+ document.Should().ContainPath($"paths.{endpointPath}.responses.200.headers.ETag").With(AssertETag);
+ document.Should().ContainPath($"paths.{endpointPath}.responses.304.headers.ETag").With(AssertETag);
+
+ return;
+
+ static void AssertETag(JsonElement etagElement)
+ {
+ etagElement.Should().HaveProperty("description",
+ "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.");
+
+ etagElement.Should().HaveProperty("required", true);
+
+ etagElement.Should().ContainPath("schema").With(schemaElement =>
+ {
+ schemaElement.Should().HaveProperty("type", "string");
+ });
+ }
+ }
+
+ [Theory]
+ [InlineData("/countries.post")]
+ [InlineData("/countries/{id}.patch")]
+ [InlineData("/countries/{id}.delete")]
+ [InlineData("/countries/{id}/relationships/languages.post")]
+ [InlineData("/countries/{id}/relationships/languages.patch")]
+ [InlineData("/countries/{id}/relationships/languages.delete")]
+ public async Task Endpoints_do_not_have_caching_headers(string endpointPath)
+ {
+ // Act
+ JsonElement document = await _testContext.GetSwaggerDocumentAsync();
+
+ // Assert
+ document.Should().ContainPath($"paths.{endpointPath}.parameters").With(parametersElement =>
+ {
+ parametersElement.EnumerateArray().Should().NotContain(parameterElement => parameterElement.GetProperty("name").ValueEquals("If-None-Match"));
+ });
+
+ document.Should().ContainPath($"paths.{endpointPath}.responses").With(responsesElement =>
+ {
+ foreach (JsonProperty responseProperty in responsesElement.EnumerateObject())
+ {
+ responseProperty.Value.Should().NotContainPath("headers.ETag");
+ }
+ });
+ }
+
+ [Theory]
+ [InlineData("/countries.head")]
+ [InlineData("/countries/{id}.head")]
+ [InlineData("/countries/{id}/languages.head")]
+ [InlineData("/countries/{id}/relationships/languages.head")]
+ public async Task Endpoints_have_content_length_response_header(string endpointPath)
+ {
+ // Act
+ JsonElement document = await _testContext.GetSwaggerDocumentAsync();
+
+ // Assert
+ document.Should().ContainPath($"paths.{endpointPath}.responses.200.headers.Content-Length").With(contentLengthElement =>
+ {
+ contentLengthElement.Should().HaveProperty("description", "Size of the HTTP response body, in bytes.");
+
+ contentLengthElement.Should().HaveProperty("required", true);
+
+ contentLengthElement.Should().ContainPath("schema").With(schemaElement =>
+ {
+ schemaElement.Should().HaveProperty("type", "integer");
+ schemaElement.Should().HaveProperty("format", "int64");
+ });
+ });
+ }
+
+ [Fact]
+ public async Task Post_resource_endpoint_has_location_response_header()
+ {
+ // Act
+ JsonElement document = await _testContext.GetSwaggerDocumentAsync();
+
+ // Assert
+ document.Should().ContainPath("paths./countries.post.responses.201.headers.Location").With(locationElement =>
+ {
+ locationElement.Should().HaveProperty("description", "The URL at which the newly created country can be retrieved.");
+
+ locationElement.Should().HaveProperty("required", true);
+
+ locationElement.Should().ContainPath("schema").With(schemaElement =>
+ {
+ schemaElement.Should().HaveProperty("type", "string");
+ schemaElement.Should().HaveProperty("format", "uri");
+ });
+ });
+ }
+}
diff --git a/test/OpenApiTests/Headers/HeadersDbContext.cs b/test/OpenApiTests/Headers/HeadersDbContext.cs
new file mode 100644
index 0000000000..937ec35d27
--- /dev/null
+++ b/test/OpenApiTests/Headers/HeadersDbContext.cs
@@ -0,0 +1,12 @@
+using JetBrains.Annotations;
+using Microsoft.EntityFrameworkCore;
+using TestBuildingBlocks;
+
+namespace OpenApiTests.Headers;
+
+[UsedImplicitly(ImplicitUseTargetFlags.Members)]
+public sealed class HeadersDbContext(DbContextOptions options) : TestableDbContext(options)
+{
+ public DbSet Countries => Set();
+ public DbSet Languages => Set();
+}
diff --git a/test/OpenApiTests/Headers/Language.cs b/test/OpenApiTests/Headers/Language.cs
new file mode 100644
index 0000000000..3f2eae5ff3
--- /dev/null
+++ b/test/OpenApiTests/Headers/Language.cs
@@ -0,0 +1,16 @@
+using JetBrains.Annotations;
+using JsonApiDotNetCore.Resources;
+using JsonApiDotNetCore.Resources.Annotations;
+
+namespace OpenApiTests.Headers;
+
+[UsedImplicitly(ImplicitUseTargetFlags.Members)]
+[Resource(ControllerNamespace = "OpenApiTests.Headers")]
+public sealed class Language : Identifiable
+{
+ [Attr]
+ public string Code { get; set; } = null!;
+
+ [Attr]
+ public string Name { get; set; } = null!;
+}
diff --git a/test/OpenApiTests/LegacyOpenApiIntegration/swagger.json b/test/OpenApiTests/LegacyOpenApiIntegration/swagger.json
index 7736381583..fac1314112 100644
--- a/test/OpenApiTests/LegacyOpenApiIntegration/swagger.json
+++ b/test/OpenApiTests/LegacyOpenApiIntegration/swagger.json
@@ -30,11 +30,28 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
"description": "Successfully returns the found airplanes, or an empty array if none were found.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ },
"content": {
"application/vnd.api+json": {
"schema": {
@@ -43,6 +60,18 @@
}
}
},
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
+ },
"400": {
"description": "The query string is invalid.",
"content": {
@@ -75,11 +104,48 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
- "description": "The operation completed successfully."
+ "description": "The operation completed successfully.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ "Content-Length": {
+ "description": "Size of the HTTP response body, in bytes.",
+ "required": true,
+ "schema": {
+ "type": "integer",
+ "format": "int64"
+ }
+ }
+ }
+ },
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
},
"400": {
"description": "The query string is invalid."
@@ -124,6 +190,16 @@
"responses": {
"201": {
"description": "The airplane was successfully created, which resulted in additional changes. The newly created airplane is returned.",
+ "headers": {
+ "Location": {
+ "description": "The URL at which the newly created airplane can be retrieved.",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "format": "uri"
+ }
+ }
+ },
"content": {
"application/vnd.api+json": {
"schema": {
@@ -207,11 +283,28 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
"description": "Successfully returns the found airplane.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ },
"content": {
"application/vnd.api+json": {
"schema": {
@@ -220,6 +313,18 @@
}
}
},
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
+ },
"400": {
"description": "The query string is invalid.",
"content": {
@@ -271,11 +376,48 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
- "description": "The operation completed successfully."
+ "description": "The operation completed successfully.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ "Content-Length": {
+ "description": "Size of the HTTP response body, in bytes.",
+ "required": true,
+ "schema": {
+ "type": "integer",
+ "format": "int64"
+ }
+ }
+ }
+ },
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
},
"400": {
"description": "The query string is invalid."
@@ -448,11 +590,28 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
"description": "Successfully returns the found flights, or an empty array if none were found.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ },
"content": {
"application/vnd.api+json": {
"schema": {
@@ -461,6 +620,18 @@
}
}
},
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
+ },
"400": {
"description": "The query string is invalid.",
"content": {
@@ -512,11 +683,48 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
- "description": "The operation completed successfully."
+ "description": "The operation completed successfully.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ "Content-Length": {
+ "description": "Size of the HTTP response body, in bytes.",
+ "required": true,
+ "schema": {
+ "type": "integer",
+ "format": "int64"
+ }
+ }
+ }
+ },
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
},
"400": {
"description": "The query string is invalid."
@@ -556,11 +764,28 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
"description": "Successfully returns the found flight identities, or an empty array if none were found.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ },
"content": {
"application/vnd.api+json": {
"schema": {
@@ -569,6 +794,18 @@
}
}
},
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
+ },
"400": {
"description": "The query string is invalid.",
"content": {
@@ -620,11 +857,48 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
- "description": "The operation completed successfully."
+ "description": "The operation completed successfully.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ "Content-Length": {
+ "description": "Size of the HTTP response body, in bytes.",
+ "required": true,
+ "schema": {
+ "type": "integer",
+ "format": "int64"
+ }
+ }
+ }
+ },
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
},
"400": {
"description": "The query string is invalid."
@@ -856,11 +1130,28 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
"description": "Successfully returns the found flight-attendants, or an empty array if none were found.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ },
"content": {
"application/vnd.api+json": {
"schema": {
@@ -869,6 +1160,18 @@
}
}
},
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
+ },
"400": {
"description": "The query string is invalid.",
"content": {
@@ -901,11 +1204,48 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
- "description": "The operation completed successfully."
+ "description": "The operation completed successfully.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ "Content-Length": {
+ "description": "Size of the HTTP response body, in bytes.",
+ "required": true,
+ "schema": {
+ "type": "integer",
+ "format": "int64"
+ }
+ }
+ }
+ },
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
},
"400": {
"description": "The query string is invalid."
@@ -950,6 +1290,16 @@
"responses": {
"201": {
"description": "The flight-attendant was successfully created, which resulted in additional changes. The newly created flight-attendant is returned.",
+ "headers": {
+ "Location": {
+ "description": "The URL at which the newly created flight-attendant can be retrieved.",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "format": "uri"
+ }
+ }
+ },
"content": {
"application/vnd.api+json": {
"schema": {
@@ -1033,11 +1383,28 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
"description": "Successfully returns the found flight-attendant.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ },
"content": {
"application/vnd.api+json": {
"schema": {
@@ -1046,6 +1413,18 @@
}
}
},
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
+ },
"400": {
"description": "The query string is invalid.",
"content": {
@@ -1097,11 +1476,48 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
- "description": "The operation completed successfully."
+ "description": "The operation completed successfully.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ "Content-Length": {
+ "description": "Size of the HTTP response body, in bytes.",
+ "required": true,
+ "schema": {
+ "type": "integer",
+ "format": "int64"
+ }
+ }
+ }
+ },
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
},
"400": {
"description": "The query string is invalid."
@@ -1274,11 +1690,28 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
"description": "Successfully returns the found flights, or an empty array if none were found.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ },
"content": {
"application/vnd.api+json": {
"schema": {
@@ -1287,6 +1720,18 @@
}
}
},
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
+ },
"400": {
"description": "The query string is invalid.",
"content": {
@@ -1338,11 +1783,48 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
- "description": "The operation completed successfully."
+ "description": "The operation completed successfully.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ "Content-Length": {
+ "description": "Size of the HTTP response body, in bytes.",
+ "required": true,
+ "schema": {
+ "type": "integer",
+ "format": "int64"
+ }
+ }
+ }
+ },
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
},
"400": {
"description": "The query string is invalid."
@@ -1382,11 +1864,28 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
"description": "Successfully returns the found flight identities, or an empty array if none were found.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ },
"content": {
"application/vnd.api+json": {
"schema": {
@@ -1395,6 +1894,18 @@
}
}
},
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
+ },
"400": {
"description": "The query string is invalid.",
"content": {
@@ -1446,11 +1957,48 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
- "description": "The operation completed successfully."
+ "description": "The operation completed successfully.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ "Content-Length": {
+ "description": "Size of the HTTP response body, in bytes.",
+ "required": true,
+ "schema": {
+ "type": "integer",
+ "format": "int64"
+ }
+ }
+ }
+ },
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
},
"400": {
"description": "The query string is invalid."
@@ -1691,11 +2239,28 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
"description": "Successfully returns the found flights, or an empty array if none were found.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ },
"content": {
"application/vnd.api+json": {
"schema": {
@@ -1704,6 +2269,18 @@
}
}
},
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
+ },
"400": {
"description": "The query string is invalid.",
"content": {
@@ -1755,11 +2332,48 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
- "description": "The operation completed successfully."
+ "description": "The operation completed successfully.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ "Content-Length": {
+ "description": "Size of the HTTP response body, in bytes.",
+ "required": true,
+ "schema": {
+ "type": "integer",
+ "format": "int64"
+ }
+ }
+ }
+ },
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
},
"400": {
"description": "The query string is invalid."
@@ -1799,11 +2413,28 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
"description": "Successfully returns the found flight identities, or an empty array if none were found.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ },
"content": {
"application/vnd.api+json": {
"schema": {
@@ -1812,6 +2443,18 @@
}
}
},
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
+ },
"400": {
"description": "The query string is invalid.",
"content": {
@@ -1863,11 +2506,48 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
- "description": "The operation completed successfully."
+ "description": "The operation completed successfully.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ "Content-Length": {
+ "description": "Size of the HTTP response body, in bytes.",
+ "required": true,
+ "schema": {
+ "type": "integer",
+ "format": "int64"
+ }
+ }
+ }
+ },
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
},
"400": {
"description": "The query string is invalid."
@@ -2099,11 +2779,28 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
"description": "Successfully returns the found flights, or an empty array if none were found.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ },
"content": {
"application/vnd.api+json": {
"schema": {
@@ -2112,6 +2809,18 @@
}
}
},
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
+ },
"400": {
"description": "The query string is invalid.",
"content": {
@@ -2144,11 +2853,48 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
- "description": "The operation completed successfully."
+ "description": "The operation completed successfully.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ "Content-Length": {
+ "description": "Size of the HTTP response body, in bytes.",
+ "required": true,
+ "schema": {
+ "type": "integer",
+ "format": "int64"
+ }
+ }
+ }
+ },
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
},
"400": {
"description": "The query string is invalid."
@@ -2193,6 +2939,16 @@
"responses": {
"201": {
"description": "The flight was successfully created, which resulted in additional changes. The newly created flight is returned.",
+ "headers": {
+ "Location": {
+ "description": "The URL at which the newly created flight can be retrieved.",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "format": "uri"
+ }
+ }
+ },
"content": {
"application/vnd.api+json": {
"schema": {
@@ -2276,11 +3032,28 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
"description": "Successfully returns the found flight.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ },
"content": {
"application/vnd.api+json": {
"schema": {
@@ -2289,6 +3062,18 @@
}
}
},
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
+ },
"400": {
"description": "The query string is invalid.",
"content": {
@@ -2340,11 +3125,48 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
- "description": "The operation completed successfully."
+ "description": "The operation completed successfully.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ "Content-Length": {
+ "description": "Size of the HTTP response body, in bytes.",
+ "required": true,
+ "schema": {
+ "type": "integer",
+ "format": "int64"
+ }
+ }
+ }
+ },
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
},
"400": {
"description": "The query string is invalid."
@@ -2517,11 +3339,28 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
"description": "Successfully returns the found flight-attendant, or `null` if it was not found.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ },
"content": {
"application/vnd.api+json": {
"schema": {
@@ -2530,6 +3369,18 @@
}
}
},
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
+ },
"400": {
"description": "The query string is invalid.",
"content": {
@@ -2581,11 +3432,48 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
- "description": "The operation completed successfully."
+ "description": "The operation completed successfully.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ "Content-Length": {
+ "description": "Size of the HTTP response body, in bytes.",
+ "required": true,
+ "schema": {
+ "type": "integer",
+ "format": "int64"
+ }
+ }
+ }
+ },
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
},
"400": {
"description": "The query string is invalid."
@@ -2625,11 +3513,28 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
"description": "Successfully returns the found flight-attendant identity, or `null` if it was not found.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ },
"content": {
"application/vnd.api+json": {
"schema": {
@@ -2638,6 +3543,18 @@
}
}
},
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
+ },
"400": {
"description": "The query string is invalid.",
"content": {
@@ -2689,11 +3606,48 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
- "description": "The operation completed successfully."
+ "description": "The operation completed successfully.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ "Content-Length": {
+ "description": "Size of the HTTP response body, in bytes.",
+ "required": true,
+ "schema": {
+ "type": "integer",
+ "format": "int64"
+ }
+ }
+ }
+ },
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
},
"400": {
"description": "The query string is invalid."
@@ -2800,11 +3754,28 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
"description": "Successfully returns the found flight-attendants, or an empty array if none were found.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ },
"content": {
"application/vnd.api+json": {
"schema": {
@@ -2813,6 +3784,18 @@
}
}
},
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
+ },
"400": {
"description": "The query string is invalid.",
"content": {
@@ -2864,11 +3847,48 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
- "description": "The operation completed successfully."
+ "description": "The operation completed successfully.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ "Content-Length": {
+ "description": "Size of the HTTP response body, in bytes.",
+ "required": true,
+ "schema": {
+ "type": "integer",
+ "format": "int64"
+ }
+ }
+ }
+ },
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
},
"400": {
"description": "The query string is invalid."
@@ -2908,11 +3928,28 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
"description": "Successfully returns the found flight-attendant identities, or an empty array if none were found.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ },
"content": {
"application/vnd.api+json": {
"schema": {
@@ -2921,6 +3958,18 @@
}
}
},
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
+ },
"400": {
"description": "The query string is invalid.",
"content": {
@@ -2972,11 +4021,48 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
- "description": "The operation completed successfully."
+ "description": "The operation completed successfully.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ "Content-Length": {
+ "description": "Size of the HTTP response body, in bytes.",
+ "required": true,
+ "schema": {
+ "type": "integer",
+ "format": "int64"
+ }
+ }
+ }
+ },
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
},
"400": {
"description": "The query string is invalid."
@@ -3217,11 +4303,28 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
"description": "Successfully returns the found passengers, or an empty array if none were found.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ },
"content": {
"application/vnd.api+json": {
"schema": {
@@ -3230,6 +4333,18 @@
}
}
},
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
+ },
"400": {
"description": "The query string is invalid.",
"content": {
@@ -3281,11 +4396,48 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
- "description": "The operation completed successfully."
+ "description": "The operation completed successfully.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ "Content-Length": {
+ "description": "Size of the HTTP response body, in bytes.",
+ "required": true,
+ "schema": {
+ "type": "integer",
+ "format": "int64"
+ }
+ }
+ }
+ },
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
},
"400": {
"description": "The query string is invalid."
@@ -3325,11 +4477,28 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
"description": "Successfully returns the found passenger identities, or an empty array if none were found.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ },
"content": {
"application/vnd.api+json": {
"schema": {
@@ -3338,6 +4507,18 @@
}
}
},
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
+ },
"400": {
"description": "The query string is invalid.",
"content": {
@@ -3389,11 +4570,48 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
- "description": "The operation completed successfully."
+ "description": "The operation completed successfully.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ "Content-Length": {
+ "description": "Size of the HTTP response body, in bytes.",
+ "required": true,
+ "schema": {
+ "type": "integer",
+ "format": "int64"
+ }
+ }
+ }
+ },
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
},
"400": {
"description": "The query string is invalid."
@@ -3634,11 +4852,28 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
"description": "Successfully returns the found flight-attendant, or `null` if it was not found.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ },
"content": {
"application/vnd.api+json": {
"schema": {
@@ -3647,6 +4882,18 @@
}
}
},
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
+ },
"400": {
"description": "The query string is invalid.",
"content": {
@@ -3698,11 +4945,48 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
- "description": "The operation completed successfully."
+ "description": "The operation completed successfully.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ "Content-Length": {
+ "description": "Size of the HTTP response body, in bytes.",
+ "required": true,
+ "schema": {
+ "type": "integer",
+ "format": "int64"
+ }
+ }
+ }
+ },
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
},
"400": {
"description": "The query string is invalid."
@@ -3742,11 +5026,28 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
"description": "Successfully returns the found flight-attendant identity, or `null` if it was not found.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ },
"content": {
"application/vnd.api+json": {
"schema": {
@@ -3755,6 +5056,18 @@
}
}
},
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
+ },
"400": {
"description": "The query string is invalid.",
"content": {
@@ -3806,11 +5119,48 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
- "description": "The operation completed successfully."
+ "description": "The operation completed successfully.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ "Content-Length": {
+ "description": "Size of the HTTP response body, in bytes.",
+ "required": true,
+ "schema": {
+ "type": "integer",
+ "format": "int64"
+ }
+ }
+ }
+ },
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
},
"400": {
"description": "The query string is invalid."
@@ -3908,11 +5258,28 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
"description": "Successfully returns the found passengers, or an empty array if none were found.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ },
"content": {
"application/vnd.api+json": {
"schema": {
@@ -3921,6 +5288,18 @@
}
}
},
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
+ },
"400": {
"description": "The query string is invalid.",
"content": {
@@ -3953,11 +5332,48 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
- "description": "The operation completed successfully."
+ "description": "The operation completed successfully.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ "Content-Length": {
+ "description": "Size of the HTTP response body, in bytes.",
+ "required": true,
+ "schema": {
+ "type": "integer",
+ "format": "int64"
+ }
+ }
+ }
+ },
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
},
"400": {
"description": "The query string is invalid."
@@ -4002,6 +5418,16 @@
"responses": {
"201": {
"description": "The passenger was successfully created, which resulted in additional changes. The newly created passenger is returned.",
+ "headers": {
+ "Location": {
+ "description": "The URL at which the newly created passenger can be retrieved.",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "format": "uri"
+ }
+ }
+ },
"content": {
"application/vnd.api+json": {
"schema": {
@@ -4085,11 +5511,28 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
"description": "Successfully returns the found passenger.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ },
"content": {
"application/vnd.api+json": {
"schema": {
@@ -4098,6 +5541,18 @@
}
}
},
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
+ },
"400": {
"description": "The query string is invalid.",
"content": {
@@ -4149,11 +5604,48 @@
},
"example": ""
}
+ },
+ {
+ "name": "If-None-Match",
+ "in": "header",
+ "description": "A list of ETags, resulting in HTTP status 304 without a body, if one of them matches the current fingerprint.",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"200": {
- "description": "The operation completed successfully."
+ "description": "The operation completed successfully.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ "Content-Length": {
+ "description": "Size of the HTTP response body, in bytes.",
+ "required": true,
+ "schema": {
+ "type": "integer",
+ "format": "int64"
+ }
+ }
+ }
+ },
+ "304": {
+ "description": "The fingerprint of the HTTP response matches one of the ETags from the incoming If-None-Match header.",
+ "headers": {
+ "ETag": {
+ "description": "A fingerprint of the HTTP response, which can be used in an If-None-Match header to only fetch changes.",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
},
"400": {
"description": "The query string is invalid."