diff --git a/custom-words.txt b/custom-words.txt index dfdb3e4a3ee1..d4483e4ed3eb 100644 --- a/custom-words.txt +++ b/custom-words.txt @@ -579,6 +579,7 @@ Dsms DTDL Dtus duration'PT +dwgzippackage dynamicpersongroups EAPMSCHA EAPMSCHAP @@ -664,6 +665,7 @@ fconfig FDID fearthecowboy featurecapabilities +featurestate Featurization featurized Featurizer diff --git a/specification/maps/data-plane/Microsoft.Maps/Alias/preview/2.0/alias.json b/specification/maps/data-plane/Microsoft.Maps/Alias/preview/2.0/alias.json new file mode 100644 index 000000000000..664e1312eae7 --- /dev/null +++ b/specification/maps/data-plane/Microsoft.Maps/Alias/preview/2.0/alias.json @@ -0,0 +1,464 @@ +{ + "swagger": "2.0", + "info": { + "title": "Azure Maps Alias Service", + "version": "2.0", + "description": "APIs for managing aliases in Azure Maps." + }, + "host": "atlas.microsoft.com", + "schemes": [ + "https" + ], + "consumes": [], + "produces": [ + "application/json", + "application/xml" + ], + "securityDefinitions": { + "azure_auth": { + "type": "oauth2", + "authorizationUrl": "https://login.microsoftonline.com/common/oauth2/authorize", + "flow": "implicit", + "description": "These are the [Azure Active Directory OAuth2](https://docs.microsoft.com/en-us/azure/active-directory/develop/v1-overview) Flows. When paired with [Azure Role Based Access](https://docs.microsoft.com/en-us/azure/role-based-access-control/overview) control it can be used to control access to Azure Maps REST APIs. Azure Role based access controls are used to designate access to one or more Azure Maps resource account or sub-resources. Any user, group, or service principal can be granted access via a built in role or a custom role composed of one or more permissions to Azure Maps REST APIs.\n\nTo implement scenarios we recommend viewing [authentication concepts](https://aka.ms/amauth). In summary, this security definition provides a solution for modeling application(s) via objects capable of access control on specific APIs and scopes.\n\n#### Note\n* This security definition **requires** the use of the `x-ms-client-id` header to indicate which Azure Maps resource the application is requesting access to. This can be acquired from the [Maps management API](https://aka.ms/amauthdetails).\n* The `Authorization URL` is specific to the Azure public cloud instance. Sovereign clouds have unique Authorization URLs and Azure Active directory configurations. \n* The Azure role based access control is configured from the [Azure management plane](https://aka.ms/amrbac) via Azure portal, Powershell, CLI, Azure SDKs, or REST APIs.\n* Usage of the [Azure Maps Web SDK](https://aka.ms/amaadmc) allows for configuration based setup of an application for multiple use cases.\n* Currently Azure Active Directory [v1.0](https://docs.microsoft.com/en-us/azure/active-directory/develop/azure-ad-endpoint-comparison) tokens are supported.", + "scopes": { + "user_impersonation": "Impersonates a user's Azure Active Directory account." + } + }, + "apiKeyQuery": { + "type": "apiKey", + "description": "This is a shared key which is provisioned when creating an [Azure Maps resource](https://aka.ms/amauth) through the Azure management plane via Azure portal, Powershell, CLI, Azure SDKs, or REST APIs. With this key, any application is authorized to access all REST APIs. In other words, these can currently be treated as master keys to the account which they are issued for. For publicly exposed applications our recommendation is to use server to server access of Azure Maps REST APIs where this key can be securely stored.", + "name": "subscription-key", + "in": "query" + } + }, + "security": [ + { + "azure_auth": [] + }, + { + "apiKeyQuery": [] + } + ], + "responses": { + "201": { + "description": "Resource Created: The alias resource has been created." + }, + "400": { + "description": "Bad request: one or more parameters were incorrectly specified or are mutually exclusive.", + "schema": { + "$ref": "#/definitions/ODataErrorResponse" + } + }, + "401": { + "description": "Access denied due to invalid subscription key or invalid Azure Active Directory bearer token. Make sure to provide a valid key for an active Azure subscription and Maps resource. Otherwise, verify the [WWW-Authenticate](https://tools.ietf.org/html/rfc6750#section-3.1) header for error code and description of the provided AAD bearer token.", + "schema": { + "$ref": "#/definitions/ODataErrorResponse" + }, + "headers": { + "WWW-Authenticate": { + "type": "string", + "description": "Bearer realm=\"https://atlas.microsoft.com/\", error=\"invalid_token\", error_description=\"The access token expired\"" + } + } + }, + "403": { + "description": "Permission, capacity, or authentication issues.", + "schema": { + "$ref": "#/definitions/ODataErrorResponse" + } + }, + "404": { + "description": "Not Found: the requested resource could not be found, but it may be available again in the future.", + "schema": { + "$ref": "#/definitions/ODataErrorResponse" + } + }, + "500": { + "description": "An error occurred while processing the request. Please try again later.", + "schema": { + "$ref": "#/definitions/ODataErrorResponse" + } + } + }, + "parameters": { + "SubscriptionKey": { + "name": "subscription-key", + "description": "One of the Azure Maps keys provided from an Azure Map Account. Please refer to this [article](https://docs.microsoft.com/azure/azure-maps/how-to-manage-authentication) for details on how to manage authentication.", + "type": "string", + "in": "query", + "required": false, + "x-ms-parameter-location": "client" + }, + "ApiVersion": { + "name": "api-version", + "description": "Version number of Azure Maps API. Current version is 2.0", + "type": "string", + "in": "query", + "required": true, + "default": "2.0", + "x-ms-parameter-location": "client" + }, + "CreateCreatorDataItemId": { + "name": "creatorDataItemId", + "description": "The unique id that references a creator data item to be aliased.", + "type": "string", + "in": "query", + "required": false, + "x-ms-parameter-location": "method" + }, + "AssignCreatorDataItemId": { + "name": "creatorDataItemId", + "description": "The unique id that references a creator data item to be aliased.", + "type": "string", + "in": "query", + "required": true, + "x-ms-parameter-location": "method" + }, + "AliasId": { + "name": "aliasId", + "description": "The unique id that references an existing alias.", + "type": "string", + "in": "path", + "required": true, + "x-ms-parameter-location": "method" + } + }, + "paths": { + "/aliases": { + "post": { + "x-publish": true, + "description": "## Alias - Create API\n\n### Applies to: S1 pricing tier.\n\nThis API allows the caller to create an alias. You can also assign the alias during the create request. An alias can reference an ID generated by a creator service, but cannot reference another alias ID.\n\n### Submit Create Request\n\nTo create your alias, you will use a `POST` request. If you would like to assign the alias during the creation, you will pass the `resourceId` query parameter.\n\n### Create Alias Response\n\nThe Create API returns a HTTP `201 Created` response with the alias resource in the body.\n\nA sample response from creating an alias:\n\n```json\n{\n \"createdTimestamp\": \"2020-02-13T21:19:11.123Z\",\n \"aliasId\": \"a8a4b8bb-ecf4-fb27-a618-f41721552766\",\n \"creatorDataItemId\": \"e89aebb9-70a3-8fe1-32bb-1fbd0c725f14\",\n \"lastUpdatedTimestamp\": \"2020-02-13T21:19:22.123Z\"\n}\n```", + "operationId": "Alias_Create", + "x-ms-examples": { + "Create an alias that does not reference any resource": { + "$ref": "./examples/Alias_Create.json" + } + }, + "parameters": [ + { + "$ref": "#/parameters/SubscriptionKey" + }, + { + "$ref": "#/parameters/ApiVersion" + }, + { + "$ref": "#/parameters/CreateCreatorDataItemId" + } + ], + "responses": { + "201": { + "description": "Content created successfully. The response body contains the newly created alias id `aliasId`.", + "schema": { + "$ref": "#/definitions/AliasCreateResponse" + }, + "headers": { + "Access-Control-Expose-Headers": { + "type": "string", + "description": "The list of response headers that can be read by the client." + } + } + }, + "400": { + "$ref": "#/responses/400" + }, + "401": { + "$ref": "#/responses/401" + }, + "403": { + "$ref": "#/responses/403" + }, + "404": { + "$ref": "#/responses/404" + }, + "500": { + "$ref": "#/responses/500" + } + } + }, + "get": { + "x-publish": true, + "description": "## Alias - List API\n\n### Applies to: S1 pricing tier.\n\nThis API allows the caller to fetch a list of all previously successfully created aliases.\n\n### Submit List Request\n\nTo list all your aliases, you will issue a `GET` request with no additional parameters.\n\n### List Data Response\n\nThe List API returns the complete list of all aliases in `json` format. The response contains the following details for each alias resource:\n > createdTimestamp - The timestamp that the alias was created. Format yyyy-MM-ddTHH:mm:ss.sssZ\n > aliasId - The id for the alias.\n > creatorDataItemId - The id for the creator data item that this alias references (could be null if the alias has not been assigned).\n > lastUpdatedTimestamp - The last time the alias was assigned to a resource. Format yyyy-MM-ddTHH:mm:ss.sssZ\n\nA sample response returning 2 alias resources:\n\n```json\n{\n \"aliases\": [\n {\n \"createdTimestamp\": \"2020-02-13T21:19:11.123Z\",\n \"aliasId\": \"a8a4b8bb-ecf4-fb27-a618-f41721552766\",\n \"creatorDataItemId\": \"e89aebb9-70a3-8fe1-32bb-1fbd0c725f14\",\n \"lastUpdatedTimestamp\": \"2020-02-13T21:19:22.123Z\"\n },\n {\n \"createdTimestamp\": \"2020-02-18T19:53:33.123Z\",\n \"aliasId\": \"1856dbfc-7a66-ee5a-bf8d-51dbfe1906f6\",\n \"creatorDataItemId\": null,\n \"lastUpdatedTimestamp\": \"2020-02-18T19:53:33.123Z\"\n }\n ]\n}\n```", + "operationId": "Alias_List", + "x-ms-examples": { + "List all the previously created aliases": { + "$ref": "./examples/Alias_List.json" + } + }, + "parameters": [ + { + "$ref": "#/parameters/SubscriptionKey" + }, + { + "$ref": "#/parameters/ApiVersion" + } + ], + "responses": { + "200": { + "description": "List alias request completed successfully. The response body contains a list of all the previously created aliases.", + "schema": { + "$ref": "#/definitions/AliasListResponse" + } + }, + "400": { + "$ref": "#/responses/400" + }, + "401": { + "$ref": "#/responses/401" + }, + "403": { + "$ref": "#/responses/403" + }, + "404": { + "$ref": "#/responses/404" + }, + "500": { + "$ref": "#/responses/500" + } + } + } + }, + "/aliases/{aliasId}": { + "put": { + "x-publish": true, + "description": "## Alias - Assign API\n\n### Applies to: S1 pricing tier.\n\nThis API allows the caller to assign an alias to reference a resource.\n\n### Submit Assign Request\n\nTo assign your alias to a resource, you will use a `PUT` request with the `aliasId` in the path and the `creatorDataItemId` passed as a query parameter.\n\n### Assign Alias Response\n\nThe Assign API returns a HTTP `200 OK` response with the updated alias resource in the body, if the alias was assigned successfully. A sample of the assign response is\n\n```json\n{\n \"createdTimestamp\": \"2020-02-13T21:19:11.123Z\",\n \"aliasId\": \"a8a4b8bb-ecf4-fb27-a618-f41721552766\",\n \"creatorDataItemId\": \"e89aebb9-70a3-8fe1-32bb-1fbd0c725f14\",\n \"lastUpdatedTimestamp\": \"2020-02-13T21:19:22.123Z\"\n}\n```", + "operationId": "Alias_Assign", + "x-ms-examples": { + "Assign an alias to a resource": { + "$ref": "./examples/Alias_Assign.json" + } + }, + "parameters": [ + { + "$ref": "#/parameters/AliasId" + }, + { + "$ref": "#/parameters/SubscriptionKey" + }, + { + "$ref": "#/parameters/ApiVersion" + }, + { + "$ref": "#/parameters/AssignCreatorDataItemId" + } + ], + "responses": { + "200": { + "description": "Alias was assigned successfully.", + "schema": { + "$ref": "#/definitions/AliasListItem" + } + }, + "400": { + "$ref": "#/responses/400" + }, + "401": { + "$ref": "#/responses/401" + }, + "403": { + "$ref": "#/responses/403" + }, + "404": { + "$ref": "#/responses/404" + }, + "500": { + "$ref": "#/responses/500" + } + } + }, + "delete": { + "x-publish": true, + "description": "## Alias - Delete API\n\n### Applies to: S1 pricing tier.\n\nThis API allows the caller to delete a previously created alias. You can also use this API to delete old/unused aliases to create space for new content.This API does not delete the references resource, only the alias referencing the resource.\n\n### Submit Delete Request\n\nTo delete your alias you will issue a `DELETE` request where the path will contain the `aliasId` of the alias to delete.\n\n### Delete Alias Response\n\nThe Delete API returns a HTTP `204 No Content` response with an empty body, if the alias was deleted successfully.", + "operationId": "Alias_Delete", + "x-ms-examples": { + "Delete previously created alias": { + "$ref": "./examples/Alias_Delete.json" + } + }, + "parameters": [ + { + "$ref": "#/parameters/AliasId" + }, + { + "$ref": "#/parameters/SubscriptionKey" + }, + { + "$ref": "#/parameters/ApiVersion" + } + ], + "responses": { + "204": { + "description": "Alias delete request completed successfully. The content for `aliasId` was deleted on the server." + }, + "400": { + "$ref": "#/responses/400" + }, + "401": { + "$ref": "#/responses/401" + }, + "403": { + "$ref": "#/responses/403" + }, + "404": { + "$ref": "#/responses/404" + }, + "500": { + "$ref": "#/responses/500" + } + } + }, + "get": { + "x-publish": true, + "description": "## Alias - Get Details API\n\n### Applies to: S1 pricing tier.\n\nThis API allows the caller to fetch the details of a previously created alias.\n\n### Submit Get Details Request\n\nTo get the details of your alias, you will issue a `GET` request with the `aliasId` in the path.\n\n### Get Details Response\n\nThe Get Details API returns the previously created alias in `json` format. The response contains the following details for the alias resource:\n > createdTimestamp - The timestamp that the alias was created.\n > aliasId - The id for the alias.\n > creatorDataItemId - The id for the creator data item that this alias references (could be null if the alias has not been assigned).\n > lastUpdatedTimestamp - The last time the alias was assigned to a resource.\n\nHere's a sample response:\n```json\n{\n \"createdTimestamp\": \"2020-02-13T21:19:11.123Z\",\n \"aliasId\": \"a8a4b8bb-ecf4-fb27-a618-f41721552766\",\n \"creatorDataItemId\": \"e89aebb9-70a3-8fe1-32bb-1fbd0c725f14\",\n \"lastUpdatedTimestamp\": \"2020-02-13T21:19:22.123Z\"\n}\n```", + "operationId": "Alias_GetDetails", + "x-ms-examples": { + "Get a previously created alias": { + "$ref": "./examples/Alias_GetDetails.json" + } + }, + "parameters": [ + { + "$ref": "#/parameters/AliasId" + }, + { + "$ref": "#/parameters/SubscriptionKey" + }, + { + "$ref": "#/parameters/ApiVersion" + } + ], + "responses": { + "200": { + "description": "Get alias request completed successfully. The response body contains the previously created alias.", + "schema": { + "$ref": "#/definitions/AliasListItem" + } + }, + "400": { + "$ref": "#/responses/400" + }, + "401": { + "$ref": "#/responses/401" + }, + "403": { + "$ref": "#/responses/403" + }, + "404": { + "$ref": "#/responses/404" + }, + "500": { + "$ref": "#/responses/500" + } + } + } + } + }, + "definitions": { + "ODataErrorResponse": { + "type": "object", + "description": "This response object is returned when an error occurs in the Maps API.", + "properties": { + "error": { + "$ref": "#/definitions/ODataError" + } + } + }, + "ODataError": { + "type": "object", + "description": "This object is returned when an error occurs in the Maps API.", + "properties": { + "code": { + "type": "string", + "readOnly": true, + "description": "The ODataError code." + }, + "message": { + "type": "string", + "readOnly": true, + "description": "If available, a human readable description of the error." + }, + "details": { + "type": "array", + "items": { + "$ref": "#/definitions/ODataError" + } + }, + "target": { + "type": "string", + "readOnly": true, + "description": "If available, the target causing the error." + } + } + }, + "AliasCreateResponse": { + "description": "The response model for the Alias Create API for the case when the alias was successfully created.", + "type": "object", + "properties": { + "createdTimestamp": { + "description": "The created timestamp for the alias.", + "type": "string", + "readOnly": true + }, + "aliasId": { + "description": "The id for the alias.", + "type": "string", + "readOnly": true + }, + "creatorDataItemId": { + "description": "The id for the creator data item that this alias references (could be null if the alias has not been assigned).", + "type": "string", + "readOnly": true + }, + "lastUpdatedTimestamp": { + "description": "The timestamp of the last time the alias was assigned.", + "type": "string", + "readOnly": true + } + } + }, + "AliasListResponse": { + "description": "The response model for the List API. Returns a list of all the previously created aliases.", + "type": "object", + "properties": { + "aliases": { + "description": "A list of all the previously created aliases.", + "type": "array", + "readOnly": true, + "items": { + "$ref": "#/definitions/AliasListItem" + } + }, + "nextLink": { + "description": "If present, the location of the next page of data.", + "type": "string", + "readOnly": true + } + } + }, + "AliasListItem": { + "description": "Detailed information for the alias.", + "type": "object", + "properties": { + "createdTimestamp": { + "description": "The created timestamp for the alias.", + "type": "string", + "readOnly": true + }, + "aliasId": { + "description": "The id for the alias.", + "type": "string", + "readOnly": true + }, + "creatorDataItemId": { + "description": "The id for the creator data item that this alias references (could be null if the alias has not been assigned).", + "type": "string", + "readOnly": true + }, + "lastUpdatedTimestamp": { + "description": "The timestamp of the last time the alias was assigned.", + "type": "string", + "readOnly": true + } + } + } + } +} diff --git a/specification/maps/data-plane/Microsoft.Maps/Alias/preview/2.0/examples/Alias_Assign.json b/specification/maps/data-plane/Microsoft.Maps/Alias/preview/2.0/examples/Alias_Assign.json new file mode 100644 index 000000000000..7ae554db0c33 --- /dev/null +++ b/specification/maps/data-plane/Microsoft.Maps/Alias/preview/2.0/examples/Alias_Assign.json @@ -0,0 +1,63 @@ +{ + "parameters": { + "api-version": "2.0", + "subscription-key": "[subscription-key]", + "aliasId": "[aliasId]", + "creatorDataItemId": "[creatorDataItemId]" + }, + "responses": { + "200": { + "body": { + "createdTimestamp": "2021-05-01T01:02:03.456Z", + "aliasId": "25084fb7-307a-4720-8f91-7952a0b91012", + "creatorDataItemId": "633a009a-dfa2-4d51-a419-420122e11c94", + "lastUpdatedTimestamp": "2021-05-01T01:02:03.456Z" + } + }, + "400": { + "headers": {}, + "body": { + "error": { + "code": "400 BadRequest", + "message": "Bad request - Error message." + } + } + }, + "401": { + "headers": {}, + "body": { + "error": { + "code": "401 Unauthorized", + "message": "Access denied due to invalid subscription key. Make sure to provide a valid key for an active subscription." + } + } + }, + "403": { + "headers": {}, + "body": { + "error": { + "code": "403 Forbidden", + "message": "Permission, capacity, or authentication issues." + } + } + }, + "404": { + "headers": {}, + "body": { + "error": { + "code": "404 NotFound", + "message": "Not Found - The requested resource could not be found, but it may be available again in the future." + } + } + }, + "500": { + "headers": {}, + "body": { + "error": { + "code": "500 InternalServerError", + "message": "Unknown error - An error occurred while processing the request. Please try again later." + } + } + } + } +} diff --git a/specification/maps/data-plane/Microsoft.Maps/Alias/preview/2.0/examples/Alias_Create.json b/specification/maps/data-plane/Microsoft.Maps/Alias/preview/2.0/examples/Alias_Create.json new file mode 100644 index 000000000000..12fc7a5b47dd --- /dev/null +++ b/specification/maps/data-plane/Microsoft.Maps/Alias/preview/2.0/examples/Alias_Create.json @@ -0,0 +1,62 @@ +{ + "parameters": { + "api-version": "2.0", + "subscription-key": "[subscription-key]" + }, + "responses": { + "201": { + "headers": {}, + "body": { + "createdTimestamp": "2021-05-01T01:02:03.456Z", + "aliasId": "25084fb7-307a-4720-8f91-7952a0b91012", + "creatorDataItemId": null, + "lastUpdatedTimestamp": "2021-05-01T01:02:03.456Z" + } + }, + "400": { + "headers": {}, + "body": { + "error": { + "code": "400 BadRequest", + "message": "Bad request - Error message." + } + } + }, + "401": { + "headers": {}, + "body": { + "error": { + "code": "401 Unauthorized", + "message": "Access denied due to invalid subscription key. Make sure to provide a valid key for an active subscription." + } + } + }, + "403": { + "headers": {}, + "body": { + "error": { + "code": "403 Forbidden", + "message": "Permission, capacity, or authentication issues." + } + } + }, + "404": { + "headers": {}, + "body": { + "error": { + "code": "404 NotFound", + "message": "Not Found - The requested resource could not be found, but it may be available again in the future." + } + } + }, + "500": { + "headers": {}, + "body": { + "error": { + "code": "500 InternalServerError", + "message": "Unknown error - An error occurred while processing the request. Please try again later." + } + } + } + } +} diff --git a/specification/maps/data-plane/Microsoft.Maps/Alias/preview/2.0/examples/Alias_Delete.json b/specification/maps/data-plane/Microsoft.Maps/Alias/preview/2.0/examples/Alias_Delete.json new file mode 100644 index 000000000000..e153d57bb648 --- /dev/null +++ b/specification/maps/data-plane/Microsoft.Maps/Alias/preview/2.0/examples/Alias_Delete.json @@ -0,0 +1,55 @@ +{ + "parameters": { + "api-version": "2.0", + "subscription-key": "[subscription-key]", + "aliasId": "[aliasId]" + }, + "responses": { + "204": {}, + "400": { + "headers": {}, + "body": { + "error": { + "code": "400 BadRequest", + "message": "Bad request - One or more parameters were incorrectly specified or are mutually exclusive." + } + } + }, + "401": { + "headers": {}, + "body": { + "error": { + "code": "401 Unauthorized", + "message": "Access denied due to invalid subscription key. Make sure to provide a valid key for an active subscription." + } + } + }, + "403": { + "headers": {}, + "body": { + "error": { + "code": "403 Forbidden", + "message": "Permission, capacity, or authentication issues." + } + } + }, + "404": { + "headers": {}, + "body": { + "error": { + "code": "404 NotFound", + "message": "Not Found - The requested resource could not be found, but it may be available again in the future." + } + } + }, + "500": { + "headers": {}, + "body": { + "error": { + "code": "500 InternalServerError", + "message": "Unknown error - An error occurred while processing the request. Please try again later." + } + } + } + } +} diff --git a/specification/maps/data-plane/Microsoft.Maps/Alias/preview/2.0/examples/Alias_GetDetails.json b/specification/maps/data-plane/Microsoft.Maps/Alias/preview/2.0/examples/Alias_GetDetails.json new file mode 100644 index 000000000000..374920bb0467 --- /dev/null +++ b/specification/maps/data-plane/Microsoft.Maps/Alias/preview/2.0/examples/Alias_GetDetails.json @@ -0,0 +1,62 @@ +{ + "parameters": { + "api-version": "2.0", + "subscription-key": "[subscription-key]", + "aliasId": "[aliasId]" + }, + "responses": { + "200": { + "body": { + "createdTimestamp": "2020-02-13T21:19:11+00:00", + "aliasId": "a8a4b8bb-ecf4-fb27-a618-f41721552766", + "creatorDataItemId": "e89aebb9-70a3-8fe1-32bb-1fbd0c725f14", + "lastUpdatedTimestamp": "2020-02-13T21:19:22+00:00" + } + }, + "400": { + "headers": {}, + "body": { + "error": { + "code": "400 BadRequest", + "message": "Bad request - One or more parameters were incorrectly specified or are mutually exclusive." + } + } + }, + "401": { + "headers": {}, + "body": { + "error": { + "code": "401 Unauthorized", + "message": "Access denied due to invalid subscription key. Make sure to provide a valid key for an active subscription." + } + } + }, + "403": { + "headers": {}, + "body": { + "error": { + "code": "403 Forbidden", + "message": "Permission, capacity, or authentication issues." + } + } + }, + "404": { + "headers": {}, + "body": { + "error": { + "code": "404 NotFound", + "message": "Not Found - The requested resource could not be found, but it may be available again in the future." + } + } + }, + "500": { + "headers": {}, + "body": { + "error": { + "code": "500 InternalServerError", + "message": "Unknown error - An error occurred while processing the request. Please try again later." + } + } + } + } +} diff --git a/specification/maps/data-plane/Microsoft.Maps/Alias/preview/2.0/examples/Alias_List.json b/specification/maps/data-plane/Microsoft.Maps/Alias/preview/2.0/examples/Alias_List.json new file mode 100644 index 000000000000..347e400b1c1a --- /dev/null +++ b/specification/maps/data-plane/Microsoft.Maps/Alias/preview/2.0/examples/Alias_List.json @@ -0,0 +1,71 @@ +{ + "parameters": { + "api-version": "2.0", + "subscription-key": "[subscription-key]" + }, + "responses": { + "200": { + "body": { + "aliases": [ + { + "createdTimestamp": "2020-02-13T21:19:11+00:00", + "aliasId": "a8a4b8bb-ecf4-fb27-a618-f41721552766", + "creatorDataItemId": "e89aebb9-70a3-8fe1-32bb-1fbd0c725f14", + "lastUpdatedTimestamp": "2020-02-13T21:19:22+00:00" + }, + { + "createdTimestamp": "2020-02-13T21:19:11+00:00", + "aliasId": "1856dbfc-7a66-ee5a-bf8d-51dbfe1906f6", + "creatorDataItemId": null, + "lastUpdatedTimestamp": "2020-02-13T21:19:11+00:00" + } + ] + } + }, + "400": { + "headers": {}, + "body": { + "error": { + "code": "400 BadRequest", + "message": "Bad request - One or more parameters were incorrectly specified or are mutually exclusive." + } + } + }, + "401": { + "headers": {}, + "body": { + "error": { + "code": "401 Unauthorized", + "message": "Access denied due to invalid subscription key. Make sure to provide a valid key for an active subscription." + } + } + }, + "403": { + "headers": {}, + "body": { + "error": { + "code": "403 Forbidden", + "message": "Permission, capacity, or authentication issues." + } + } + }, + "404": { + "headers": {}, + "body": { + "error": { + "code": "404 NotFound", + "message": "Not Found - The requested resource could not be found, but it may be available again in the future." + } + } + }, + "500": { + "headers": {}, + "body": { + "error": { + "code": "500 InternalServerError", + "message": "Unknown error - An error occurred while processing the request. Please try again later." + } + } + } + } +} diff --git a/specification/maps/data-plane/Microsoft.Maps/Data/preview/2.0/data.json b/specification/maps/data-plane/Microsoft.Maps/Data/preview/2.0/data.json new file mode 100644 index 000000000000..8f3b42e591d7 --- /dev/null +++ b/specification/maps/data-plane/Microsoft.Maps/Data/preview/2.0/data.json @@ -0,0 +1,673 @@ +{ + "swagger": "2.0", + "info": { + "title": "Azure Maps Data Service", + "version": "2.0", + "description": "APIs for uploading map data to Azure Maps." + }, + "host": "atlas.microsoft.com", + "schemes": [ + "https" + ], + "consumes": [], + "produces": [ + "application/json" + ], + "securityDefinitions": { + "azure_auth": { + "type": "oauth2", + "authorizationUrl": "https://login.microsoftonline.com/common/oauth2/authorize", + "flow": "implicit", + "description": "These are the [Azure Active Directory OAuth2](https://docs.microsoft.com/en-us/azure/active-directory/develop/v1-overview) Flows. When paired with [Azure Role Based Access](https://docs.microsoft.com/en-us/azure/role-based-access-control/overview) control it can be used to control access to Azure Maps REST APIs. Azure Role based access controls are used to designate access to one or more Azure Maps resource account or sub-resources. Any user, group, or service principal can be granted access via a built in role or a custom role composed of one or more permissions to Azure Maps REST APIs.\n\nTo implement scenarios we recommend viewing [authentication concepts](https://aka.ms/amauth). In summary, this security definition provides a solution for modeling application(s) via objects capable of access control on specific APIs and scopes.\n\n#### Note\n* This security definition **requires** the use of the `x-ms-client-id` header to indicate which Azure Maps resource the application is requesting access to. This can be acquired from the [Maps management API](https://aka.ms/amauthdetails).\n* The `Authorization URL` is specific to the Azure public cloud instance. Sovereign clouds have unique Authorization URLs and Azure Active directory configurations. \n* The Azure role based access control is configured from the [Azure management plane](https://aka.ms/amrbac) via Azure portal, Powershell, CLI, Azure SDKs, or REST APIs.\n* Usage of the [Azure Maps Web SDK](https://aka.ms/amaadmc) allows for configuration based setup of an application for multiple use cases.\n* Currently Azure Active Directory [v1.0](https://docs.microsoft.com/en-us/azure/active-directory/develop/azure-ad-endpoint-comparison) tokens are supported.", + "scopes": { + "user_impersonation": "Impersonates a user's Azure Active Directory account." + } + }, + "apiKeyQuery": { + "type": "apiKey", + "description": "This is a shared key which is provisioned when creating an [Azure Maps resource](https://aka.ms/amauth) through the Azure management plane via Azure portal, Powershell, CLI, Azure SDKs, or REST APIs. With this key, any application is authorized to access all REST APIs. In other words, these can currently be treated as master keys to the account which they are issued for. For publicly exposed applications our recommendation is to use server to server access of Azure Maps REST APIs where this key can be securely stored.", + "name": "subscription-key", + "in": "query" + } + }, + "security": [ + { + "azure_auth": [] + }, + { + "apiKeyQuery": [] + } + ], + "responses": { + "400": { + "description": "Bad request: one or more parameters were incorrectly specified or are mutually exclusive.", + "schema": { + "$ref": "#/definitions/ODataErrorResponse" + } + }, + "401": { + "description": "Access denied due to invalid subscription key or invalid Azure Active Directory bearer token. Make sure to provide a valid key for an active Azure subscription and Maps resource. Otherwise, verify the [WWW-Authenticate](https://tools.ietf.org/html/rfc6750#section-3.1) header for error code and description of the provided AAD bearer token.", + "schema": { + "$ref": "#/definitions/ODataErrorResponse" + }, + "headers": { + "WWW-Authenticate": { + "type": "string", + "description": "Bearer realm=\"https://atlas.microsoft.com/\", error=\"invalid_token\", error_description=\"The access token expired\"" + } + } + }, + "403": { + "description": "Permission, capacity, or authentication issues.", + "schema": { + "$ref": "#/definitions/ODataErrorResponse" + } + }, + "404": { + "description": "Not Found: the requested resource could not be found, but it may be available again in the future.", + "schema": { + "$ref": "#/definitions/ODataErrorResponse" + } + }, + "500": { + "description": "An error occurred while processing the request. Please try again later.", + "schema": { + "$ref": "#/definitions/ODataErrorResponse" + } + }, + "200Async": { + "description": "The operation is running or complete. If the operation was successful, use the Resource-Location header to obtain the path to the result.", + "schema": { + "$ref": "#/definitions/LongRunningOperationResult" + }, + "headers": { + "Resource-Location": { + "type": "string", + "description": "If successful, a URI where details on the newly created resource can be found." + } + } + }, + "202Accepted": { + "description": "Request Accepted: The request has been accepted for processing. Please use the URL in the Operation-Location Header to obtain status.", + "headers": { + "Operation-Location": { + "type": "string", + "description": "New URL to check for the results of the long running process." + } + } + } + }, + "parameters": { + "ClientId": { + "name": "x-ms-client-id", + "description": "Specifies which account is intended for usage in conjunction with the Azure AD security model. It represents a unique ID for the Azure Maps account and can be retrieved from Azure Maps management plane Account API. To use Azure AD security in Azure Maps see the following [articles](https://aka.ms/amauthdetails) for guidance.", + "type": "string", + "in": "header", + "required": false, + "x-ms-parameter-location": "client" + }, + "SubscriptionKey": { + "name": "subscription-key", + "description": "One of the Azure Maps keys provided from an Azure Map Account. Please refer to this [article](https://docs.microsoft.com/azure/azure-maps/how-to-manage-authentication) for details on how to manage authentication.", + "type": "string", + "in": "query", + "required": false, + "x-ms-parameter-location": "client" + }, + "ApiVersion": { + "name": "api-version", + "description": "Version number of Azure Maps API. Current version is 2.0", + "type": "string", + "in": "query", + "required": true, + "default": "2.0", + "x-ms-parameter-location": "client" + }, + "JsonFormat": { + "name": "format", + "description": "Desired format of the response. Only `json` format is supported.", + "type": "string", + "in": "path", + "required": true, + "enum": [ + "json" + ], + "x-ms-enum": { + "name": "JsonFormat", + "modelAsString": true, + "values": [ + { + "value": "json", + "description": "[The JavaScript Object Notation Data Interchange Format](https://tools.ietf.org/html/rfc8259)" + } + ] + }, + "x-ms-parameter-location": "method" + }, + "UploadDataFormat": { + "name": "dataFormat", + "description": "Data format of the content being uploaded.", + "type": "string", + "in": "query", + "required": true, + "enum": [ + "geojson", + "zip", + "dwgzippackage" + ], + "x-ms-enum": { + "name": "UploadDataFormat", + "modelAsString": true, + "values": [ + { + "value": "geojson", + "description": "[GeoJSON](https://tools.ietf.org/html/rfc7946) is a JSON based geospatial data interchange format." + }, + { + "value": "zip", + "description": "Compressed data format." + }, + { + "value": "dwgzippackage", + "description": "" + } + ] + }, + "x-ms-parameter-location": "method" + }, + "Udid": { + "name": "udid", + "description": "The unique data id for the content. The `udid` must have been obtained from a successful [Data Upload API](https://docs.microsoft.com/en-us/rest/api/maps/data/uploadpreview) call.", + "type": "string", + "in": "path", + "required": true, + "x-ms-parameter-location": "method" + }, + "Description": { + "name": "description", + "description": "The description to be given to the upload.", + "type": "string", + "in": "query", + "required": false, + "x-ms-parameter-location": "method" + }, + "DataUploadOperationId": { + "name": "operationId", + "type": "string", + "in": "path", + "description": "The ID to query the status for the data upload request.", + "required": true, + "x-ms-parameter-location": "method" + } + }, + "paths": { + "/mapData": { + "post": { + "x-publish": true, + "description": "**Data Upload API**\n\n**Applies to:** S1 pricing tier.\n\nThe Data Upload API allows the caller to upload data content to the Azure Maps service.\nYou can use this API in a scenario like uploading a collection of Geofences in `GeoJSON` \nformat, for use in our [Azure Maps Geofencing Service](https://docs.microsoft.com/rest/api/maps/spatial).\n\n## Submit Upload Request\n\nTo upload your content you will use a `POST` request. The request body will contain the data to upload. The \n`dataFormat` query parameter will contain the format for the data, the `dataSharingLevel` query parameter \ncan contain the sharing level for the data. The `Content-Type` header will be set to the content type of the \ndata.\n\nFor example, to upload a collection of geofences in `GeoJSON` format, set the request body to the geofence \ncontent. Set the `dataFormat` query parameter to _geojson_, and set the `Content-Type` header to either one \nof the following media types:\n\n- `application/json`\n- `application/vnd.geo+json`\n- `application/octet-stream`\n\nHere's a sample request body for uploading a simple Geofence represented as a circle geometry using a center \npoint and a radius. The sample below is in `GeoJSON`:\n\n```json\n{\n \"type\": \"FeatureCollection\",\n \"features\": [{\n \"type\": \"Feature\",\n \"geometry\": {\n \"type\": \"Point\",\n \"coordinates\": [-122.126986, 47.639754]\n },\n \"properties\": {\n \"geometryId\": \"001\",\n \"radius\": 500\n }\n }]\n}\n```\n\nThe Data Upload API performs a \n[long-running request](https://docs.microsoft.com/azure/azure-maps/private-atlas-long-running-operation).\n\n## Data Upload Limits\n\nPlease, be aware that currently every Azure Maps account has a [data storage limit](https://docs.microsoft.com/en-us/azure/azure-resource-manager/management/azure-subscription-service-limits#azure-maps-limits). \nOnce the storage limit is reached, all the new upload API calls will return a `409 Conflict` http error response. \nYou can always use the [Data Delete API](https://docs.microsoft.com/rest/api/maps/data/deletepreview) to \ndelete old/unused content and create space for new uploads.", + "operationId": "Data_Upload", + "x-ms-long-running-operation": true, + "x-ms-long-running-operation-options": { + "final-state-via": "location" + }, + "x-ms-examples": { + "Upload GeoJSON data containing geometries that represent a collection of geofences": { + "$ref": "./examples/Upload.json" + } + }, + "parameters": [ + { + "$ref": "#/parameters/ClientId" + }, + { + "$ref": "#/parameters/SubscriptionKey" + }, + { + "$ref": "#/parameters/ApiVersion" + }, + { + "$ref": "#/parameters/Description" + }, + { + "$ref": "#/parameters/UploadDataFormat" + }, + { + "name": "UploadContent", + "in": "body", + "description": "The content to upload.", + "required": true, + "schema": { + "type": "object" + } + } + ], + "responses": { + "200": { + "description": "Data upload failed. The uploaded content did not satisfy all the validation checks. The response body contains all the errors that were encountered.", + "schema": { + "$ref": "#/definitions/ODataErrorResponse" + } + }, + "202": { + "$ref": "#/responses/202Accepted" + }, + "400": { + "$ref": "#/responses/400" + }, + "401": { + "$ref": "#/responses/401" + }, + "403": { + "$ref": "#/responses/403" + }, + "404": { + "$ref": "#/responses/404" + }, + "500": { + "$ref": "#/responses/500" + } + } + }, + "get": { + "x-publish": true, + "description": "**Data List API**\n\n**Applies to:** S1 pricing tier.\n
\n\nThis API allows the caller to fetch a list of all content uploaded previously using the [Data Upload API](https://docs.microsoft.com/en-us/rest/api/maps/data/uploadpreview). \n\n\n### Submit List Request\n\nTo list all your map data content you will issue a `GET` request with no additional parameters.\n\n\n### List Data Response\n\nThe Data List API returns the complete list of all data in `json` format. The response contains the following details for each data resource:\n\n > udid - The unique data id for the data resource.\n\n > location - The location of the data resource. Execute a HTTP `GET` on this location to download the data.\n\n\nHere's a sample response returning the `udid` and `location` of 3 data resources: \n\n
\n\n```json\n{\n \"mapDataList\": \n [\n {\n \"udid\": \"9a1288fa-1858-4a3b-b68d-13a8j5af7d7c\",\n \"location\": \"https://atlas.microsoft.com/mapData/9a1288fa-1858-4a3b-b68d-13a8j5af7d7c?api-version=1.0\",\n \"sizeInBytes\": 29920,\n \"uploadStatus\": \"Completed\"\n },\n {\n \"udid\": \"8b1288fa-1958-4a2b-b68e-13a7i5af7d7c\",\n \"location\": \"https://atlas.microsoft.com/mapData/8b1288fa-1958-4a2b-b68e-13a7i5af7d7c?api-version=1.0\",\n \"sizeInBytes\": 1339,\n \"uploadStatus\": \"Completed\"\n },\n {\n \"udid\": \"7c1288fa-2058-4a1b-b68f-13a6h5af7d7c\",\n \"location\": \"https://atlas.microsoft.com/mapData/7c1288fa-2058-4a1b-b68f-13a6h5af7d7c?api-version=1.0\",\n \"sizeInBytes\": 1650,\n \"uploadStatus\": \"Pending\"\n }]\n}\n```\n\n
", + "operationId": "Data_List", + "x-ms-examples": { + "List all the previously uploaded data": { + "$ref": "./examples/List.json" + } + }, + "parameters": [ + { + "$ref": "#/parameters/ClientId" + }, + { + "$ref": "#/parameters/SubscriptionKey" + }, + { + "$ref": "#/parameters/ApiVersion" + } + ], + "responses": { + "200": { + "description": "List data request completed successfully. The response body contains a list of all the previously uploaded data.", + "schema": { + "$ref": "#/definitions/MapDataListResponse" + }, + "headers": { + "Content-Type": { + "type": "string", + "description": "The content-type for the Download API response." + } + } + }, + "400": { + "$ref": "#/responses/400" + }, + "401": { + "$ref": "#/responses/401" + }, + "403": { + "$ref": "#/responses/403" + }, + "404": { + "$ref": "#/responses/404" + }, + "500": { + "$ref": "#/responses/500" + } + } + } + }, + "/mapData/{udid}": { + "put": { + "x-publish": true, + "description": "**Data Update API**\n\n**Applies to:** S1 pricing tier.\n\nThe Data Update API allows the caller to update a previously uploaded data content.\n\nYou can use this API in a scenario like adding or removing geofences to or from an existing collection of geofences. \nGeofences are uploaded using the [Data Upload API](https://docs.microsoft.com/rest/api/maps/data/uploadpreview), for \nuse in the [Azure Maps Geofencing Service](https://docs.microsoft.com/rest/api/maps/spatial).\n\nPlease note that the Update API will *replace* and *override* the existing data content.\n\n## Submit Update Request\n\nTo update your content you will use a `PUT` request. The request body will contain the new data that will replace \nthe existing data. The `Content-Type` header will be set to the content type of the data, and the path will contain \nthe `udid` of the data to be update.\n\nFor example, to update a collection of geofences that were previously uploaded using the Upload API, place the new \ngeofence content in the request body. Set the `udid` parameter in the path to the `udid` of the data received \npreviously in the upload API response. And set the `Content-Type` header to one of the following media types:\n\n- `application/json`\n- `application/vnd.geo+json`\n- `application/octet-stream`\n\nHere's a sample request body for updating a simple Geofence. It's represented as a circle geometry using a center \npoint and a radius. The sample below is in `GeoJSON`:\n\n```json\n{\n \"type\": \"FeatureCollection\",\n \"features\": [{\n \"type\": \"Feature\",\n \"geometry\": {\n \"type\": \"Point\",\n \"coordinates\": [-122.126986, 47.639754]\n },\n \"properties\": {\n \"geometryId\": \"001\",\n \"radius\": 500\n }\n }]\n}\n```\n\nThe previously uploaded geofence had a radius of 100m. The above request will update it to 500m.\n\nThe Data Update API performs a \n[long-running request](https://docs.microsoft.com/azure/azure-maps/private-atlas-long-running-operation).\n\n## Data Update Limits\n\nPlease, be aware that currently every Azure Maps account has a [data storage limit](https://docs.microsoft.com/en-us/azure/azure-resource-manager/management/azure-subscription-service-limits#azure-maps-limits). \nOnce the storage limit is reached, all the new upload API calls will return a `409 Conflict` http error response. \nYou can always use the [Data Delete API](https://docs.microsoft.com/rest/api/maps/data/deletepreview) to \ndelete old/unused content and create space for new uploads.", + "operationId": "Data_Update", + "x-ms-long-running-operation": true, + "x-ms-long-running-operation-options": { + "final-state-via": "location" + }, + "x-ms-examples": { + "Update previously uploaded GeoJSON data containing geometries that represent a collection of geofences": { + "$ref": "./examples/Update.json" + } + }, + "parameters": [ + { + "$ref": "#/parameters/ClientId" + }, + { + "$ref": "#/parameters/SubscriptionKey" + }, + { + "$ref": "#/parameters/ApiVersion" + }, + { + "$ref": "#/parameters/Udid" + }, + { + "$ref": "#/parameters/Description" + }, + { + "name": "UpdateContent", + "in": "body", + "description": "The new content that will update/replace the previously uploaded content.", + "required": true, + "schema": { + "type": "object" + } + } + ], + "responses": { + "200": { + "description": "Data update failed. The uploaded content did not satisfy all the validation checks. The response body contains all the errors that were encountered.", + "schema": { + "$ref": "#/definitions/ODataErrorResponse" + } + }, + "202": { + "$ref": "#/responses/202Accepted" + }, + "400": { + "$ref": "#/responses/400" + }, + "401": { + "$ref": "#/responses/401" + }, + "403": { + "$ref": "#/responses/403" + }, + "404": { + "$ref": "#/responses/404" + }, + "500": { + "$ref": "#/responses/500" + } + } + }, + "get": { + "x-publish": true, + "description": "**Data Download API**\n\n**Applies to:** S1 pricing tier.\n
\n\nThis API allows the caller to download a previously uploaded data content.
\nYou can use this API in a scenario like downloading an existing collection of geofences uploaded previously using the [Data Upload API](https://docs.microsoft.com/en-us/rest/api/maps/data/uploadpreview) for use in our [Azure Maps Geofencing Service](https://docs.microsoft.com/en-us/rest/api/maps/spatial). \n\n\n### Submit Download Request\n\nTo download your content you will use a `GET` request where the path will contain the `udid` of the data to download. Optionally, you can also pass in an `Accept` header to specify a preference for the `Content-Type` of the data response.
\nFor example, to download a collection of geofences previously uploaded using the Upload API, set the `udid` parameter in the path to the `udid` of the data received previously in the upload API response and set the `Accept` header to either one of the following media types: \n \n - `application/json`\n - `application/vnd.geo+json`\n - `application/octet-stream`\n\n\n### Download Data Response\n\nThe Download API will return a HTTP `200 OK` response if the data resource with the passed-in `udid` is found, where the response body will contain the content of the data resource.
\nA HTTP `400 Bad Request` error response will be returned if the data resource with the passed-in `udid` is not found.
\n\nHere's a sample response body for a simple geofence represented in `GeoJSON` uploaded previously using the Upload API:\n
\n\n```json\n{\n \"type\": \"FeatureCollection\",\n \"features\": [{\n \"type\": \"Feature\",\n \"geometry\": {\n \"type\": \"Point\",\n \"coordinates\": [-122.126986, 47.639754]\n },\n \"properties\": {\n \"geometryId\": \"001\",\n \"radius\": 500\n }\n }]\n}\n```", + "operationId": "Data_Download", + "x-ms-examples": { + "Download previously uploaded GeoJSON data containing geometries that represent a collection of geofences": { + "$ref": "./examples/Download.json" + } + }, + "parameters": [ + { + "$ref": "#/parameters/ClientId" + }, + { + "$ref": "#/parameters/SubscriptionKey" + }, + { + "$ref": "#/parameters/ApiVersion" + }, + { + "$ref": "#/parameters/Udid" + } + ], + "responses": { + "200": { + "description": "Data download request completed successfully. The response body will contain the content for the passed in `udid`.", + "schema": { + "$ref": "#/definitions/MapDataDownloadResponse" + }, + "headers": { + "Content-Type": { + "type": "string", + "description": "The content-type for the Download API response." + } + } + }, + "400": { + "$ref": "#/responses/400" + }, + "401": { + "$ref": "#/responses/401" + }, + "403": { + "$ref": "#/responses/403" + }, + "404": { + "$ref": "#/responses/404" + }, + "500": { + "$ref": "#/responses/500" + } + } + }, + "delete": { + "x-publish": true, + "description": "**Data Delete API**\n\n**Applies to:** S1 pricing tier.\n
\n\nThis API allows the caller to delete a previously uploaded data content.
\nYou can use this API in a scenario like removing geofences previously uploaded using the [Data Upload API](https://docs.microsoft.com/en-us/rest/api/maps/data/uploadpreview) for use in our [Azure Maps Geofencing Service](https://docs.microsoft.com/en-us/rest/api/maps/spatial). You can also use this API to delete old/unused uploaded content and create space for new content.\n\n\n### Submit Delete Request\n\nTo delete your content you will issue a `DELETE` request where the path will contain the `udid` of the data to delete.
\nFor example, to delete a collection of geofences previously uploaded using the Upload API, set the `udid` parameter in the path to the `udid` of the data received previously in the upload API response. \n\n\n### Delete Data Response\n\nThe Data Delete API returns a HTTP `204 No Content` response with an empty body, if the data resource was deleted successfully.
\nA HTTP `400 Bad Request` error response will be returned if the data resource with the passed-in `udid` is not found. ", + "operationId": "Data_Delete", + "x-ms-examples": { + "Delete previously uploaded GeoJSON data containing geometries that represent a collection of geofences": { + "$ref": "./examples/Delete.json" + } + }, + "parameters": [ + { + "$ref": "#/parameters/ClientId" + }, + { + "$ref": "#/parameters/SubscriptionKey" + }, + { + "$ref": "#/parameters/ApiVersion" + }, + { + "$ref": "#/parameters/Udid" + } + ], + "responses": { + "204": { + "description": "Data delete request completed successfully. The content for `udid` was deleted on the server." + }, + "400": { + "$ref": "#/responses/400" + }, + "401": { + "$ref": "#/responses/401" + }, + "403": { + "$ref": "#/responses/403" + }, + "404": { + "$ref": "#/responses/404" + }, + "500": { + "$ref": "#/responses/500" + } + } + } + }, + "/mapData/operations/{operationId}": { + "get": { + "description": "This path will be obtained from a call to POST /mapData. While in progress, an http200 will be returned with no extra headers - followed by an http200 with Resource-Location header once completed.", + "operationId": "Data_GetOperation", + "x-ms-examples": { + "Get the status of an operation which is still running": { + "$ref": "./examples/GetOperationStillRunning.json" + }, + "Get the status of an operation which has finished successfully": { + "$ref": "./examples/GetOperation.json" + } + }, + "parameters": [ + { + "$ref": "#/parameters/SubscriptionKey" + }, + { + "$ref": "#/parameters/ApiVersion" + }, + { + "$ref": "#/parameters/DataUploadOperationId" + } + ], + "responses": { + "200": { + "$ref": "#/responses/200Async" + }, + "400": { + "$ref": "#/responses/400" + } + } + } + } + }, + "definitions": { + "ODataErrorResponse": { + "type": "object", + "description": "This response object is returned when an error occurs in the Maps API.", + "properties": { + "error": { + "$ref": "#/definitions/ODataError" + } + } + }, + "ODataError": { + "type": "object", + "description": "This object is returned when an error occurs in the Maps API.", + "properties": { + "code": { + "type": "string", + "readOnly": true, + "description": "The ODataError code." + }, + "message": { + "type": "string", + "readOnly": true, + "description": "If available, a human readable description of the error." + }, + "details": { + "type": "array", + "items": { + "$ref": "#/definitions/ODataError" + } + }, + "target": { + "type": "string", + "readOnly": true, + "description": "If available, the target causing the error." + } + } + }, + "LongRunningOperationResult": { + "description": "The response model for a Long-Running Operations API.", + "type": "object", + "properties": { + "operationId": { + "description": "The Id for this long-running operation.", + "type": "string" + }, + "status": { + "description": "The status state of the request.", + "type": "string", + "enum": [ + "NotStarted", + "Running", + "Failed", + "Succeeded" + ], + "x-ms-enum": { + "name": "type", + "modelAsString": true, + "values": [ + { + "value": "NotStarted", + "description": "The request has not started processing yet." + }, + { + "value": "Running", + "description": "The request has started processing." + }, + { + "value": "Failed", + "description": "The request has one or more failures." + }, + { + "value": "Succeeded", + "description": "The request has successfully completed." + } + ] + }, + "readOnly": true + }, + "created": { + "description": "The created timestamp.", + "type": "string", + "readOnly": true + }, + "resourceLocation": { + "description": "The location URI for details about the created resource. This is only provided when the request was successfully completed.", + "type": "string", + "readOnly": true + }, + "error": { + "$ref": "#/definitions/ODataError" + }, + "warning": { + "$ref": "#/definitions/ODataError" + } + } + }, + "MapDataDownloadResponse": { + "description": "The response model for the Data Download API. The response body will contain the content for the passed in `udid`.", + "type": "object" + }, + "MapDataListResponse": { + "description": "The response model for the Data List API. Returns a list of all the previously uploaded data.", + "type": "object", + "properties": { + "mapDataList": { + "description": "A list of all the previously uploaded data.", + "type": "array", + "readOnly": true, + "items": { + "$ref": "#/definitions/MapDataDetailInfo" + } + } + } + }, + "MapDataDetailInfo": { + "description": "Detail information for the data.", + "type": "object", + "properties": { + "udid": { + "description": "The unique data id for the data.", + "type": "string", + "readOnly": true + }, + "location": { + "description": "The location of the data. Execute a HTTP `GET` on this location to download the data.", + "type": "string", + "readOnly": true + }, + "sizeInBytes": { + "description": "The size of the content in bytes.", + "type": "integer", + "format": "int64", + "readOnly": true + }, + "uploadStatus": { + "description": "The current upload status of the content.", + "type": "string", + "readOnly": true + }, + "dataFormat": { + "description": "", + "type": "string", + "readOnly": true + }, + "description": { + "description": "", + "type": "string", + "readOnly": true + } + } + } + } +} diff --git a/specification/maps/data-plane/Microsoft.Maps/Data/preview/2.0/examples/Delete.json b/specification/maps/data-plane/Microsoft.Maps/Data/preview/2.0/examples/Delete.json new file mode 100644 index 000000000000..dbad7c4b3afd --- /dev/null +++ b/specification/maps/data-plane/Microsoft.Maps/Data/preview/2.0/examples/Delete.json @@ -0,0 +1,55 @@ +{ + "parameters": { + "api-version": "2.0", + "subscription-key": "[subscription-key]", + "udid": "25084fb7-307a-4720-8f91-7952a0b91012" + }, + "responses": { + "204": {}, + "400": { + "headers": {}, + "body": { + "error": { + "code": "400 BadRequest", + "message": "Bad request: one or more parameters were incorrectly specified or are mutually exclusive." + } + } + }, + "401": { + "headers": {}, + "body": { + "error": { + "code": "401 Unauthorized", + "message": "Access denied due to invalid subscription key. Make sure to provide a valid key for an active subscription." + } + } + }, + "403": { + "headers": {}, + "body": { + "error": { + "code": "403 Forbidden", + "message": "Permission, capacity, or authentication issues." + } + } + }, + "404": { + "headers": {}, + "body": { + "error": { + "code": "404 NotFound", + "message": "Not Found: the requested resource could not be found, but it may be available again in the future." + } + } + }, + "500": { + "headers": {}, + "body": { + "error": { + "code": "500 InternalServerError", + "message": "An error occurred while processing the request. Please try again later." + } + } + } + } +} diff --git a/specification/maps/data-plane/Microsoft.Maps/Data/preview/2.0/examples/Download.json b/specification/maps/data-plane/Microsoft.Maps/Data/preview/2.0/examples/Download.json new file mode 100644 index 000000000000..3a87ff2a25ce --- /dev/null +++ b/specification/maps/data-plane/Microsoft.Maps/Data/preview/2.0/examples/Download.json @@ -0,0 +1,76 @@ +{ + "parameters": { + "api-version": "2.0", + "subscription-key": "[subscription-key]", + "udid": "25084fb7-307a-4720-8f91-7952a0b91012" + }, + "responses": { + "200": { + "headers": {}, + "body": { + "type": "FeatureCollection", + "features": [ + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -122.126986, + 47.639754 + ] + }, + "properties": { + "geometryId": "001", + "radius": 500 + } + } + ] + } + }, + "400": { + "headers": {}, + "body": { + "error": { + "code": "400 BadRequest", + "message": "Bad request: one or more parameters were incorrectly specified or are mutually exclusive." + } + } + }, + "401": { + "headers": {}, + "body": { + "error": { + "code": "401 Unauthorized", + "message": "Access denied due to invalid subscription key. Make sure to provide a valid key for an active subscription." + } + } + }, + "403": { + "headers": {}, + "body": { + "error": { + "code": "403 Forbidden", + "message": "Permission, capacity, or authentication issues." + } + } + }, + "404": { + "headers": {}, + "body": { + "error": { + "code": "404 NotFound", + "message": "Not Found: the requested resource could not be found, but it may be available again in the future." + } + } + }, + "500": { + "headers": {}, + "body": { + "error": { + "code": "500 InternalServerError", + "message": "An error occurred while processing the request. Please try again later." + } + } + } + } +} diff --git a/specification/maps/data-plane/Microsoft.Maps/Data/preview/2.0/examples/GetOperation.json b/specification/maps/data-plane/Microsoft.Maps/Data/preview/2.0/examples/GetOperation.json new file mode 100644 index 000000000000..7e8fc138e4b5 --- /dev/null +++ b/specification/maps/data-plane/Microsoft.Maps/Data/preview/2.0/examples/GetOperation.json @@ -0,0 +1,29 @@ +{ + "parameters": { + "api-version": "2.0", + "subscription-key": "[subscription-key]", + "operationId": "8b1288fa-1958-4a2b-b68e-13a7i5af7d7c" + }, + "responses": { + "200": { + "body": { + "operationId": "8b1288fa-1958-4a2b-b68e-13a7i5af7d7c", + "created": "2021-04-20T22:43:14.9401559+00:00", + "status": "Succeeded", + "resourceLocation": "https://us.atlas.microsoft.com/mapData/3e36b996-f6d1-b068-0fcb-dd6b014c3447?api-version=2.0" + }, + "headers": { + "Resource-Location": "https://us.atlas.microsoft.com/mapData/3e36b996-f6d1-b068-0fcb-dd6b014c3447?api-version=2.0" + } + }, + "400": { + "headers": {}, + "body": { + "error": { + "code": "400 BadRequest", + "message": "Bad request: one or more parameters were incorrectly specified or are mutually exclusive." + } + } + } + } +} diff --git a/specification/maps/data-plane/Microsoft.Maps/Data/preview/2.0/examples/GetOperationStillRunning.json b/specification/maps/data-plane/Microsoft.Maps/Data/preview/2.0/examples/GetOperationStillRunning.json new file mode 100644 index 000000000000..0a160c590eb8 --- /dev/null +++ b/specification/maps/data-plane/Microsoft.Maps/Data/preview/2.0/examples/GetOperationStillRunning.json @@ -0,0 +1,25 @@ +{ + "parameters": { + "api-version": "2.0", + "subscription-key": "[subscription-key]", + "operationId": "8b1288fa-1958-4a2b-b68e-13a7i5af7d7c" + }, + "responses": { + "200": { + "body": { + "operationId": "8b1288fa-1958-4a2b-b68e-13a7i5af7d7c", + "created": "2021-04-23T19:14:03.2452596+00:00", + "status": "Running" + } + }, + "400": { + "headers": {}, + "body": { + "error": { + "code": "400 BadRequest", + "message": "Bad request: one or more parameters were incorrectly specified or are mutually exclusive." + } + } + } + } +} diff --git a/specification/maps/data-plane/Microsoft.Maps/Data/preview/2.0/examples/List.json b/specification/maps/data-plane/Microsoft.Maps/Data/preview/2.0/examples/List.json new file mode 100644 index 000000000000..3fdae8df7727 --- /dev/null +++ b/specification/maps/data-plane/Microsoft.Maps/Data/preview/2.0/examples/List.json @@ -0,0 +1,77 @@ +{ + "parameters": { + "api-version": "2.0", + "subscription-key": "[subscription-key]" + }, + "responses": { + "200": { + "body": { + "mapDataList": [ + { + "udid": "f6495f62-94f8-0ec2-c252-45626f82fcb2", + "location": "https://atlas.microsoft.com/mapData/f6495f62-94f8-0ec2-c252-45626f82fcb2?api-version=1.0", + "sizeInBytes": 29920, + "uploadStatus": "Completed" + }, + { + "udid": "8b1288fa-1958-4a2b-b68e-13a7i5af7d7c", + "location": "https://atlas.microsoft.com/mapData/8b1288fa-1958-4a2b-b68e-13a7i5af7d7c?api-version=1.0", + "sizeInBytes": 1339, + "uploadStatus": "Completed" + }, + { + "udid": "7c1288fa-2058-4a1b-b68f-13a6h5af7d7c", + "location": "https://atlas.microsoft.com/mapData/7c1288fa-2058-4a1b-b68f-13a6h5af7d7c?api-version=1.0", + "sizeInBytes": 1650, + "uploadStatus": "Pending" + } + ] + } + }, + "400": { + "headers": {}, + "body": { + "error": { + "code": "400 BadRequest", + "message": "Bad request: one or more parameters were incorrectly specified or are mutually exclusive." + } + } + }, + "401": { + "headers": {}, + "body": { + "error": { + "code": "401 Unauthorized", + "message": "Access denied due to invalid subscription key. Make sure to provide a valid key for an active subscription." + } + } + }, + "403": { + "headers": {}, + "body": { + "error": { + "code": "403 Forbidden", + "message": "Permission, capacity, or authentication issues." + } + } + }, + "404": { + "headers": {}, + "body": { + "error": { + "code": "404 NotFound", + "message": "Not Found: the requested resource could not be found, but it may be available again in the future." + } + } + }, + "500": { + "headers": {}, + "body": { + "error": { + "code": "500 InternalServerError", + "message": "An error occurred while processing the request. Please try again later." + } + } + } + } +} diff --git a/specification/maps/data-plane/Microsoft.Maps/Data/preview/2.0/examples/Update.json b/specification/maps/data-plane/Microsoft.Maps/Data/preview/2.0/examples/Update.json new file mode 100644 index 000000000000..3cf184fe3ab6 --- /dev/null +++ b/specification/maps/data-plane/Microsoft.Maps/Data/preview/2.0/examples/Update.json @@ -0,0 +1,88 @@ +{ + "parameters": { + "api-version": "2.0", + "subscription-key": "[subscription-key]", + "udid": "25084fb7-307a-4720-8f91-7952a0b91012", + "UpdateContent": { + "type": "FeatureCollection", + "features": [ + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -122.126986, + 47.639754 + ] + }, + "properties": { + "geometryId": "001", + "radius": 500 + } + } + ] + } + }, + "responses": { + "202": { + "headers": { + "Operation-Location": "https://atlas.microsoft.com/mapData/operations/{operationId}?api-version=1.0", + "Access-Control-Expose-Headers": "Operation-Location" + } + }, + "200": { + "headers": {}, + "body": { + "error": { + "code": "400 Bad Request", + "message": "Upload request failed. Your data has been removed as we encountered the following problems with it: Map data is not a valid GeoJSON geometry." + } + } + }, + "400": { + "headers": {}, + "body": { + "error": { + "code": "400 BadRequest", + "message": "Bad request: one or more parameters were incorrectly specified or are mutually exclusive." + } + } + }, + "401": { + "headers": {}, + "body": { + "error": { + "code": "401 Unauthorized", + "message": "Access denied due to invalid subscription key. Make sure to provide a valid key for an active subscription." + } + } + }, + "403": { + "headers": {}, + "body": { + "error": { + "code": "403 Forbidden", + "message": "Permission, capacity, or authentication issues." + } + } + }, + "404": { + "headers": {}, + "body": { + "error": { + "code": "404 NotFound", + "message": "Not Found: the requested resource could not be found, but it may be available again in the future." + } + } + }, + "500": { + "headers": {}, + "body": { + "error": { + "code": "500 InternalServerError", + "message": "An error occurred while processing the request. Please try again later." + } + } + } + } +} diff --git a/specification/maps/data-plane/Microsoft.Maps/Data/preview/2.0/examples/Upload.json b/specification/maps/data-plane/Microsoft.Maps/Data/preview/2.0/examples/Upload.json new file mode 100644 index 000000000000..6346fad6b59c --- /dev/null +++ b/specification/maps/data-plane/Microsoft.Maps/Data/preview/2.0/examples/Upload.json @@ -0,0 +1,88 @@ +{ + "parameters": { + "api-version": "2.0", + "subscription-key": "[subscription-key]", + "dataFormat": "geojson", + "UploadContent": { + "type": "FeatureCollection", + "features": [ + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -122.126986, + 47.639754 + ] + }, + "properties": { + "geometryId": "001", + "radius": 500 + } + } + ] + } + }, + "responses": { + "202": { + "headers": { + "Operation-Location": "https://atlas.microsoft.com/mapData/metadata/{udid}?api-version=1.0", + "Access-Control-Expose-Headers": "Operation-Location" + } + }, + "200": { + "headers": {}, + "body": { + "error": { + "code": "400 Bad Request", + "message": "Upload request failed. Your data has been removed as we encountered the following problems with it: Map data is not a valid GeoJSON geometry." + } + } + }, + "400": { + "headers": {}, + "body": { + "error": { + "code": "400 BadRequest", + "message": "Bad request: one or more parameters were incorrectly specified or are mutually exclusive." + } + } + }, + "401": { + "headers": {}, + "body": { + "error": { + "code": "401 Unauthorized", + "message": "Access denied due to invalid subscription key. Make sure to provide a valid key for an active subscription." + } + } + }, + "403": { + "headers": {}, + "body": { + "error": { + "code": "403 Forbidden", + "message": "Permission, capacity, or authentication issues." + } + } + }, + "404": { + "headers": {}, + "body": { + "error": { + "code": "404 NotFound", + "message": "Not Found: the requested resource could not be found, but it may be available again in the future." + } + } + }, + "500": { + "headers": {}, + "body": { + "error": { + "code": "500 InternalServerError", + "message": "An error occurred while processing the request. Please try again later." + } + } + } + } +} diff --git a/specification/maps/data-plane/Microsoft.Maps/Dataset/preview/2.0/dataset.json b/specification/maps/data-plane/Microsoft.Maps/Dataset/preview/2.0/dataset.json new file mode 100644 index 000000000000..cdad35c58577 --- /dev/null +++ b/specification/maps/data-plane/Microsoft.Maps/Dataset/preview/2.0/dataset.json @@ -0,0 +1,541 @@ +{ + "swagger": "2.0", + "info": { + "title": "Azure Maps Dataset Service", + "version": "2.0", + "description": "APIs for managing datasets from uploaded data in Azure Maps." + }, + "host": "atlas.microsoft.com", + "schemes": [ + "https" + ], + "consumes": [], + "produces": [ + "application/json", + "application/xml" + ], + "securityDefinitions": { + "azure_auth": { + "type": "oauth2", + "authorizationUrl": "https://login.microsoftonline.com/common/oauth2/authorize", + "flow": "implicit", + "description": "These are the [Azure Active Directory OAuth2](https://docs.microsoft.com/en-us/azure/active-directory/develop/v1-overview) Flows. When paired with [Azure Role Based Access](https://docs.microsoft.com/en-us/azure/role-based-access-control/overview) control it can be used to control access to Azure Maps REST APIs. Azure Role based access controls are used to designate access to one or more Azure Maps resource account or sub-resources. Any user, group, or service principal can be granted access via a built in role or a custom role composed of one or more permissions to Azure Maps REST APIs.\n\nTo implement scenarios we recommend viewing [authentication concepts](https://aka.ms/amauth). In summary, this security definition provides a solution for modeling application(s) via objects capable of access control on specific APIs and scopes.\n\n#### Note\n* This security definition **requires** the use of the `x-ms-client-id` header to indicate which Azure Maps resource the application is requesting access to. This can be acquired from the [Maps management API](https://aka.ms/amauthdetails).\n* The `Authorization URL` is specific to the Azure public cloud instance. Sovereign clouds have unique Authorization URLs and Azure Active directory configurations. \n* The Azure role based access control is configured from the [Azure management plane](https://aka.ms/amrbac) via Azure portal, Powershell, CLI, Azure SDKs, or REST APIs.\n* Usage of the [Azure Maps Web SDK](https://aka.ms/amaadmc) allows for configuration based setup of an application for multiple use cases.\n* Currently Azure Active Directory [v1.0](https://docs.microsoft.com/en-us/azure/active-directory/develop/azure-ad-endpoint-comparison) tokens are supported.", + "scopes": { + "user_impersonation": "Impersonates a user's Azure Active Directory account." + } + }, + "apiKeyQuery": { + "type": "apiKey", + "description": "This is a shared key which is provisioned when creating an [Azure Maps resource](https://aka.ms/amauth) through the Azure management plane via Azure portal, Powershell, CLI, Azure SDKs, or REST APIs. With this key, any application is authorized to access all REST APIs. In other words, these can currently be treated as master keys to the account which they are issued for. For publicly exposed applications our recommendation is to use server to server access of Azure Maps REST APIs where this key can be securely stored.", + "name": "subscription-key", + "in": "query" + } + }, + "security": [ + { + "azure_auth": [] + }, + { + "apiKeyQuery": [] + } + ], + "responses": { + "400": { + "description": "Bad request: one or more parameters were incorrectly specified or are mutually exclusive.", + "schema": { + "$ref": "#/definitions/ODataErrorResponse" + } + }, + "401": { + "description": "Access denied due to invalid subscription key or invalid Azure Active Directory bearer token. Make sure to provide a valid key for an active Azure subscription and Maps resource. Otherwise, verify the [WWW-Authenticate](https://tools.ietf.org/html/rfc6750#section-3.1) header for error code and description of the provided AAD bearer token.", + "schema": { + "$ref": "#/definitions/ODataErrorResponse" + }, + "headers": { + "WWW-Authenticate": { + "type": "string", + "description": "Bearer realm=\"https://atlas.microsoft.com/\", error=\"invalid_token\", error_description=\"The access token expired\"" + } + } + }, + "403": { + "description": "Permission, capacity, or authentication issues.", + "schema": { + "$ref": "#/definitions/ODataErrorResponse" + } + }, + "404": { + "description": "Not Found: the requested resource could not be found, but it may be available again in the future.", + "schema": { + "$ref": "#/definitions/ODataErrorResponse" + } + }, + "500": { + "description": "An error occurred while processing the request. Please try again later.", + "schema": { + "$ref": "#/definitions/ODataErrorResponse" + } + }, + "200Async": { + "description": "The operation is running or complete. If the operation was successful, use the Resource-Location header to obtain the path to the result.", + "schema": { + "$ref": "#/definitions/LongRunningOperationResult" + }, + "headers": { + "Resource-Location": { + "type": "string", + "description": "If successful, a URI where details on the newly created resource can be found." + } + } + }, + "202Accepted": { + "description": "Request Accepted: The request has been accepted for processing. Please use the URL in the Operation-Location Header to obtain status.", + "headers": { + "Operation-Location": { + "type": "string", + "description": "New URL to check for the results of the long running process." + } + } + } + }, + "parameters": { + "SubscriptionKey": { + "name": "subscription-key", + "description": "One of the Azure Maps keys provided from an Azure Map Account. Please refer to this [article](https://docs.microsoft.com/azure/azure-maps/how-to-manage-authentication) for details on how to manage authentication.", + "type": "string", + "in": "query", + "required": false, + "x-ms-parameter-location": "client" + }, + "ApiVersion": { + "name": "api-version", + "description": "Version number of Azure Maps API. Current version is 2.0", + "type": "string", + "in": "query", + "required": true, + "default": "2.0", + "x-ms-parameter-location": "client" + }, + "ConversionIdQuery": { + "name": "conversionId", + "description": "The unique ID used to create the dataset. The `conversionId` must have been obtained from a successful call to the Conversion Service Convert API and may be provided with multiple query parameters with same name (if more than one is provided).", + "type": "string", + "in": "query", + "required": true, + "x-ms-parameter-location": "method" + }, + "DescriptionDataset": { + "name": "description", + "description": "The description to be given to the dataset.", + "type": "string", + "in": "query", + "required": false, + "x-ms-parameter-location": "method" + }, + "DatasetId": { + "name": "datasetId", + "type": "string", + "in": "path", + "description": "The identifier for the dataset to query from.", + "required": true, + "x-ms-parameter-location": "method" + }, + "AppendDatasetId": { + "name": "datasetId", + "type": "string", + "in": "query", + "description": "The ID for the dataset to append with. The dataset must originate from a conversion ontology that matches conversionId", + "required": false, + "x-ms-parameter-location": "method" + }, + "DatasetOperationId": { + "name": "operationId", + "type": "string", + "in": "path", + "description": "The ID to query the status for the dataset create/import request.", + "required": true, + "x-ms-parameter-location": "method" + } + }, + "paths": { + "/datasets": { + "post": { + "x-publish": true, + "description": "## Dataset Create API\n\n### Applies to: S1 pricing tier.\n\nCreator makes it possible to develop applications based on your private indoor map data using Azure Maps API and SDK. The Dataset APIs are part of Creator. This API allows the caller to create a dataset from data that was uploaded to the Azure Maps Data Service and converted using the Azure Maps Conversion Service.\n\nYou can use this API in a scenario like uploading a DWG zip package for a building, converting the zip package using the Azure Maps Conversion Service, and creating a dataset from the converted zip package. The created dataset can be used to create tilesets using the Azure Maps Tileset Service and can be queried via the Azure Maps WFS Service.\n\n### Submit Create Request\n\nTo create your dataset, you will use a `POST` request where the `conversionId` query parameter is an ID that represents the converted DWG zip package, the `datasetId` parameter will be the ID of a previously created dataset to append with the current dataset and, optionally, the `description` query parameter will contain a description (if description is not provided a default description will be given).\n\nThe Create API is a [long-running request](https://aka.ms/am-creator-lrt).", + "operationId": "Dataset_Create", + "x-ms-examples": { + "Create dataset from a converted CAD file provided by conversionId": { + "$ref": "./examples/Dataset_Create.json" + } + }, + "parameters": [ + { + "$ref": "#/parameters/SubscriptionKey" + }, + { + "$ref": "#/parameters/ApiVersion" + }, + { + "$ref": "#/parameters/ConversionIdQuery" + }, + { + "$ref": "#/parameters/AppendDatasetId" + }, + { + "$ref": "#/parameters/DescriptionDataset" + } + ], + "responses": { + "202": { + "$ref": "#/responses/202Accepted" + }, + "400": { + "$ref": "#/responses/400" + }, + "401": { + "$ref": "#/responses/401" + }, + "403": { + "$ref": "#/responses/403" + }, + "404": { + "$ref": "#/responses/404" + }, + "500": { + "$ref": "#/responses/500" + } + } + }, + "get": { + "x-publish": true, + "description": "## Dataset List API\n\n### Applies to: S1 pricing tier.\n\nCreator makes it possible to develop applications based on your private indoor map data using Azure Maps API and SDK. The Dataset APIs are part of Creator.\n\nThis API allows the caller to fetch a list of all previously successfully created datasets.\n\n### Submit List Request\n\nTo list all your datasets, you will issue a `GET` request with no additional parameters.\n\n\n### List Data Response\n\nThe List API returns the complete list of all datasets in `json` format. The response contains the following fields (if they are not null or empty):\n> created - The timestamp the dataset was created.\n> datasetId - The id for the dataset.\n> description - The description for the dataset.\n> datasetSources - The source data that was used when the create request was issued.\n> ontology - The source ontology that was used in the conversion service for the input data.
\n\nThe `datasetSources` describes the source data that was used when the create request was issued and contains the following elements (if they are not null or empty):\n\n> conversionIds - The list of `conversionId` (null if none were provided).\n> appendDatasetId - The `datasetId` that was used for an append operation (null if none was used).\n>featureCounts - The counts for each feature type in the dataset.
\n\nHere's a sample response returning the `timestamp`, `datasetId`, `description`, `datasetSources`, and `ontology` of 3 dataset resources:\n\n\n```json\n{\n \"datasets\": [\n {\n \"timestamp\": \"2020-01-01T22:50:48.123Z\",\n \"datasetId\": \"f6495f62-94f8-0ec2-c252-45626f82fcb2\",\n \"description\": \"Some description or comment for the dataset.\",\n \"datasetSources\": {\n \"conversionIds\": [\n \"15d21452-c9bb-27b6-5e79-743ca5c3205d\"\n ], },\n \"ontology\": \"facility-2.0\",\n \"featureCounts\": {\n \"directoryInfo\": 2,\n \"category\": 10,\n \"facility\": 1,\n \"level\": 3,\n \"unit\": 183,\n \"zone\": 3,\n \"verticalPenetration\": 6,\n \"opening\": 48,\n \"areaElement\": 108\n }\n },\n {\n \"timestamp\": \"2020-01-01T22:57:53.123Z\",\n \"datasetId\": \"8b1288fa-1958-4a2b-b68e-13a7i5af7d7c\",\n \"description\": \"Create from upload '0c1288fa-2058-4a1b-b68d-13a5f5af7d7c'.\",\n \"datasetSources\": {\n \"conversionIds\": [\n \"0c1288fa-2058-4a1b-b68d-13a5f5af7d7c\"\n ],\n \"appendDatasetId\": \"46d1edb6-d29e-4786-9589-dbd4efd7a977\"\n },\n \"ontology\": \"facility-2.0\",\n \"featureCounts\": {\n \"directoryInfo\": 2,\n \"category\": 10,\n \"facility\": 1,\n \"level\": 3,\n \"unit\": 183,\n \"zone\": 3,\n \"verticalPenetration\": 6,\n \"opening\": 48,\n \"areaElement\": 108\n }\n }\n ]\n}\n```", + "operationId": "Dataset_List", + "x-ms-examples": { + "List all the previously created datasets": { + "$ref": "./examples/Dataset_List.json" + } + }, + "parameters": [ + { + "$ref": "#/parameters/SubscriptionKey" + }, + { + "$ref": "#/parameters/ApiVersion" + } + ], + "responses": { + "200": { + "description": "The dataset request completed successfully. The response body contains the previously created dataset.", + "schema": { + "$ref": "#/definitions/DatasetListResponse" + } + }, + "400": { + "$ref": "#/responses/400" + }, + "401": { + "$ref": "#/responses/401" + }, + "403": { + "$ref": "#/responses/403" + }, + "404": { + "$ref": "#/responses/404" + }, + "500": { + "$ref": "#/responses/500" + } + } + } + }, + "/datasets/{datasetId}": { + "get": { + "x-publish": true, + "description": "## Dataset Get Details API\n\n### Applies to: S1 pricing tier.\n\nCreator makes it possible to develop applications based on your private indoor map data using Azure Maps API and SDK. The Dataset APIs are part of Creator.\n\nThis API allows the caller to fetch a previously successfully created dataset.\n\n### Submit Get Details Request\n\nTo get the details for a previously created dataset, you will issue a `GET` request with the `datasetId` in the path.\n\n### Get Details Response\n\nThe Get Details API returns the details for a dataset in `json` format. The response contains the following fields (if they are not null or empty):\n> created - The timestamp the dataset was created.\n> datasetId - The id for the dataset.\n> description - The description for the dataset.\n> datasetSources - The source data that was used when the create request was issued.\n> ontology - The source ontology that was used in the conversion service for the input data.
\n\nThe `datasetSources` describes the source data that was used when the create request was issued and contains the following elements (if they are not null or empty):\n> conversionIds - The list of `conversionId` (null if none were provided).\n> appendDatasetId - The `datasetId` that was used for an append operation (null if none was used).\n>featureCounts - The counts for each feature type in the dataset.
\n\nHere's a sample response returning the `timestamp`, `datasetId`, `description`, `datasetSources`, and `ontology` of a dataset resource:\n\n```json\n{\n \"timestamp\": \"2020-01-01T22:50:48.123Z\",\n \"datasetId\": \"f6495f62-94f8-0ec2-c252-45626f82fcb2\",\n \"description\": \"Some description or comment for the dataset.\",\n \"datasetSources\": {\n \"conversionIds\": [\n \"15d21452-c9bb-27b6-5e79-743ca5c3205d\"\n ],\n },\n \"ontology\": \"facility-2.0\",\n \"featureCounts\": {\n \"directoryInfo\": 2,\n \"category\": 10,\n \"facility\": 1,\n \"level\": 3,\n \"unit\": 183,\n \"zone\": 3,\n \"verticalPenetration\": 6,\n \"opening\": 48,\n \"areaElement\": 108\n }\n }\n```", + "operationId": "Dataset_Get", + "x-ms-examples": { + "Get details for a previously created dataset": { + "$ref": "./examples/Dataset_GetDetails.json" + } + }, + "parameters": [ + { + "$ref": "#/parameters/DatasetId" + }, + { + "$ref": "#/parameters/SubscriptionKey" + }, + { + "$ref": "#/parameters/ApiVersion" + } + ], + "responses": { + "200": { + "description": "The get dataset request completed successfully.", + "schema": { + "$ref": "#/definitions/DatasetDetailInfo" + } + }, + "400": { + "$ref": "#/responses/400" + }, + "401": { + "$ref": "#/responses/401" + }, + "403": { + "$ref": "#/responses/403" + }, + "404": { + "$ref": "#/responses/404" + }, + "500": { + "$ref": "#/responses/500" + } + } + }, + "delete": { + "x-publish": true, + "description": "## Dataset Delete API\n\n### Applies to:S1 pricing tier.\n\nCreator makes it possible to develop applications based on your private indoor map data using Azure Maps API and SDK. The Dataset APIs are part of Creator. This API allows the caller to delete a previously created dataset.\n\nYou can also use this API to delete old/unused datasets to create space for new Creator content.\n\n### Submit Delete Request\n\nTo delete your content you will issue a `DELETE` request where the path will contain the `datasetId` of the dataset to delete.", + "operationId": "Dataset_Delete", + "x-ms-examples": { + "Delete previously created dataset": { + "$ref": "./examples/Dataset_Delete.json" + } + }, + "parameters": [ + { + "$ref": "#/parameters/SubscriptionKey" + }, + { + "$ref": "#/parameters/ApiVersion" + }, + { + "$ref": "#/parameters/DatasetId" + } + ], + "responses": { + "204": { + "description": "The dataset delete request completed successfully. The resource referenced by the `datasetId` was deleted from the server." + }, + "400": { + "$ref": "#/responses/400" + }, + "401": { + "$ref": "#/responses/401" + }, + "403": { + "$ref": "#/responses/403" + }, + "404": { + "$ref": "#/responses/404" + }, + "500": { + "$ref": "#/responses/500" + } + } + } + }, + "/datasets/operations/{operationId}": { + "get": { + "description": "## Dataset Operations API\n\n### Applies to: S1 pricing tier\n\nCreator makes it possible to develop applications based on your private indoor map data using Azure Maps API and SDK. The Dataset APIs are part of Creator. This API allows the caller to view the current progress of a dataset operation and the path is obtained from a call to the Create API.\n\n### Submit Operations Request\n\nTo view the current progress of a dataset operation, you will use a `GET` request where the `operationId` given the path is the ID that represents the operation.\n\n### Operation Response\n\nWhile in progress, a `200-OK` http status code will be returned with no extra headers. If the operation succeeds, a `200-OK` http status code with Resource-Location header will be returned.", + "operationId": "Dataset_GetOperation", + "x-ms-examples": { + "Get the status of an operation which is still running": { + "$ref": "./examples/GetOperationStillRunning.json" + }, + "Get the status of an operation which has finished successfully": { + "$ref": "./examples/GetOperation.json" + } + }, + "parameters": [ + { + "$ref": "#/parameters/SubscriptionKey" + }, + { + "$ref": "#/parameters/ApiVersion" + }, + { + "$ref": "#/parameters/DatasetOperationId" + } + ], + "responses": { + "200": { + "$ref": "#/responses/200Async" + }, + "400": { + "$ref": "#/responses/400" + } + } + } + } + }, + "definitions": { + "ODataErrorResponse": { + "type": "object", + "description": "This response object is returned when an error occurs in the Maps API.", + "properties": { + "error": { + "$ref": "#/definitions/ODataError" + } + } + }, + "ODataError": { + "type": "object", + "description": "This object is returned when an error occurs in the Maps API.", + "properties": { + "code": { + "type": "string", + "readOnly": true, + "description": "The ODataError code." + }, + "message": { + "type": "string", + "readOnly": true, + "description": "If available, a human readable description of the error." + }, + "details": { + "type": "array", + "items": { + "$ref": "#/definitions/ODataError" + } + }, + "target": { + "type": "string", + "readOnly": true, + "description": "If available, the target causing the error." + } + } + }, + "LongRunningOperationResult": { + "description": "The response model for a Long-Running Operations API.", + "type": "object", + "properties": { + "operationId": { + "description": "The Id for this long-running operation.", + "type": "string" + }, + "status": { + "description": "The status state of the request.", + "type": "string", + "enum": [ + "NotStarted", + "Running", + "Failed", + "Succeeded" + ], + "x-ms-enum": { + "name": "type", + "modelAsString": true, + "values": [ + { + "value": "NotStarted", + "description": "The request has not started processing yet." + }, + { + "value": "Running", + "description": "The request has started processing." + }, + { + "value": "Failed", + "description": "The request has one or more failures." + }, + { + "value": "Succeeded", + "description": "The request has successfully completed." + } + ] + }, + "readOnly": true + }, + "created": { + "description": "The created timestamp.", + "type": "string", + "readOnly": true + }, + "resourceLocation": { + "description": "The location URI for details about the created resource. This is only provided when the request was successfully completed.", + "type": "string", + "readOnly": true + }, + "error": { + "$ref": "#/definitions/ODataError" + }, + "warning": { + "$ref": "#/definitions/ODataError" + } + } + }, + "DatasetListResponse": { + "description": "The response model for the Dataset List API. The response body will contain a list of all the previously created datasets.", + "type": "object", + "properties": { + "datasets": { + "description": "A list of all the previously created datasets.", + "type": "array", + "readOnly": true, + "items": { + "$ref": "#/definitions/DatasetDetailInfo" + } + }, + "nextLink": { + "description": "If present, the location of the next page of data.", + "type": "string", + "readOnly": true + } + } + }, + "DatasetDetailInfo": { + "description": "Detail information for the dataset.", + "type": "object", + "properties": { + "created": { + "description": "The created timestamp for the dataset.", + "type": "string", + "readOnly": true + }, + "datasetId": { + "description": "The id for the dataset.", + "type": "string", + "readOnly": true + }, + "ontology": { + "description": "", + "type": "string", + "readOnly": true + }, + "description": { + "description": "The description for the dataset.", + "type": "string", + "readOnly": true + }, + "datasetSources": { + "$ref": "#/definitions/DatasetSources" + }, + "featureCounts": { + "description": "The feature counts for the dataset.", + "type": "object", + "readOnly": true + } + } + }, + "DatasetSources": { + "description": "Information about the details of the create request for the dataset.", + "type": "object", + "properties": { + "conversionIds": { + "description": "The list of `conversionId` that were used to create the dataset.", + "type": "array", + "readOnly": true, + "items": { + "type": "string" + } + }, + "appendDatasetId": { + "description": "The dataset that was appended to to create the current dataset.", + "type": "string", + "readOnly": true + } + } + } + } +} diff --git a/specification/maps/data-plane/Microsoft.Maps/Dataset/preview/2.0/examples/Dataset_Create.json b/specification/maps/data-plane/Microsoft.Maps/Dataset/preview/2.0/examples/Dataset_Create.json new file mode 100644 index 000000000000..eeb5e5d59bc4 --- /dev/null +++ b/specification/maps/data-plane/Microsoft.Maps/Dataset/preview/2.0/examples/Dataset_Create.json @@ -0,0 +1,60 @@ +{ + "parameters": { + "api-version": "2.0", + "subscription-key": "[subscription-key]", + "conversionId": "[conversionId]" + }, + "responses": { + "202": { + "headers": { + "Operation-Location": "https://atlas.microsoft.com/dataset/operations/{operationId}?api-version=1.0", + "Access-Control-Expose-Headers": "Operation-Location" + } + }, + "400": { + "headers": {}, + "body": { + "error": { + "code": "400 BadRequest", + "message": "Bad request - Error message." + } + } + }, + "401": { + "headers": {}, + "body": { + "error": { + "code": "401 Unauthorized", + "message": "Access denied due to invalid subscription key. Make sure to provide a valid key for an active subscription." + } + } + }, + "403": { + "headers": {}, + "body": { + "error": { + "code": "403 Forbidden", + "message": "Permission, capacity, or authentication issues." + } + } + }, + "404": { + "headers": {}, + "body": { + "error": { + "code": "404 NotFound", + "message": "Not Found - The requested resource could not be found, but it may be available again in the future." + } + } + }, + "500": { + "headers": {}, + "body": { + "error": { + "code": "500 InternalServerError", + "message": "Unknown error - An error occurred while processing the request. Please try again later." + } + } + } + } +} diff --git a/specification/maps/data-plane/Microsoft.Maps/Dataset/preview/2.0/examples/Dataset_Delete.json b/specification/maps/data-plane/Microsoft.Maps/Dataset/preview/2.0/examples/Dataset_Delete.json new file mode 100644 index 000000000000..1d9549b628ef --- /dev/null +++ b/specification/maps/data-plane/Microsoft.Maps/Dataset/preview/2.0/examples/Dataset_Delete.json @@ -0,0 +1,55 @@ +{ + "parameters": { + "api-version": "2.0", + "subscription-key": "[subscription-key]", + "datasetId": "[datasetId]" + }, + "responses": { + "204": {}, + "400": { + "headers": {}, + "body": { + "error": { + "code": "400 BadRequest", + "message": "Bad request - One or more parameters were incorrectly specified or are mutually exclusive." + } + } + }, + "401": { + "headers": {}, + "body": { + "error": { + "code": "401 Unauthorized", + "message": "Access denied due to invalid subscription key. Make sure to provide a valid key for an active subscription." + } + } + }, + "403": { + "headers": {}, + "body": { + "error": { + "code": "403 Forbidden", + "message": "Permission, capacity, or authentication issues." + } + } + }, + "404": { + "headers": {}, + "body": { + "error": { + "code": "404 NotFound", + "message": "Not Found - The requested resource could not be found, but it may be available again in the future." + } + } + }, + "500": { + "headers": {}, + "body": { + "error": { + "code": "500 InternalServerError", + "message": "Unknown error - An error occurred while processing the request. Please try again later." + } + } + } + } +} diff --git a/specification/maps/data-plane/Microsoft.Maps/Dataset/preview/2.0/examples/Dataset_GetDetails.json b/specification/maps/data-plane/Microsoft.Maps/Dataset/preview/2.0/examples/Dataset_GetDetails.json new file mode 100644 index 000000000000..e6805c6e88d1 --- /dev/null +++ b/specification/maps/data-plane/Microsoft.Maps/Dataset/preview/2.0/examples/Dataset_GetDetails.json @@ -0,0 +1,84 @@ +{ + "parameters": { + "api-version": "2.0", + "subscription-key": "[subscription-key]", + "datasetId": "[datasetId]" + }, + "responses": { + "200": { + "headers": { + "Location": "https://atlas.microsoft.com/dataset/{datasetId}?api-version=1.0", + "Access-Control-Expose-Headers": "Resource-Location" + }, + "body": { + "created": "2021-05-21T01:02:03.456Z", + "datasetId": "[datasetId]", + "description": "Some description or comment about the dataset", + "datasetSources": { + "conversionIds": [ + "15d21452-c9bb-27b6-5e79-743ca5c3205d", + "c39de51c-b4f5-4733-aeeb-d8cb6f8b2f1d" + ], + "appendDatasetId": "6a49a490-1d9c-4f05-bf1e-51998fbc4733" + }, + "featureCounts": { + "directoryInfo": 2, + "category": 10, + "facility": 1, + "level": 3, + "unit": 183, + "zone": 3, + "verticalPenetration": 6, + "opening": 48, + "areaElement": 108 + }, + "ontology": "facility-2.0" + } + }, + "400": { + "headers": {}, + "body": { + "error": { + "code": "400 BadRequest", + "message": "Bad request - Error message." + } + } + }, + "401": { + "headers": {}, + "body": { + "error": { + "code": "401 Unauthorized", + "message": "Access denied due to invalid subscription key. Make sure to provide a valid key for an active subscription." + } + } + }, + "403": { + "headers": {}, + "body": { + "error": { + "code": "403 Forbidden", + "message": "Permission, capacity, or authentication issues." + } + } + }, + "404": { + "headers": {}, + "body": { + "error": { + "code": "404 NotFound", + "message": "Not Found - The requested resource could not be found, but it may be available again in the future." + } + } + }, + "500": { + "headers": {}, + "body": { + "error": { + "code": "500 InternalServerError", + "message": "Unknown error - An error occurred while processing the request. Please try again later." + } + } + } + } +} diff --git a/specification/maps/data-plane/Microsoft.Maps/Dataset/preview/2.0/examples/Dataset_List.json b/specification/maps/data-plane/Microsoft.Maps/Dataset/preview/2.0/examples/Dataset_List.json new file mode 100644 index 000000000000..a0206f1bba72 --- /dev/null +++ b/specification/maps/data-plane/Microsoft.Maps/Dataset/preview/2.0/examples/Dataset_List.json @@ -0,0 +1,102 @@ +{ + "parameters": { + "api-version": "2.0", + "subscription-key": "[subscription-key]" + }, + "responses": { + "200": { + "body": { + "datasets": [ + { + "created": "2021-05-21T03:04:05.678Z", + "datasetId": "f6495f62-94f8-0ec2-c252-45626f82fcb2", + "description": "Some description or comment for the dataset.", + "datasetSources": { + "conversionIds": [ + "db63843c-3c70-4b4e-94ff-dfcf4013c4a9" + ] + }, + "featureCounts": { + "directoryInfo": 1, + "category": 18, + "facility": 1, + "level": 6, + "unit": 775, + "opening": 471, + "areaElement": 496 + }, + "ontology": "facility-2.0" + }, + { + "created": "2021-05-21T03:04:05.678Z", + "datasetId": "7c1288fa-2058-4a1b-b68f-13a6h5af7d7c", + "description": "Some other description or comment for the dataset.", + "datasetSources": { + "conversionIds": [ + "15d21452-c9bb-27b6-5e79-743ca5c3205d" + ], + "appendDatasetId": "8b1288fa-1958-4a2b-b68e-13a7i5af7d7c" + }, + "featureCounts": { + "directoryInfo": 2, + "category": 10, + "facility": 1, + "level": 3, + "unit": 183, + "zone": 3, + "verticalPenetration": 6, + "opening": 48, + "areaElement": 108 + }, + "ontology": "facility-2.0" + } + ] + } + }, + "400": { + "headers": {}, + "body": { + "error": { + "code": "400 BadRequest", + "message": "Bad request - One or more parameters were incorrectly specified or are mutually exclusive." + } + } + }, + "401": { + "headers": {}, + "body": { + "error": { + "code": "401 Unauthorized", + "message": "Access denied due to invalid subscription key. Make sure to provide a valid key for an active subscription." + } + } + }, + "403": { + "headers": {}, + "body": { + "error": { + "code": "403 Forbidden", + "message": "Permission, capacity, or authentication issues." + } + } + }, + "404": { + "headers": {}, + "body": { + "error": { + "code": "404 NotFound", + "message": "Not Found - The requested resource could not be found, but it may be available again in the future." + } + } + }, + "500": { + "headers": {}, + "body": { + "error": { + "code": "500 InternalServerError", + "message": "Unknown error - An error occurred while processing the request. Please try again later." + } + } + } + } +} diff --git a/specification/maps/data-plane/Microsoft.Maps/Dataset/preview/2.0/examples/GetOperation.json b/specification/maps/data-plane/Microsoft.Maps/Dataset/preview/2.0/examples/GetOperation.json new file mode 100644 index 000000000000..72d36d856052 --- /dev/null +++ b/specification/maps/data-plane/Microsoft.Maps/Dataset/preview/2.0/examples/GetOperation.json @@ -0,0 +1,29 @@ +{ + "parameters": { + "api-version": "2.0", + "subscription-key": "[subscription-key]", + "operationId": "8b1288fa-1958-4a2b-b68e-13a7i5af7d7c" + }, + "responses": { + "200": { + "body": { + "operationId": "8b1288fa-1958-4a2b-b68e-13a7i5af7d7c", + "created": "2021-04-20T22:43:14.9401559+00:00", + "status": "Succeeded", + "resourceLocation": "https://us.atlas.microsoft.com/datasets/3e36b996-f6d1-b068-0fcb-dd6b014c3447?api-version=2.0" + }, + "headers": { + "Resource-Location": "https://us.atlas.microsoft.com/datasets/3e36b996-f6d1-b068-0fcb-dd6b014c3447?api-version=2.0" + } + }, + "400": { + "headers": {}, + "body": { + "error": { + "code": "400 BadRequest", + "message": "Bad request: one or more parameters were incorrectly specified or are mutually exclusive." + } + } + } + } +} diff --git a/specification/maps/data-plane/Microsoft.Maps/Dataset/preview/2.0/examples/GetOperationStillRunning.json b/specification/maps/data-plane/Microsoft.Maps/Dataset/preview/2.0/examples/GetOperationStillRunning.json new file mode 100644 index 000000000000..0a160c590eb8 --- /dev/null +++ b/specification/maps/data-plane/Microsoft.Maps/Dataset/preview/2.0/examples/GetOperationStillRunning.json @@ -0,0 +1,25 @@ +{ + "parameters": { + "api-version": "2.0", + "subscription-key": "[subscription-key]", + "operationId": "8b1288fa-1958-4a2b-b68e-13a7i5af7d7c" + }, + "responses": { + "200": { + "body": { + "operationId": "8b1288fa-1958-4a2b-b68e-13a7i5af7d7c", + "created": "2021-04-23T19:14:03.2452596+00:00", + "status": "Running" + } + }, + "400": { + "headers": {}, + "body": { + "error": { + "code": "400 BadRequest", + "message": "Bad request: one or more parameters were incorrectly specified or are mutually exclusive." + } + } + } + } +} diff --git a/specification/maps/data-plane/Microsoft.Maps/DwgConversion/preview/2.0/dwgconversion.json b/specification/maps/data-plane/Microsoft.Maps/DwgConversion/preview/2.0/dwgconversion.json new file mode 100644 index 000000000000..83ccd4f709d4 --- /dev/null +++ b/specification/maps/data-plane/Microsoft.Maps/DwgConversion/preview/2.0/dwgconversion.json @@ -0,0 +1,543 @@ +{ + "swagger": "2.0", + "info": { + "title": "Azure Maps Conversion Service", + "version": "2.0", + "description": "APIs for converting DWG Packages in Azure Maps." + }, + "host": "atlas.microsoft.com", + "schemes": [ + "https" + ], + "consumes": [], + "produces": [ + "application/json" + ], + "securityDefinitions": { + "azure_auth": { + "type": "oauth2", + "authorizationUrl": "https://login.microsoftonline.com/common/oauth2/authorize", + "flow": "implicit", + "description": "These are the [Azure Active Directory OAuth2](https://docs.microsoft.com/en-us/azure/active-directory/develop/v1-overview) Flows. When paired with [Azure Role Based Access](https://docs.microsoft.com/en-us/azure/role-based-access-control/overview) control it can be used to control access to Azure Maps REST APIs. Azure Role based access controls are used to designate access to one or more Azure Maps resource account or sub-resources. Any user, group, or service principal can be granted access via a built in role or a custom role composed of one or more permissions to Azure Maps REST APIs.\n\nTo implement scenarios we recommend viewing [authentication concepts](https://aka.ms/amauth). In summary, this security definition provides a solution for modeling application(s) via objects capable of access control on specific APIs and scopes.\n\n#### Note\n* This security definition **requires** the use of the `x-ms-client-id` header to indicate which Azure Maps resource the application is requesting access to. This can be acquired from the [Maps management API](https://aka.ms/amauthdetails).\n* The `Authorization URL` is specific to the Azure public cloud instance. Sovereign clouds have unique Authorization URLs and Azure Active directory configurations. \n* The Azure role based access control is configured from the [Azure management plane](https://aka.ms/amrbac) via Azure portal, Powershell, CLI, Azure SDKs, or REST APIs.\n* Usage of the [Azure Maps Web SDK](https://aka.ms/amaadmc) allows for configuration based setup of an application for multiple use cases.\n* Currently Azure Active Directory [v1.0](https://docs.microsoft.com/en-us/azure/active-directory/develop/azure-ad-endpoint-comparison) tokens are supported.", + "scopes": { + "user_impersonation": "Impersonates a user's Azure Active Directory account." + } + }, + "apiKeyQuery": { + "type": "apiKey", + "description": "This is a shared key which is provisioned when creating an [Azure Maps resource](https://aka.ms/amauth) through the Azure management plane via Azure portal, Powershell, CLI, Azure SDKs, or REST APIs. With this key, any application is authorized to access all REST APIs. In other words, these can currently be treated as master keys to the account which they are issued for. For publicly exposed applications our recommendation is to use server to server access of Azure Maps REST APIs where this key can be securely stored.", + "name": "subscription-key", + "in": "query" + } + }, + "security": [ + { + "azure_auth": [] + }, + { + "apiKeyQuery": [] + } + ], + "responses": { + "400": { + "description": "Bad request: one or more parameters were incorrectly specified or are mutually exclusive.", + "schema": { + "$ref": "#/definitions/ODataErrorResponse" + } + }, + "401": { + "description": "Access denied due to invalid subscription key or invalid Azure Active Directory bearer token. Make sure to provide a valid key for an active Azure subscription and Maps resource. Otherwise, verify the [WWW-Authenticate](https://tools.ietf.org/html/rfc6750#section-3.1) header for error code and description of the provided AAD bearer token.", + "schema": { + "$ref": "#/definitions/ODataErrorResponse" + }, + "headers": { + "WWW-Authenticate": { + "type": "string", + "description": "Bearer realm=\"https://atlas.microsoft.com/\", error=\"invalid_token\", error_description=\"The access token expired\"" + } + } + }, + "403": { + "description": "Permission, capacity, or authentication issues.", + "schema": { + "$ref": "#/definitions/ODataErrorResponse" + } + }, + "404": { + "description": "Not Found: the requested resource could not be found, but it may be available again in the future.", + "schema": { + "$ref": "#/definitions/ODataErrorResponse" + } + }, + "500": { + "description": "An error occurred while processing the request. Please try again later.", + "schema": { + "$ref": "#/definitions/ODataErrorResponse" + } + }, + "200Async": { + "description": "The operation is running or complete. If the operation was successful, use the Resource-Location header to obtain the path to the result.", + "schema": { + "$ref": "#/definitions/LongRunningOperationResult" + }, + "headers": { + "Resource-Location": { + "type": "string", + "description": "If successful, a URI where details on the newly created resource can be found." + } + } + }, + "202Accepted": { + "description": "Request Accepted: The request has been accepted for processing. Please use the URL in the Operation-Location Header to obtain status.", + "headers": { + "Operation-Location": { + "type": "string", + "description": "New URL to check for the results of the long running process." + } + } + } + }, + "parameters": { + "ClientId": { + "name": "x-ms-client-id", + "description": "Specifies which account is intended for usage in conjunction with the Azure AD security model. It represents a unique ID for the Azure Maps account and can be retrieved from Azure Maps management plane Account API. To use Azure AD security in Azure Maps see the following [articles](https://aka.ms/amauthdetails) for guidance.", + "type": "string", + "in": "header", + "required": false, + "x-ms-parameter-location": "client" + }, + "SubscriptionKey": { + "name": "subscription-key", + "description": "One of the Azure Maps keys provided from an Azure Map Account. Please refer to this [article](https://docs.microsoft.com/azure/azure-maps/how-to-manage-authentication) for details on how to manage authentication.", + "type": "string", + "in": "query", + "required": false, + "x-ms-parameter-location": "client" + }, + "ApiVersion": { + "name": "api-version", + "description": "Version number of Azure Maps API. Current version is 2.0", + "type": "string", + "in": "query", + "required": true, + "default": "2.0", + "x-ms-parameter-location": "client" + }, + "UdidQuery": { + "name": "udid", + "description": "The unique data id for the content. The `udid` must have been obtained from a successful [Data Upload API](https://docs.microsoft.com/en-us/rest/api/maps/data/uploadpreview) call.", + "type": "string", + "in": "query", + "required": true, + "x-ms-parameter-location": "method" + }, + "ConversionId": { + "name": "conversionId", + "description": "The conversion id for the content. The `conversionId` must have been obtained from a successful [Conversion API](https://docs.microsoft.com/en-us/rest/api/maps/conversion/convertpreview) call.", + "type": "string", + "in": "path", + "required": true, + "x-ms-parameter-location": "method" + }, + "OutputOntology": { + "name": "outputOntology", + "description": "Output ontology version.", + "type": "string", + "in": "query", + "required": true, + "x-ms-parameter-location": "method" + }, + "DescriptionDwgConversion": { + "name": "description", + "description": "User provided description of the content being converted.", + "type": "string", + "in": "query", + "required": false, + "x-ms-parameter-location": "method" + }, + "ConversionOperationId": { + "name": "operationId", + "type": "string", + "in": "path", + "description": "The ID to query the status for the dataset create/import request.", + "required": true, + "x-ms-parameter-location": "method" + } + }, + "paths": { + "/conversions": { + "post": { + "x-publish": true, + "description": "**Conversion Create API**\n\n**Applies to:** S1 pricing tier.
\n\nCreator makes it possible to develop applications based on your private indoor map data using Azure Maps API and \nSDK. The Conversion API is part of Creator.
\n\nThe Conversion API lets the caller import a set of DWG design files as a zipped [Drawing Package](https://aka.ms/am-drawing-package) into Azure Maps. The [Drawing Package](https://aka.ms/am-drawing-package) should first be \nuploaded using the [Azure Maps Data Service](https://docs.microsoft.com/rest/api/maps/data). Once uploaded, use the \n`udid` returned by the [Data Upload API](https://docs.microsoft.com/rest/api/maps/data/uploadpreview) to call \nthis Conversion API.\n\n## Convert DWG package\n\nThe Conversion API performs a \n[long-running request](https://aka.ms/am-creator-lrt).\n\n## Debug DWG package issues\n\n\nDuring the Conversion process, if there are any issues with the DWG package [errors and warnings](https://aka.ms/am-conversion-errors) are provided in the response along with a *diagnostic package* to visualize \nand diagnose these issues. In case any issues are encountered with your DWG package, the Conversion operation status process as detailed \n[here](https://aka.ms/am-creator-lrt) returns the location of the *diagnostic\npackage* that can be downloaded by the caller to help them visualize and diagnose these issues. The *diagnostic package* location\ncan be found in the properties section of the conversion operation status response and looks like the following:\n\n```json\n{\n \"properties\": {\n \"diagnosticPackageLocation\": \"https://atlas.microsoft.com/mapdata/{DiagnosticPackageId}?api-version=1.0\" \n } \n}\n```\n\nThe *diagnostic package* can be downloaded by executing a `HTTP GET` request on the `diagnosticPackageLocation`.\nFor more details on how to use the tool to visualize and diagnose all the errors and warnings see [Drawing Error Visualizer](https://aka.ms/am-drawing-errors-visualizer).
\n\nA conversion operation will be marked as *success* if there are zero or more warnings but will be marked as *failed* if any errors are encountered. ", + "operationId": "Conversion_Convert", + "x-ms-examples": { + "Convert previously uploaded DWG Package": { + "$ref": "./examples/Conversion.json" + } + }, + "parameters": [ + { + "$ref": "#/parameters/ClientId" + }, + { + "$ref": "#/parameters/SubscriptionKey" + }, + { + "$ref": "#/parameters/ApiVersion" + }, + { + "$ref": "#/parameters/UdidQuery" + }, + { + "$ref": "#/parameters/OutputOntology" + }, + { + "$ref": "#/parameters/DescriptionDwgConversion" + } + ], + "responses": { + "202": { + "$ref": "#/responses/202Accepted" + }, + "400": { + "$ref": "#/responses/400" + }, + "401": { + "$ref": "#/responses/401" + }, + "403": { + "$ref": "#/responses/403" + }, + "404": { + "$ref": "#/responses/404" + }, + "500": { + "$ref": "#/responses/500" + } + } + }, + "get": { + "x-publish": true, + "description": "**Conversion List API**\n\n**Applies to:** S1 pricing tier.
\n\nCreator makes it possible to develop applications based on your private indoor map data using Azure Maps API and SDK. The Conversion API is part of Creator.
\n\nThis API allows the caller to fetch a list of all successful data conversions submitted previously using the [Conversion API](https://docs.microsoft.com/en-us/rest/api/maps/conversion/convertpreview). \n\n### Submit List Request\n\nTo list all successful conversions you will issue a `GET` request with no additional parameters.\n\n### List Data Response\n\nThe Conversion List API returns the complete list of all conversion details in `json` format.
\n\nHere is a sample response returning the details of two successful conversion requests: \n\n
\n\n```json\n{\n \"conversions\": \n [\n {\n \"conversionId\": \"54398242-ea6c-1f31-4fa6-79b1ae0fc24d\",\n \"udid\": \"31838736-8b84-11ea-bc55-0242ac130003\",\n \"created\": \"5/19/2020 9:00:00 AM +00:00\",\n \"description\": \"User provided description.\",\n \"featureCounts\": {\n \"DIR\": 1,\n \"LVL\": 3,\n \"FCL\": 1,\n \"UNIT\": 150,\n \"CTG\": 8,\n \"AEL\": 0,\n \"OPN\": 10\n }\n },\n {\n \"conversionId\": \"2acf7d32-8b84-11ea-bc55-0242ac130003\",\n \"udid\": \"1214bc58-8b84-11ea-bc55-0242ac1300039\",\n \"created\": \"5/19/2020 9:00:00 AM +00:00\",\n \"description\": \"User provided description.\",\n \"featureCounts\": {\n \"DIR\": 1,\n \"LVL\": 3,\n \"FCL\": 1,\n \"UNIT\": 150,\n \"CTG\": 8,\n \"AEL\": 0,\n \"OPN\": 10\n }\n }\n ]\n}\n```\n\n
", + "operationId": "Conversion_List", + "x-ms-examples": { + "Returns a list of all the data processed by the Conversion Service for the account": { + "$ref": "./examples/List.json" + } + }, + "parameters": [ + { + "$ref": "#/parameters/ClientId" + }, + { + "$ref": "#/parameters/SubscriptionKey" + }, + { + "$ref": "#/parameters/ApiVersion" + } + ], + "responses": { + "200": { + "description": "List request completed successfully.", + "schema": { + "$ref": "#/definitions/ConversionListResponse" + } + }, + "400": { + "$ref": "#/responses/400" + }, + "401": { + "$ref": "#/responses/401" + }, + "403": { + "$ref": "#/responses/403" + }, + "404": { + "$ref": "#/responses/404" + }, + "500": { + "$ref": "#/responses/500" + } + } + } + }, + "/conversions/{conversionId}": { + "get": { + "x-publish": true, + "description": "**Conversion Get API**\n\n**Applies to:** S1 pricing tier.
\n\nCreator makes it possible to develop applications based on your private indoor map data using Azure Maps API and SDK. The Conversion API is part of Creator.
\n\nThis API allows the caller to fetch a successful data conversion submitted previously using the [Conversion API](https://docs.microsoft.com/en-us/rest/api/maps/conversion/convertpreview). ", + "operationId": "Conversion_Get", + "x-ms-examples": { + "Get the details for one conversion operation": { + "$ref": "./examples/Get.json" + } + }, + "parameters": [ + { + "$ref": "#/parameters/ClientId" + }, + { + "$ref": "#/parameters/SubscriptionKey" + }, + { + "$ref": "#/parameters/ApiVersion" + }, + { + "$ref": "#/parameters/ConversionId" + } + ], + "responses": { + "200": { + "description": "Returns details of the specified conversion.", + "schema": { + "$ref": "#/definitions/ConversionListDetailInfo" + } + }, + "400": { + "$ref": "#/responses/400" + }, + "401": { + "$ref": "#/responses/401" + }, + "403": { + "$ref": "#/responses/403" + }, + "404": { + "$ref": "#/responses/404" + }, + "500": { + "$ref": "#/responses/500" + } + } + }, + "delete": { + "x-publish": true, + "description": "**Conversion Delete API**\n\n**Applies to:** S1 pricing tier.
\n\nCreator makes it possible to develop applications based on your private indoor map data using Azure Maps API and SDK. The Delete API is part of Creator.
\n\nThis API allows the caller to delete any data conversions created previously using the [Conversion API](https://docs.microsoft.com/en-us/rest/api/maps/conversion/convertpreview).\n\n### Submit Delete Request\n\nTo delete your conversion data you will issue a `DELETE` request where the path will contain the `conversionId` of the data to delete.\n\n### Conversion Delete Response\n\nThe Conversion Delete API returns a HTTP `204 No Content` response with an empty body, if the converted data resources were deleted successfully.
\nA HTTP `400 Bad Request` error response will be returned if no resource associated with the passed-in `conversionId` is found. ", + "operationId": "Conversion_Delete", + "x-ms-examples": { + "Delete previously converted content": { + "$ref": "./examples/Delete.json" + } + }, + "parameters": [ + { + "$ref": "#/parameters/ClientId" + }, + { + "$ref": "#/parameters/SubscriptionKey" + }, + { + "$ref": "#/parameters/ApiVersion" + }, + { + "$ref": "#/parameters/ConversionId" + } + ], + "responses": { + "204": { + "description": "Conversion delete request completed successfully. The content for `conversionId` was deleted on the server." + }, + "400": { + "$ref": "#/responses/400" + }, + "401": { + "$ref": "#/responses/401" + }, + "403": { + "$ref": "#/responses/403" + }, + "404": { + "$ref": "#/responses/404" + }, + "500": { + "$ref": "#/responses/500" + } + } + } + }, + "/conversions/operations/{operationId}": { + "get": { + "description": "This path will be obtained from a call to POST /conversions. While in progress, an http200 will be returned with no extra headers - followed by an http200 with Resource-Location header once successfully completed.", + "operationId": "Conversion_GetOperation", + "x-ms-examples": { + "Get the status of an operation which is still running": { + "$ref": "./examples/GetOperationStillRunning.json" + }, + "Get the status of an operation which has finished successfully, with non-fatal warnings": { + "$ref": "./examples/GetOperation.json" + } + }, + "parameters": [ + { + "$ref": "#/parameters/SubscriptionKey" + }, + { + "$ref": "#/parameters/ApiVersion" + }, + { + "$ref": "#/parameters/ConversionOperationId" + } + ], + "responses": { + "200": { + "$ref": "#/responses/200Async" + }, + "400": { + "$ref": "#/responses/400" + } + } + } + } + }, + "definitions": { + "ODataErrorResponse": { + "type": "object", + "description": "This response object is returned when an error occurs in the Maps API.", + "properties": { + "error": { + "$ref": "#/definitions/ODataError" + } + } + }, + "ODataError": { + "type": "object", + "description": "This object is returned when an error occurs in the Maps API.", + "properties": { + "code": { + "type": "string", + "readOnly": true, + "description": "The ODataError code." + }, + "message": { + "type": "string", + "readOnly": true, + "description": "If available, a human readable description of the error." + }, + "details": { + "type": "array", + "items": { + "$ref": "#/definitions/ODataError" + } + }, + "target": { + "type": "string", + "readOnly": true, + "description": "If available, the target causing the error." + } + } + }, + "LongRunningOperationResult": { + "description": "The response model for a Long-Running Operations API.", + "type": "object", + "properties": { + "operationId": { + "description": "The Id for this long-running operation.", + "type": "string" + }, + "status": { + "description": "The status state of the request.", + "type": "string", + "enum": [ + "NotStarted", + "Running", + "Failed", + "Succeeded" + ], + "x-ms-enum": { + "name": "type", + "modelAsString": true, + "values": [ + { + "value": "NotStarted", + "description": "The request has not started processing yet." + }, + { + "value": "Running", + "description": "The request has started processing." + }, + { + "value": "Failed", + "description": "The request has one or more failures." + }, + { + "value": "Succeeded", + "description": "The request has successfully completed." + } + ] + }, + "readOnly": true + }, + "created": { + "description": "The created timestamp.", + "type": "string", + "readOnly": true + }, + "resourceLocation": { + "description": "The location URI for details about the created resource. This is only provided when the request was successfully completed.", + "type": "string", + "readOnly": true + }, + "error": { + "$ref": "#/definitions/ODataError" + }, + "warning": { + "$ref": "#/definitions/ODataError" + } + } + }, + "ConversionListResponse": { + "description": "The response model for the Conversion List API.", + "type": "object", + "properties": { + "conversions": { + "description": "A list of all the previously submitted conversion requests.", + "type": "array", + "readOnly": true, + "items": { + "$ref": "#/definitions/ConversionListDetailInfo" + } + }, + "nextLink": { + "description": "If present, the location of the next page of data.", + "type": "string", + "readOnly": true + } + } + }, + "ConversionListDetailInfo": { + "description": "Detail information for the conversion requests.", + "type": "object", + "properties": { + "conversionId": { + "description": "A unique id that represents the artifact of a _successfully_ completed conversion process.", + "type": "string", + "readOnly": true + }, + "ontology": { + "description": "", + "type": "string", + "readOnly": true + }, + "udid": { + "description": "The unique id of the content provided to create this conversion.", + "type": "string", + "readOnly": true + }, + "created": { + "description": "The date and time of this conversion.", + "type": "string", + "readOnly": true + }, + "description": { + "description": "User provided description of the content being converted.", + "type": "string", + "readOnly": true + }, + "featureCounts": { + "description": "A summary of feature counts in this conversion.", + "type": "object", + "readOnly": true + } + } + } + } +} diff --git a/specification/maps/data-plane/Microsoft.Maps/DwgConversion/preview/2.0/examples/Conversion.json b/specification/maps/data-plane/Microsoft.Maps/DwgConversion/preview/2.0/examples/Conversion.json new file mode 100644 index 000000000000..7f9e7c8fba2b --- /dev/null +++ b/specification/maps/data-plane/Microsoft.Maps/DwgConversion/preview/2.0/examples/Conversion.json @@ -0,0 +1,62 @@ +{ + "parameters": { + "api-version": "2.0", + "subscription-key": "[subscription-key]", + "udid": "25084fb7-307a-4720-8f91-7952a0b91012", + "inputType": "DWG", + "outputOntology": "facility-2.0" + }, + "responses": { + "202": { + "headers": { + "Operation-Location": "https://atlas.microsoft.com/conversion/{conversionId}?api-version=1.0", + "Access-Control-Expose-Headers": "Operation-Location" + } + }, + "400": { + "headers": {}, + "body": { + "error": { + "code": "400 BadRequest", + "message": "Bad request: one or more parameters were incorrectly specified or are mutually exclusive." + } + } + }, + "401": { + "headers": {}, + "body": { + "error": { + "code": "401 Unauthorized", + "message": "Access denied due to invalid subscription key. Make sure to provide a valid key for an active subscription." + } + } + }, + "403": { + "headers": {}, + "body": { + "error": { + "code": "403 Forbidden", + "message": "Permission, capacity, or authentication issues." + } + } + }, + "404": { + "headers": {}, + "body": { + "error": { + "code": "404 NotFound", + "message": "Not Found: the requested resource could not be found, but it may be available again in the future." + } + } + }, + "500": { + "headers": {}, + "body": { + "error": { + "code": "500 InternalServerError", + "message": "An error occurred while processing the request. Please try again later." + } + } + } + } +} diff --git a/specification/maps/data-plane/Microsoft.Maps/DwgConversion/preview/2.0/examples/Delete.json b/specification/maps/data-plane/Microsoft.Maps/DwgConversion/preview/2.0/examples/Delete.json new file mode 100644 index 000000000000..747fd54584af --- /dev/null +++ b/specification/maps/data-plane/Microsoft.Maps/DwgConversion/preview/2.0/examples/Delete.json @@ -0,0 +1,55 @@ +{ + "parameters": { + "api-version": "2.0", + "subscription-key": "[subscription-key]", + "conversionId": "99884fb7-87a9-0920-7f93-7952a0b91012" + }, + "responses": { + "204": {}, + "400": { + "headers": {}, + "body": { + "error": { + "code": "400 BadRequest", + "message": "Bad request: one or more parameters were incorrectly specified or are mutually exclusive." + } + } + }, + "401": { + "headers": {}, + "body": { + "error": { + "code": "401 Unauthorized", + "message": "Access denied due to invalid subscription key. Make sure to provide a valid key for an active subscription." + } + } + }, + "403": { + "headers": {}, + "body": { + "error": { + "code": "403 Forbidden", + "message": "Permission, capacity, or authentication issues." + } + } + }, + "404": { + "headers": {}, + "body": { + "error": { + "code": "404 NotFound", + "message": "Not Found: the requested resource could not be found, but it may be available again in the future." + } + } + }, + "500": { + "headers": {}, + "body": { + "error": { + "code": "500 InternalServerError", + "message": "An error occurred while processing the request. Please try again later." + } + } + } + } +} diff --git a/specification/maps/data-plane/Microsoft.Maps/DwgConversion/preview/2.0/examples/Get.json b/specification/maps/data-plane/Microsoft.Maps/DwgConversion/preview/2.0/examples/Get.json new file mode 100644 index 000000000000..dd71e0e018a7 --- /dev/null +++ b/specification/maps/data-plane/Microsoft.Maps/DwgConversion/preview/2.0/examples/Get.json @@ -0,0 +1,71 @@ +{ + "parameters": { + "api-version": "2.0", + "subscription-key": "[subscription-key]", + "conversionId": "54398242-ea6c-1f31-4fa6-79b1ae0fc24d" + }, + "responses": { + "200": { + "body": { + "conversionId": "54398242-ea6c-1f31-4fa6-79b1ae0fc24d", + "udid": "31838736-8b84-11ea-bc55-0242ac130003", + "created": "5/19/2020 9:00:00 AM +00:00", + "description": "User provided description.", + "featureCounts": { + "directoryInfo": 1, + "level": 3, + "facility": 1, + "unit": 150, + "category": 8, + "areaElement": 0, + "opening": 10 + } + } + }, + "400": { + "headers": {}, + "body": { + "error": { + "code": "400 BadRequest", + "message": "Bad request: one or more parameters were incorrectly specified or are mutually exclusive." + } + } + }, + "401": { + "headers": {}, + "body": { + "error": { + "code": "401 Unauthorized", + "message": "Access denied due to invalid subscription key. Make sure to provide a valid key for an active subscription." + } + } + }, + "403": { + "headers": {}, + "body": { + "error": { + "code": "403 Forbidden", + "message": "Permission, capacity, or authentication issues." + } + } + }, + "404": { + "headers": {}, + "body": { + "error": { + "code": "404 NotFound", + "message": "Not Found: the requested resource could not be found, but it may be available again in the future." + } + } + }, + "500": { + "headers": {}, + "body": { + "error": { + "code": "500 InternalServerError", + "message": "An error occurred while processing the request. Please try again later." + } + } + } + } +} diff --git a/specification/maps/data-plane/Microsoft.Maps/DwgConversion/preview/2.0/examples/GetOperation.json b/specification/maps/data-plane/Microsoft.Maps/DwgConversion/preview/2.0/examples/GetOperation.json new file mode 100644 index 000000000000..3adc6d5b192f --- /dev/null +++ b/specification/maps/data-plane/Microsoft.Maps/DwgConversion/preview/2.0/examples/GetOperation.json @@ -0,0 +1,43 @@ +{ + "parameters": { + "api-version": "2.0", + "subscription-key": "[subscription-key]", + "operationId": "8b1288fa-1958-4a2b-b68e-13a7i5af7d7c" + }, + "responses": { + "200": { + "body": { + "operationId": "8b1288fa-1958-4a2b-b68e-13a7i5af7d7c", + "created": "2021-04-20T22:43:14.9401559+00:00", + "status": "Succeeded", + "resourceLocation": "https://us.atlas.microsoft.com/conversions/3e36b996-f6d1-b068-0fcb-dd6b014c3447?api-version=2.0", + "warning": { + "code": "dwgConversionProblem", + "details": [ + { + "code": "warning", + "details": [ + { + "code": "manifestWarning", + "message": "Ignoring unexpected JSON property: unitProperties[0].nonWheelchairAccessible with value False" + } + ] + } + ] + } + }, + "headers": { + "Resource-Location": "https://us.atlas.microsoft.com/conversions/3e36b996-f6d1-b068-0fcb-dd6b014c3447?api-version=2.0" + } + }, + "400": { + "headers": {}, + "body": { + "error": { + "code": "400 BadRequest", + "message": "Bad request: one or more parameters were incorrectly specified or are mutually exclusive." + } + } + } + } +} diff --git a/specification/maps/data-plane/Microsoft.Maps/DwgConversion/preview/2.0/examples/GetOperationStillRunning.json b/specification/maps/data-plane/Microsoft.Maps/DwgConversion/preview/2.0/examples/GetOperationStillRunning.json new file mode 100644 index 000000000000..0a160c590eb8 --- /dev/null +++ b/specification/maps/data-plane/Microsoft.Maps/DwgConversion/preview/2.0/examples/GetOperationStillRunning.json @@ -0,0 +1,25 @@ +{ + "parameters": { + "api-version": "2.0", + "subscription-key": "[subscription-key]", + "operationId": "8b1288fa-1958-4a2b-b68e-13a7i5af7d7c" + }, + "responses": { + "200": { + "body": { + "operationId": "8b1288fa-1958-4a2b-b68e-13a7i5af7d7c", + "created": "2021-04-23T19:14:03.2452596+00:00", + "status": "Running" + } + }, + "400": { + "headers": {}, + "body": { + "error": { + "code": "400 BadRequest", + "message": "Bad request: one or more parameters were incorrectly specified or are mutually exclusive." + } + } + } + } +} diff --git a/specification/maps/data-plane/Microsoft.Maps/DwgConversion/preview/2.0/examples/List.json b/specification/maps/data-plane/Microsoft.Maps/DwgConversion/preview/2.0/examples/List.json new file mode 100644 index 000000000000..a1c323869aa7 --- /dev/null +++ b/specification/maps/data-plane/Microsoft.Maps/DwgConversion/preview/2.0/examples/List.json @@ -0,0 +1,89 @@ +{ + "parameters": { + "api-version": "2.0", + "subscription-key": "[subscription-key]" + }, + "responses": { + "200": { + "body": { + "conversions": [ + { + "conversionId": "54398242-ea6c-1f31-4fa6-79b1ae0fc24d", + "udid": "31838736-8b84-11ea-bc55-0242ac130003", + "created": "5/19/2020 9:00:00 AM +00:00", + "description": "User provided description.", + "featureCounts": { + "directoryInfo": 1, + "level": 3, + "facility": 1, + "unit": 150, + "category": 8, + "areaElement": 0, + "opening": 10 + } + }, + { + "conversionId": "2acf7d32-8b84-11ea-bc55-0242ac130003", + "udid": "1214bc58-8b84-11ea-bc55-0242ac1300039", + "created": "5/19/2020 9:00:00 AM +00:00", + "description": "User provided description.", + "featureCounts": { + "directoryInfo": 1, + "level": 3, + "facility": 1, + "unit": 150, + "category": 8, + "areaElement": 0, + "opening": 10 + } + } + ] + } + }, + "400": { + "headers": {}, + "body": { + "error": { + "code": "400 BadRequest", + "message": "Bad request: one or more parameters were incorrectly specified or are mutually exclusive." + } + } + }, + "401": { + "headers": {}, + "body": { + "error": { + "code": "401 Unauthorized", + "message": "Access denied due to invalid subscription key. Make sure to provide a valid key for an active subscription." + } + } + }, + "403": { + "headers": {}, + "body": { + "error": { + "code": "403 Forbidden", + "message": "Permission, capacity, or authentication issues." + } + } + }, + "404": { + "headers": {}, + "body": { + "error": { + "code": "404 NotFound", + "message": "Not Found: the requested resource could not be found, but it may be available again in the future." + } + } + }, + "500": { + "headers": {}, + "body": { + "error": { + "code": "500 InternalServerError", + "message": "An error occurred while processing the request. Please try again later." + } + } + } + } +} diff --git a/specification/maps/data-plane/Microsoft.Maps/FeatureState/preview/2.0/examples/CreateStateset.json b/specification/maps/data-plane/Microsoft.Maps/FeatureState/preview/2.0/examples/CreateStateset.json new file mode 100644 index 000000000000..04135a049589 --- /dev/null +++ b/specification/maps/data-plane/Microsoft.Maps/FeatureState/preview/2.0/examples/CreateStateset.json @@ -0,0 +1,116 @@ +{ + "parameters": { + "api-version": "2.0", + "subscription-key": "[subscription-key]", + "datasetId": "5d34fbe8-87b7-f7c0-3144-c50e003a3c75", + "statesetCreateRequestBody": { + "styles": [ + { + "keyname": "s1", + "type": "boolean", + "rules": [ + { + "true": "#FF0000", + "false": "#00FF00" + } + ] + }, + { + "keyname": "s2", + "type": "number", + "rules": [ + { + "range": { + "exclusiveMaximum": 50 + }, + "color": "#343deb" + }, + { + "range": { + "minimum": 50, + "exclusiveMaximum": 70 + }, + "color": "#34ebb1" + }, + { + "range": { + "minimum": 70, + "exclusiveMaximum": 90 + }, + "color": "#eba834" + }, + { + "range": { + "minimum": 90 + }, + "color": "#eb3434" + } + ] + }, + { + "keyname": "s3", + "type": "string", + "rules": [ + { + "stateValue1": "#FF0000", + "stateValue2": "#FF00AA", + "stateValueN": "#00FF00" + } + ] + } + ] + } + }, + "responses": { + "200": { + "body": { + "statesetId": "b24bdb73-1305-3212-1909-a428d937b64f" + } + }, + "400": { + "headers": {}, + "body": { + "error": { + "code": "400 BadRequest", + "message": "Bad request: one or more parameters were incorrectly specified or are mutually exclusive." + } + } + }, + "401": { + "headers": {}, + "body": { + "error": { + "code": "401 Unauthorized", + "message": "Access denied due to invalid subscription key. Make sure to provide a valid key for an active subscription." + } + } + }, + "403": { + "headers": {}, + "body": { + "error": { + "code": "403 Forbidden", + "message": "Permission, capacity, or authentication issues." + } + } + }, + "404": { + "headers": {}, + "body": { + "error": { + "code": "404 NotFound", + "message": "Not Found: the requested resource could not be found, but it may be available again in the future." + } + } + }, + "500": { + "headers": {}, + "body": { + "error": { + "code": "500 InternalServerError", + "message": "An error occurred while processing the request. Please try again later." + } + } + } + } +} diff --git a/specification/maps/data-plane/Microsoft.Maps/FeatureState/preview/2.0/examples/DeleteFeatureState.json b/specification/maps/data-plane/Microsoft.Maps/FeatureState/preview/2.0/examples/DeleteFeatureState.json new file mode 100644 index 000000000000..deeb823677e5 --- /dev/null +++ b/specification/maps/data-plane/Microsoft.Maps/FeatureState/preview/2.0/examples/DeleteFeatureState.json @@ -0,0 +1,66 @@ +{ + "parameters": { + "api-version": "2.0", + "subscription-key": "[subscription-key]", + "statesetId": "b24bdb73-1305-3212-1909-a428d937b64", + "featureId": "SPC4709", + "stateKeyName": "keyName1" + }, + "responses": { + "204": {}, + "400": { + "headers": {}, + "body": { + "error": { + "code": "400 BadRequest", + "message": "Bad request: one or more parameters were incorrectly specified or are mutually exclusive." + } + } + }, + "401": { + "headers": {}, + "body": { + "error": { + "code": "401 Unauthorized", + "message": "Access denied due to invalid subscription key. Make sure to provide a valid key for an active subscription." + } + } + }, + "403": { + "headers": {}, + "body": { + "error": { + "code": "403 Forbidden", + "message": "Permission, capacity, or authentication issues." + } + } + }, + "404": { + "headers": {}, + "body": { + "error": { + "code": "404 NotFound", + "message": "Not Found: the requested resource could not be found, but it may be available again in the future." + } + } + }, + "409": { + "headers": {}, + "body": { + "error": { + "code": "409 Conflict", + "message": "The request could not be completed due to a conflict with the current state of the resource." + } + } + }, + "500": { + "headers": {}, + "body": { + "error": { + "code": "500 InternalServerError", + "message": "An error occurred while processing the request. Please try again later." + } + } + } + } +} diff --git a/specification/maps/data-plane/Microsoft.Maps/FeatureState/preview/2.0/examples/DeleteStateset.json b/specification/maps/data-plane/Microsoft.Maps/FeatureState/preview/2.0/examples/DeleteStateset.json new file mode 100644 index 000000000000..de8559bf30c1 --- /dev/null +++ b/specification/maps/data-plane/Microsoft.Maps/FeatureState/preview/2.0/examples/DeleteStateset.json @@ -0,0 +1,55 @@ +{ + "parameters": { + "api-version": "2.0", + "subscription-key": "[subscription-key]", + "statesetId": "b24bdb73-1305-3212-1909-a428d937b64f" + }, + "responses": { + "204": {}, + "400": { + "headers": {}, + "body": { + "error": { + "code": "400 BadRequest", + "message": "Bad request: one or more parameters were incorrectly specified or are mutually exclusive." + } + } + }, + "401": { + "headers": {}, + "body": { + "error": { + "code": "401 Unauthorized", + "message": "Access denied due to invalid subscription key. Make sure to provide a valid key for an active subscription." + } + } + }, + "403": { + "headers": {}, + "body": { + "error": { + "code": "403 Forbidden", + "message": "Permission, capacity, or authentication issues." + } + } + }, + "404": { + "headers": {}, + "body": { + "error": { + "code": "404 NotFound", + "message": "Not Found: the requested resource could not be found, but it may be available again in the future." + } + } + }, + "500": { + "headers": {}, + "body": { + "error": { + "code": "500 InternalServerError", + "message": "An error occurred while processing the request. Please try again later." + } + } + } + } +} diff --git a/specification/maps/data-plane/Microsoft.Maps/FeatureState/preview/2.0/examples/GetStates.json b/specification/maps/data-plane/Microsoft.Maps/FeatureState/preview/2.0/examples/GetStates.json new file mode 100644 index 000000000000..8f6ec63b9330 --- /dev/null +++ b/specification/maps/data-plane/Microsoft.Maps/FeatureState/preview/2.0/examples/GetStates.json @@ -0,0 +1,66 @@ +{ + "parameters": { + "api-version": "2.0", + "subscription-key": "[subscription-key]", + "statesetId": "b24bdb73-1305-3212-1909-a428d937b64", + "featureId": "SPC4709" + }, + "responses": { + "200": { + "body": { + "states": [ + { + "keyName": "s1", + "value": true, + "eventTimestamp": "2019-08-16 13:01" + } + ] + } + }, + "400": { + "headers": {}, + "body": { + "error": { + "code": "400 BadRequest", + "message": "Bad request: one or more parameters were incorrectly specified or are mutually exclusive." + } + } + }, + "401": { + "headers": {}, + "body": { + "error": { + "code": "401 Unauthorized", + "message": "Access denied due to invalid subscription key. Make sure to provide a valid key for an active subscription." + } + } + }, + "403": { + "headers": {}, + "body": { + "error": { + "code": "403 Forbidden", + "message": "Permission, capacity, or authentication issues." + } + } + }, + "404": { + "headers": {}, + "body": { + "error": { + "code": "404 NotFound", + "message": "Not Found: the requested resource could not be found, but it may be available again in the future." + } + } + }, + "500": { + "headers": {}, + "body": { + "error": { + "code": "500 InternalServerError", + "message": "An error occurred while processing the request. Please try again later." + } + } + } + } +} diff --git a/specification/maps/data-plane/Microsoft.Maps/FeatureState/preview/2.0/examples/GetStateset.json b/specification/maps/data-plane/Microsoft.Maps/FeatureState/preview/2.0/examples/GetStateset.json new file mode 100644 index 000000000000..4bc31bb12934 --- /dev/null +++ b/specification/maps/data-plane/Microsoft.Maps/FeatureState/preview/2.0/examples/GetStateset.json @@ -0,0 +1,117 @@ +{ + "parameters": { + "api-version": "2.0", + "subscription-key": "[subscription-key]", + "statesetId": "b24bdb73-1305-3212-1909-a428d937b64" + }, + "responses": { + "200": { + "body": { + "datasetIdList": [ + "8d700cc7-fd2c-4e21-b402-ad3f5e524f36" + ], + "statesetStyle": { + "styles": [ + { + "keyName": "s1", + "type": "boolean", + "rules": [ + { + "true": "#FFFF00", + "false": "#FFFFFF" + } + ] + }, + { + "keyName": "s2", + "type": "number", + "rules": [ + { + "range": { + "minimum": null, + "maximum": null, + "exclusiveMinumum": null, + "exclusiveMaximum": "50" + }, + "color": "#343deb" + }, + { + "range": { + "minimum": "50", + "maximum": null, + "exclusiveMinumum": null, + "exclusiveMaximum": "69" + }, + "color": "#34ebb1" + }, + { + "range": { + "minimum": "69", + "maximum": null, + "exclusiveMinumum": null, + "exclusiveMaximum": "90" + }, + "color": "#eba834" + }, + { + "range": { + "minimum": "90", + "maximum": null, + "exclusiveMinumum": null, + "exclusiveMaximum": null + }, + "color": "#eb3434" + } + ] + } + ] + } + } + }, + "400": { + "headers": {}, + "body": { + "error": { + "code": "400 BadRequest", + "message": "Bad request: one or more parameters were incorrectly specified or are mutually exclusive." + } + } + }, + "401": { + "headers": {}, + "body": { + "error": { + "code": "401 Unauthorized", + "message": "Access denied due to invalid subscription key. Make sure to provide a valid key for an active subscription." + } + } + }, + "403": { + "headers": {}, + "body": { + "error": { + "code": "403 Forbidden", + "message": "Permission, capacity, or authentication issues." + } + } + }, + "404": { + "headers": {}, + "body": { + "error": { + "code": "404 NotFound", + "message": "Not Found: the requested resource could not be found, but it may be available again in the future." + } + } + }, + "500": { + "headers": {}, + "body": { + "error": { + "code": "500 InternalServerError", + "message": "An error occurred while processing the request. Please try again later." + } + } + } + } +} diff --git a/specification/maps/data-plane/Microsoft.Maps/FeatureState/preview/2.0/examples/Stateset_List.json b/specification/maps/data-plane/Microsoft.Maps/FeatureState/preview/2.0/examples/Stateset_List.json new file mode 100644 index 000000000000..6c5a2dbb1008 --- /dev/null +++ b/specification/maps/data-plane/Microsoft.Maps/FeatureState/preview/2.0/examples/Stateset_List.json @@ -0,0 +1,121 @@ +{ + "parameters": { + "api-version": "2.0", + "subscription-key": "[subscription-key]" + }, + "responses": { + "200": { + "body": { + "statesetDetailList": [ + { + "statesetId": "09abcdf8-cad0-b3dd-a38f-d5ee3cff5eea", + "datasetIdList": [ + "8d700cc7-fd2c-4e21-b402-ad3f5e524f36" + ], + "statesetStyle": { + "styles": [ + { + "keyName": "s1", + "type": "boolean", + "rules": [ + { + "true": "#0FFF00", + "false": "#00FFF0" + } + ] + }, + { + "keyName": "s2", + "type": "number", + "rules": [ + { + "range": { + "minimum": null, + "maximum": null, + "exclusiveMinumum": null, + "exclusiveMaximum": "50" + }, + "color": "#343deb" + }, + { + "range": { + "minimum": "50", + "maximum": null, + "exclusiveMinumum": null, + "exclusiveMaximum": "69" + }, + "color": "#34ebb1" + }, + { + "range": { + "minimum": "69", + "maximum": null, + "exclusiveMinumum": null, + "exclusiveMaximum": "90" + }, + "color": "#eba834" + }, + { + "range": { + "minimum": "90", + "maximum": null, + "exclusiveMinumum": null, + "exclusiveMaximum": null + }, + "color": "#eb3434" + } + ] + } + ] + } + } + ] + } + }, + "400": { + "headers": {}, + "body": { + "error": { + "code": "400 BadRequest", + "message": "Bad request: one or more parameters were incorrectly specified or are mutually exclusive." + } + } + }, + "401": { + "headers": {}, + "body": { + "error": { + "code": "401 Unauthorized", + "message": "Access denied due to invalid subscription key. Make sure to provide a valid key for an active subscription." + } + } + }, + "403": { + "headers": {}, + "body": { + "error": { + "code": "403 Forbidden", + "message": "Permission, capacity, or authentication issues." + } + } + }, + "404": { + "headers": {}, + "body": { + "error": { + "code": "404 NotFound", + "message": "Not Found: the requested resource could not be found, but it may be available again in the future." + } + } + }, + "500": { + "headers": {}, + "body": { + "error": { + "code": "500 InternalServerError", + "message": "An error occurred while processing the request. Please try again later." + } + } + } + } +} diff --git a/specification/maps/data-plane/Microsoft.Maps/FeatureState/preview/2.0/examples/UpdateStates.json b/specification/maps/data-plane/Microsoft.Maps/FeatureState/preview/2.0/examples/UpdateStates.json new file mode 100644 index 000000000000..9dee6b24f9dd --- /dev/null +++ b/specification/maps/data-plane/Microsoft.Maps/FeatureState/preview/2.0/examples/UpdateStates.json @@ -0,0 +1,65 @@ +{ + "parameters": { + "api-version": "2.0", + "subscription-key": "[subscription-key]", + "statesetId": "b24bdb73-1305-3212-1909-a428d937b64", + "featureId": "SPC4709", + "featureStateUpdateRequestBody": { + "states": [ + { + "keyName": "s1", + "value": true, + "eventTimestamp": "2019-08-16 13:01" + } + ] + } + }, + "responses": { + "200": {}, + "400": { + "headers": {}, + "body": { + "error": { + "code": "400 BadRequest", + "message": "Bad request: one or more parameters were incorrectly specified or are mutually exclusive." + } + } + }, + "401": { + "headers": {}, + "body": { + "error": { + "code": "401 Unauthorized", + "message": "Access denied due to invalid subscription key. Make sure to provide a valid key for an active subscription." + } + } + }, + "403": { + "headers": {}, + "body": { + "error": { + "code": "403 Forbidden", + "message": "Permission, capacity, or authentication issues." + } + } + }, + "404": { + "headers": {}, + "body": { + "error": { + "code": "404 NotFound", + "message": "Not Found: the requested resource could not be found, but it may be available again in the future." + } + } + }, + "500": { + "headers": {}, + "body": { + "error": { + "code": "500 InternalServerError", + "message": "An error occurred while processing the request. Please try again later." + } + } + } + } +} diff --git a/specification/maps/data-plane/Microsoft.Maps/FeatureState/preview/2.0/examples/UpdateStateset.json b/specification/maps/data-plane/Microsoft.Maps/FeatureState/preview/2.0/examples/UpdateStateset.json new file mode 100644 index 000000000000..d9ea407ecdb1 --- /dev/null +++ b/specification/maps/data-plane/Microsoft.Maps/FeatureState/preview/2.0/examples/UpdateStateset.json @@ -0,0 +1,101 @@ +{ + "parameters": { + "api-version": "2.0", + "subscription-key": "[subscription-key]", + "statesetId": "b24bdb73-1305-3212-1909-a428d937b64", + "statesetStyleUpdateRequestBody": { + "styles": [ + { + "keyname": "s1", + "type": "boolean", + "rules": [ + { + "true": "#FFFF00", + "false": "#FFFFFF" + } + ] + }, + { + "keyname": "s2", + "type": "number", + "rules": [ + { + "range": { + "exclusiveMaximum": 50 + }, + "color": "#343deb" + }, + { + "range": { + "minimum": 50, + "exclusiveMaximum": 69 + }, + "color": "#34ebb1" + }, + { + "range": { + "minimum": 69, + "exclusiveMaximum": 90 + }, + "color": "#eba834" + }, + { + "range": { + "minimum": 90 + }, + "color": "#eb3434" + } + ] + } + ] + } + }, + "responses": { + "200": {}, + "400": { + "headers": {}, + "body": { + "error": { + "code": "400 BadRequest", + "message": "Bad request: one or more parameters were incorrectly specified or are mutually exclusive." + } + } + }, + "401": { + "headers": {}, + "body": { + "error": { + "code": "401 Unauthorized", + "message": "Access denied due to invalid subscription key. Make sure to provide a valid key for an active subscription." + } + } + }, + "403": { + "headers": {}, + "body": { + "error": { + "code": "403 Forbidden", + "message": "Permission, capacity, or authentication issues." + } + } + }, + "404": { + "headers": {}, + "body": { + "error": { + "code": "404 NotFound", + "message": "Not Found: the requested resource could not be found, but it may be available again in the future." + } + } + }, + "500": { + "headers": {}, + "body": { + "error": { + "code": "500 InternalServerError", + "message": "An error occurred while processing the request. Please try again later." + } + } + } + } +} diff --git a/specification/maps/data-plane/Microsoft.Maps/FeatureState/preview/2.0/featurestate.json b/specification/maps/data-plane/Microsoft.Maps/FeatureState/preview/2.0/featurestate.json new file mode 100644 index 000000000000..f1cb104081d4 --- /dev/null +++ b/specification/maps/data-plane/Microsoft.Maps/FeatureState/preview/2.0/featurestate.json @@ -0,0 +1,838 @@ +{ + "swagger": "2.0", + "info": { + "title": "Azure Maps Feature State Service", + "version": "2.0", + "description": "APIs for managing the dynamic feature states in Azure Maps." + }, + "host": "atlas.microsoft.com", + "schemes": [ + "https" + ], + "consumes": [], + "produces": [ + "application/json" + ], + "securityDefinitions": { + "azure_auth": { + "type": "oauth2", + "authorizationUrl": "https://login.microsoftonline.com/common/oauth2/authorize", + "flow": "implicit", + "description": "These are the [Azure Active Directory OAuth2](https://docs.microsoft.com/en-us/azure/active-directory/develop/v1-overview) Flows. When paired with [Azure Role Based Access](https://docs.microsoft.com/en-us/azure/role-based-access-control/overview) control it can be used to control access to Azure Maps REST APIs. Azure Role based access controls are used to designate access to one or more Azure Maps resource account or sub-resources. Any user, group, or service principal can be granted access via a built in role or a custom role composed of one or more permissions to Azure Maps REST APIs.\n\nTo implement scenarios we recommend viewing [authentication concepts](https://aka.ms/amauth). In summary, this security definition provides a solution for modeling application(s) via objects capable of access control on specific APIs and scopes.\n\n#### Note\n* This security definition **requires** the use of the `x-ms-client-id` header to indicate which Azure Maps resource the application is requesting access to. This can be acquired from the [Maps management API](https://aka.ms/amauthdetails).\n* The `Authorization URL` is specific to the Azure public cloud instance. Sovereign clouds have unique Authorization URLs and Azure Active directory configurations. \n* The Azure role based access control is configured from the [Azure management plane](https://aka.ms/amrbac) via Azure portal, Powershell, CLI, Azure SDKs, or REST APIs.\n* Usage of the [Azure Maps Web SDK](https://aka.ms/amaadmc) allows for configuration based setup of an application for multiple use cases.\n* Currently Azure Active Directory [v1.0](https://docs.microsoft.com/en-us/azure/active-directory/develop/azure-ad-endpoint-comparison) tokens are supported.", + "scopes": { + "user_impersonation": "Impersonates a user's Azure Active Directory account." + } + }, + "apiKeyQuery": { + "type": "apiKey", + "description": "This is a shared key which is provisioned when creating an [Azure Maps resource](https://aka.ms/amauth) through the Azure management plane via Azure portal, Powershell, CLI, Azure SDKs, or REST APIs. With this key, any application is authorized to access all REST APIs. In other words, these can currently be treated as master keys to the account which they are issued for. For publicly exposed applications our recommendation is to use server to server access of Azure Maps REST APIs where this key can be securely stored.", + "name": "subscription-key", + "in": "query" + } + }, + "security": [ + { + "azure_auth": [] + }, + { + "apiKeyQuery": [] + } + ], + "responses": { + "400": { + "description": "Bad request: one or more parameters were incorrectly specified or are mutually exclusive.", + "schema": { + "$ref": "#/definitions/ODataErrorResponse" + } + }, + "401": { + "description": "Access denied due to invalid subscription key or invalid Azure Active Directory bearer token. Make sure to provide a valid key for an active Azure subscription and Maps resource. Otherwise, verify the [WWW-Authenticate](https://tools.ietf.org/html/rfc6750#section-3.1) header for error code and description of the provided AAD bearer token.", + "schema": { + "$ref": "#/definitions/ODataErrorResponse" + }, + "headers": { + "WWW-Authenticate": { + "type": "string", + "description": "Bearer realm=\"https://atlas.microsoft.com/\", error=\"invalid_token\", error_description=\"The access token expired\"" + } + } + }, + "403": { + "description": "Permission, capacity, or authentication issues.", + "schema": { + "$ref": "#/definitions/ODataErrorResponse" + } + }, + "404": { + "description": "Not Found: the requested resource could not be found, but it may be available again in the future.", + "schema": { + "$ref": "#/definitions/ODataErrorResponse" + } + }, + "409": { + "description": "The request could not be completed due to a conflict with the current state of the resource. Likely caused by a parallel update to the same resource.", + "schema": { + "$ref": "#/definitions/ODataErrorResponse" + } + }, + "500": { + "description": "An error occurred while processing the request. Please try again later.", + "schema": { + "$ref": "#/definitions/ODataErrorResponse" + } + } + }, + "parameters": { + "SubscriptionKey": { + "name": "subscription-key", + "description": "One of the Azure Maps keys provided from an Azure Map Account. Please refer to this [article](https://docs.microsoft.com/azure/azure-maps/how-to-manage-authentication) for details on how to manage authentication.", + "type": "string", + "in": "query", + "required": false, + "x-ms-parameter-location": "client" + }, + "ApiVersion": { + "name": "api-version", + "description": "Version number of Azure Maps API. Current version is 2.0", + "type": "string", + "in": "query", + "required": true, + "default": "2.0", + "x-ms-parameter-location": "client" + }, + "DatasetIdForCreate": { + "name": "datasetId", + "description": "The datasetId must have been obtained from a successful [Dataset Create API](https://review.docs.microsoft.com/en-us/rest-staging/api/maps-master/dataset/createpreview?branch=lbs) call.", + "type": "string", + "in": "query", + "required": true, + "x-ms-parameter-location": "method" + }, + "StatesetIdInPath": { + "name": "statesetId", + "description": "The stateset id that was created.", + "type": "string", + "in": "path", + "required": true, + "x-ms-parameter-location": "method" + }, + "FeatureIdSet": { + "name": "featureId", + "description": "The id of a feature in the given dataset. If the featureId is not present in the dataset, Bad Request response will be returned.", + "type": "string", + "in": "path", + "required": true, + "x-ms-parameter-location": "method" + }, + "FeatureIdGet": { + "name": "featureId", + "description": "The id of a feature in the given stateset. If no state was set for the featureId in the stateset earlier, Bad Request response will be returned.", + "type": "string", + "in": "path", + "required": true, + "x-ms-parameter-location": "method" + }, + "FeatureIdDelete": { + "name": "featureId", + "description": "The id of a feature in the given stateset. If no state was set for the featureId in the stateset earlier, Bad Request response will be returned.", + "type": "string", + "in": "path", + "required": true, + "x-ms-parameter-location": "method" + }, + "StateKeyNameDelete": { + "name": "stateKeyName", + "description": "The Name of the state to be deleted.", + "type": "string", + "in": "query", + "required": true, + "x-ms-parameter-location": "method" + } + }, + "paths": { + "/featureStateSets": { + "post": { + "x-publish": true, + "description": "**Applies to:** S1 pricing tier.\n
\n\nThis POST API allows the user to create a new Stateset and define stateset style using request body.\n\nCreator makes it possible to develop applications based on your private indoor map data using Azure Maps API and SDK. The Feature State API is part of Creator. \n\nThe Feature State service allows the user to update the states of a feature and query them to be used in other services. The dynamic properties of a feature that don't belong to the dataset are referred to as *states* here.\n\nThis Feature State service pivot on the Stateset. Like Tileset, Stateset encapsulates the storage mechanism for feature states for a dataset.\n\nOnce the stateset is created, users can use that statesetId to post feature state updates and retrieve the current feature states. A feature can have only one state at a given point in time. \n\nFeature state is defined by the key name, value and the timestamp. When a feature state update is posted to Azure Maps, the state value gets updated only if the provided state’s timestamp is later than the stored timestamp. \n\nAzure Maps MapControl provides a way to use these feature states to style the features. Please refer to the State Tile documentation for more information.", + "operationId": "FeatureState_CreateStateset", + "x-ms-examples": { + "Create a new stateset with a datasetId": { + "$ref": "./examples/CreateStateset.json" + } + }, + "parameters": [ + { + "$ref": "#/parameters/SubscriptionKey" + }, + { + "$ref": "#/parameters/ApiVersion" + }, + { + "$ref": "#/parameters/DatasetIdForCreate" + }, + { + "name": "statesetCreateRequestBody", + "in": "body", + "description": "The stateset style JSON data.", + "required": true, + "schema": { + "$ref": "#/definitions/StylesObject" + } + } + ], + "responses": { + "200": { + "description": "Stateset created.", + "schema": { + "$ref": "#/definitions/StatesetCreatedResponse" + } + }, + "400": { + "$ref": "#/responses/400" + }, + "401": { + "$ref": "#/responses/401" + }, + "403": { + "$ref": "#/responses/403" + }, + "404": { + "$ref": "#/responses/404" + }, + "500": { + "$ref": "#/responses/500" + } + } + }, + "get": { + "x-publish": true, + "description": "**Applies to:** S1 pricing tier.
This API allows the caller to fetch a list of all previously successfully created statesets.", + "operationId": "FeatureState_ListStateset", + "x-ms-examples": { + "List all the previously created statesets": { + "$ref": "./examples/Stateset_List.json" + } + }, + "parameters": [ + { + "$ref": "#/parameters/SubscriptionKey" + }, + { + "$ref": "#/parameters/ApiVersion" + } + ], + "responses": { + "200": { + "description": "The list stateset request completed successfully. The response body contains a list of all the previously created statesets.", + "schema": { + "$ref": "#/definitions/StatesetListResponse" + } + }, + "400": { + "$ref": "#/responses/400" + }, + "401": { + "$ref": "#/responses/401" + }, + "403": { + "$ref": "#/responses/403" + }, + "404": { + "$ref": "#/responses/404" + }, + "500": { + "$ref": "#/responses/500" + } + } + } + }, + "/featureStateSets/{statesetId}": { + "put": { + "x-publish": true, + "description": "**Applies to:** S1 pricing tier.\n
\n\nThis PUT API allows the user to update the stateset style rules.", + "operationId": "FeatureState_PutStateset", + "x-ms-examples": { + "Update stateset style rules with a statesetId": { + "$ref": "./examples/UpdateStateset.json" + } + }, + "parameters": [ + { + "$ref": "#/parameters/SubscriptionKey" + }, + { + "$ref": "#/parameters/ApiVersion" + }, + { + "$ref": "#/parameters/StatesetIdInPath" + }, + { + "name": "statesetStyleUpdateRequestBody", + "in": "body", + "description": "The stateset style JSON data. Only style rules are allowed to be updated, update on keyname and type is not allowed.", + "required": true, + "schema": { + "$ref": "#/definitions/StylesObject" + } + } + ], + "responses": { + "200": { + "description": "Stateset styles are updated successfully." + }, + "400": { + "$ref": "#/responses/400" + }, + "401": { + "$ref": "#/responses/401" + }, + "403": { + "$ref": "#/responses/403" + }, + "404": { + "$ref": "#/responses/404" + }, + "500": { + "$ref": "#/responses/500" + } + } + }, + "delete": { + "x-publish": true, + "description": "**Applies to:** S1 pricing tier.
This DELETE API allows the user to delete the stateset and the associated data.", + "operationId": "FeatureState_DeleteStateset", + "x-ms-examples": { + "Delete an existing stateset": { + "$ref": "./examples/DeleteStateset.json" + } + }, + "parameters": [ + { + "$ref": "#/parameters/SubscriptionKey" + }, + { + "$ref": "#/parameters/ApiVersion" + }, + { + "$ref": "#/parameters/StatesetIdInPath" + } + ], + "responses": { + "204": { + "description": "Stateset Deleted." + }, + "400": { + "$ref": "#/responses/400" + }, + "401": { + "$ref": "#/responses/401" + }, + "403": { + "$ref": "#/responses/403" + }, + "404": { + "$ref": "#/responses/404" + }, + "500": { + "$ref": "#/responses/500" + } + } + }, + "get": { + "x-publish": true, + "description": "**Applies to:** S1 pricing tier.\n
\n\nThis GET API allows the user to get the stateset Information.\n\nThe stateset Information includes the datasetId associated to the stateset, and the styles of that stateset.", + "operationId": "FeatureState_GetStateset", + "x-ms-examples": { + "Get stateset information with a statesetId": { + "$ref": "./examples/GetStateset.json" + } + }, + "parameters": [ + { + "$ref": "#/parameters/SubscriptionKey" + }, + { + "$ref": "#/parameters/ApiVersion" + }, + { + "$ref": "#/parameters/StatesetIdInPath" + } + ], + "responses": { + "200": { + "description": "Get request completed successfully.", + "schema": { + "$ref": "#/definitions/StatesetGetResponse" + } + }, + "400": { + "$ref": "#/responses/400" + }, + "401": { + "$ref": "#/responses/401" + }, + "403": { + "$ref": "#/responses/403" + }, + "404": { + "$ref": "#/responses/404" + }, + "500": { + "$ref": "#/responses/500" + } + } + } + }, + "/featureStateSets/{statesetId}/featureStates/{featureId}": { + "put": { + "x-publish": true, + "operationId": "FeatureState_UpdateStates", + "description": "**Applies to:** S1 pricing tier.
\nThis PUT API allows the user to update the state of the given feature in the given stateset.", + "x-ms-examples": { + "Update the states of a feature": { + "$ref": "./examples/UpdateStates.json" + } + }, + "parameters": [ + { + "$ref": "#/parameters/SubscriptionKey" + }, + { + "$ref": "#/parameters/ApiVersion" + }, + { + "$ref": "#/parameters/StatesetIdInPath" + }, + { + "$ref": "#/parameters/FeatureIdSet" + }, + { + "name": "featureStateUpdateRequestBody", + "in": "body", + "description": "The feature state JSON data. A feature can have only one state at a given point in time. The specified state keyname must have been defined during the stateset creation.", + "required": true, + "schema": { + "$ref": "#/definitions/FeatureStatesStructure" + } + } + ], + "responses": { + "200": { + "description": "Feature states are updated successfully." + }, + "400": { + "$ref": "#/responses/400" + }, + "401": { + "$ref": "#/responses/401" + }, + "403": { + "$ref": "#/responses/403" + }, + "404": { + "$ref": "#/responses/404" + }, + "500": { + "$ref": "#/responses/500" + } + } + }, + "delete": { + "x-publish": true, + "operationId": "FeatureState_DeleteState", + "description": "**Applies to:** S1 pricing tier.
This API deletes the state information identified by the StateKeyName parameter for the feature identified by the FeatureId parameter in the the stateset.", + "x-ms-examples": { + "Delete the given feature state": { + "$ref": "./examples/DeleteFeatureState.json" + } + }, + "parameters": [ + { + "$ref": "#/parameters/SubscriptionKey" + }, + { + "$ref": "#/parameters/ApiVersion" + }, + { + "$ref": "#/parameters/StatesetIdInPath" + }, + { + "$ref": "#/parameters/FeatureIdDelete" + }, + { + "$ref": "#/parameters/StateKeyNameDelete" + } + ], + "responses": { + "204": { + "description": "Feature states deleted successfully." + }, + "400": { + "$ref": "#/responses/400" + }, + "401": { + "$ref": "#/responses/401" + }, + "403": { + "$ref": "#/responses/403" + }, + "404": { + "$ref": "#/responses/404" + }, + "409": { + "$ref": "#/responses/409" + }, + "500": { + "$ref": "#/responses/500" + } + } + }, + "get": { + "x-publish": true, + "operationId": "FeatureState_GetStates", + "description": "**Applies to:** S1 pricing tier.
This API returns the current state information associated with the given feature in the given stateset.", + "x-ms-examples": { + "Get the current states of a feature": { + "$ref": "./examples/GetStates.json" + } + }, + "parameters": [ + { + "$ref": "#/parameters/SubscriptionKey" + }, + { + "$ref": "#/parameters/ApiVersion" + }, + { + "$ref": "#/parameters/StatesetIdInPath" + }, + { + "$ref": "#/parameters/FeatureIdGet" + } + ], + "responses": { + "200": { + "description": "Get request completed successfully.", + "schema": { + "$ref": "#/definitions/FeatureStatesStructure" + } + }, + "400": { + "$ref": "#/responses/400" + }, + "401": { + "$ref": "#/responses/401" + }, + "403": { + "$ref": "#/responses/403" + }, + "404": { + "$ref": "#/responses/404" + }, + "500": { + "$ref": "#/responses/500" + } + } + } + } + }, + "definitions": { + "ODataErrorResponse": { + "type": "object", + "description": "This response object is returned when an error occurs in the Maps API.", + "properties": { + "error": { + "$ref": "#/definitions/ODataError" + } + } + }, + "ODataError": { + "type": "object", + "description": "This object is returned when an error occurs in the Maps API.", + "properties": { + "code": { + "type": "string", + "readOnly": true, + "description": "The ODataError code." + }, + "message": { + "type": "string", + "readOnly": true, + "description": "If available, a human readable description of the error." + }, + "details": { + "type": "array", + "items": { + "$ref": "#/definitions/ODataError" + } + }, + "target": { + "type": "string", + "readOnly": true, + "description": "If available, the target causing the error." + } + } + }, + "StatesetGetResponse": { + "description": "The response model for the successful Stateset Get API.", + "type": "object", + "properties": { + "datasetIdList": { + "description": "Dataset ID associated with the stateset.", + "type": "array", + "items": { + "type": "string" + } + }, + "statesetStyle": { + "$ref": "#/definitions/StylesObject" + } + } + }, + "StatesetListResponse": { + "description": "The response model for the successful Stateset List API.", + "type": "object", + "properties": { + "statesetDetailList": { + "description": "A list of statesets information.", + "type": "array", + "items": { + "$ref": "#/definitions/StatesetInfoObject" + } + }, + "nextLink": { + "description": "If present, the location of the next page of data.", + "type": "string", + "readOnly": true + } + } + }, + "StatesetInfoObject": { + "description": "The stateset information detail.", + "type": "object", + "properties": { + "statesetId": { + "description": "The stateset ID of this stateset.", + "type": "string" + }, + "datasetIdList": { + "description": "Dataset ID associated with the stateset.", + "type": "array", + "items": { + "type": "string" + } + }, + "statesetStyle": { + "$ref": "#/definitions/StylesObject" + } + } + }, + "StatesetCreatedResponse": { + "description": "The response model for the successful Stateset Create API.", + "type": "object", + "properties": { + "statesetId": { + "description": "The ID for the new stateset created.", + "type": "string", + "readOnly": true + } + } + }, + "FeatureStatesStructure": { + "description": "The feature states model for a feature.", + "type": "object", + "properties": { + "states": { + "description": "The feature states array.", + "type": "array", + "items": { + "$ref": "#/definitions/FeatureStateObject" + } + } + } + }, + "FeatureStateObject": { + "description": "Single feature state model.", + "type": "object", + "properties": { + "keyName": { + "description": "Feature state Keyname. Maximum length allowed is 1000.", + "type": "string" + }, + "value": { + "description": "Value for the feature state. Type should comply with the style definition attached to the featurestate. Maximum length allowed for string type is 1024.", + "type": "object" + }, + "eventTimestamp": { + "description": "Valid Timestamp when the feature state was captured.", + "type": "string" + } + } + }, + "StylesObject": { + "description": "The styles model.", + "type": "object", + "properties": { + "styles": { + "description": "An array of stateset styles. The style rule could be a numeric or string or a boolean type style rule. Refer to NumberRuleObject, StringRuleObject and BooleanRuleObject definitions [here](https://aka.ms/AzureMapsStatesetStylesObject). ", + "type": "array", + "items": { + "$ref": "#/definitions/StyleObject" + } + } + } + }, + "StyleObject": { + "description": "The stateset style model. The style rule could be a numeric type style rule or a boolean type style rule. Refer to NumberRuleObject, StringRuleObject and BooleanRuleObject definitions [here](https://aka.ms/AzureMapsStatesetStylesObject). ", + "type": "object" + }, + "NumberRuleObject": { + "description": "The numeric rule", + "type": "object", + "properties": { + "range": { + "$ref": "#/definitions/RangeObject" + }, + "color": { + "description": "Color is a JSON string in a variety of permitted formats, HTML-style hex values, RGB (\"#ff0\", \"#ffff00\", \"rgb(255, 255, 0)\"), RGBA (\"rgba(255, 255, 0, 1)\"), HSL(\"hsl(100, 50%, 50%)\"), and HSLA(\"hsla(100, 50%, 50%, 1)\"). Predefined HTML colors names, like yellow and blue, are also permitted.", + "type": "string" + } + } + }, + "RangeObject": { + "description": "The numeric value range for this style rule, If the value is in the range, all the conditions must hold true.", + "type": "object", + "properties": { + "minimum": { + "description": "All the number x that x ≥ minimum.", + "type": "number", + "format": "double" + }, + "maximum": { + "description": "All the number x that x ≤ maximum.", + "type": "number", + "format": "double" + }, + "exclusiveMinimum": { + "description": "All the number x that x > exclusiveMinimum.", + "type": "number", + "format": "double" + }, + "exclusiveMaximum": { + "description": "All the number x that x < exclusiveMaximum.", + "type": "number", + "format": "double" + } + } + }, + "BooleanRuleObject": { + "description": "the boolean rule", + "type": "object", + "properties": { + "true": { + "description": "The color when value is true.", + "type": "string" + }, + "false": { + "description": "The color when value is false.", + "type": "string" + } + } + }, + "StringRuleObject": { + "description": "The string rule. The string value matching is case sensitive. If a feature's state doesn't match any of the values defined here, that feature will not have any dynamic style. If duplicate string values are given, the first one takes precedence.", + "type": "object", + "properties": { + "stateValue1": { + "description": "The color when value string is stateValue1.", + "type": "string" + }, + "stateValue2": { + "description": "The color when value string is stateValue2.", + "type": "string" + }, + "stateValueN": { + "description": "The color when value string is stateValueN.", + "type": "string" + } + } + }, + "StyleRuleBase": { + "description": "contains common properties for numeric, string and boolean style rules.", + "discriminator": "type", + "required": [ + "keyName", + "type" + ], + "properties": { + "keyName": { + "description": "Stateset style key name. Key names are random strings but they should be unique inside style array. Maximum length allowed is 1000.", + "type": "string" + }, + "type": { + "description": "The type of stateset style.", + "type": "string", + "enum": [ + "number", + "boolean", + "string" + ] + } + } + }, + "BooleanTypeStyleRule": { + "description": "the boolean type style rule object.", + "type": "object", + "allOf": [ + { + "$ref": "#/definitions/StyleRuleBase" + } + ], + "properties": { + "rules": { + "description": "Boolean style rules.", + "type": "array", + "items": { + "$ref": "#/definitions/BooleanRuleObject" + } + } + } + }, + "NumberTypeStyleRule": { + "description": "The numeric type style rule object.", + "type": "object", + "allOf": [ + { + "$ref": "#/definitions/StyleRuleBase" + } + ], + "properties": { + "rules": { + "description": "Numeric style rules.", + "type": "array", + "items": { + "$ref": "#/definitions/NumberRuleObject" + } + } + } + }, + "StringTypeStyleRule": { + "description": "The string type style rule object.", + "type": "object", + "allOf": [ + { + "$ref": "#/definitions/StyleRuleBase" + } + ], + "properties": { + "rules": { + "description": "String style rules.", + "type": "array", + "items": { + "$ref": "#/definitions/StringRuleObject" + } + } + } + } + } +} diff --git a/specification/maps/data-plane/Microsoft.Maps/Tileset/preview/2.0/examples/Create.json b/specification/maps/data-plane/Microsoft.Maps/Tileset/preview/2.0/examples/Create.json new file mode 100644 index 000000000000..8932a64a5551 --- /dev/null +++ b/specification/maps/data-plane/Microsoft.Maps/Tileset/preview/2.0/examples/Create.json @@ -0,0 +1,60 @@ +{ + "parameters": { + "api-version": "2.0", + "subscription-key": "[subscription-key]", + "datasetId": "[dataset-Id]" + }, + "responses": { + "202": { + "headers": { + "Operation-Location": "https://atlas.microsoft.com/tileset/{tilesetId}?api-version=1.0", + "Access-Control-Expose-Headers": "Operation-Location" + } + }, + "400": { + "headers": {}, + "body": { + "error": { + "code": "400 BadRequest", + "message": "Bad request: one or more parameters were incorrectly specified or are mutually exclusive." + } + } + }, + "401": { + "headers": {}, + "body": { + "error": { + "code": "401 Unauthorized", + "message": "Access denied due to invalid subscription key. Make sure to provide a valid key for an active subscription." + } + } + }, + "403": { + "headers": {}, + "body": { + "error": { + "code": "403 Forbidden", + "message": "Permission, capacity, or authentication issues." + } + } + }, + "404": { + "headers": {}, + "body": { + "error": { + "code": "404 NotFound", + "message": "Not Found: the requested resource could not be found, but it may be available again in the future." + } + } + }, + "500": { + "headers": {}, + "body": { + "error": { + "code": "500 InternalServerError", + "message": "An error occurred while processing the request. Please try again later." + } + } + } + } +} diff --git a/specification/maps/data-plane/Microsoft.Maps/Tileset/preview/2.0/examples/Delete.json b/specification/maps/data-plane/Microsoft.Maps/Tileset/preview/2.0/examples/Delete.json new file mode 100644 index 000000000000..b220a8b3f7e3 --- /dev/null +++ b/specification/maps/data-plane/Microsoft.Maps/Tileset/preview/2.0/examples/Delete.json @@ -0,0 +1,55 @@ +{ + "parameters": { + "api-version": "2.0", + "subscription-key": "[subscription-key]", + "tilesetId": "25084fb7-307a-4720-8f91-7952a0b91012" + }, + "responses": { + "204": {}, + "400": { + "headers": {}, + "body": { + "error": { + "code": "400 BadRequest", + "message": "Bad request: one or more parameters were incorrectly specified or are mutually exclusive." + } + } + }, + "401": { + "headers": {}, + "body": { + "error": { + "code": "401 Unauthorized", + "message": "Access denied due to invalid subscription key. Make sure to provide a valid key for an active subscription." + } + } + }, + "403": { + "headers": {}, + "body": { + "error": { + "code": "403 Forbidden", + "message": "Permission, capacity, or authentication issues." + } + } + }, + "404": { + "headers": {}, + "body": { + "error": { + "code": "404 NotFound", + "message": "Not Found: the requested resource could not be found, but it may be available again in the future." + } + } + }, + "500": { + "headers": {}, + "body": { + "error": { + "code": "500 InternalServerError", + "message": "An error occurred while processing the request. Please try again later." + } + } + } + } +} diff --git a/specification/maps/data-plane/Microsoft.Maps/Tileset/preview/2.0/examples/Get.json b/specification/maps/data-plane/Microsoft.Maps/Tileset/preview/2.0/examples/Get.json new file mode 100644 index 000000000000..f1f020fb3e03 --- /dev/null +++ b/specification/maps/data-plane/Microsoft.Maps/Tileset/preview/2.0/examples/Get.json @@ -0,0 +1,69 @@ +{ + "parameters": { + "api-version": "2.0", + "subscription-key": "[subscription-key]", + "tilesetId": "d8fa86de-bb0f-4a02-a6ff-62ae7545dd84" + }, + "responses": { + "200": { + "body": { + "tilesetId": "d8fa86de-bb0f-4a02-a6ff-62ae7545dd84", + "datasetId": "63b18a6b-ac35-4b23-a1d9-ffa1003ad50b", + "description": "My first tileset", + "minZoom": 16, + "maxZoom": 18, + "bbox": [ + -122.13595, + 47.636524, + -122.1329, + 47.637525 + ] + } + }, + "400": { + "headers": {}, + "body": { + "error": { + "code": "400 BadRequest", + "message": "Bad request: one or more parameters were incorrectly specified or are mutually exclusive." + } + } + }, + "401": { + "headers": {}, + "body": { + "error": { + "code": "401 Unauthorized", + "message": "Access denied due to invalid subscription key. Make sure to provide a valid key for an active subscription." + } + } + }, + "403": { + "headers": {}, + "body": { + "error": { + "code": "403 Forbidden", + "message": "Permission, capacity, or authentication issues." + } + } + }, + "404": { + "headers": {}, + "body": { + "error": { + "code": "404 NotFound", + "message": "Not Found: the requested resource could not be found, but it may be available again in the future." + } + } + }, + "500": { + "headers": {}, + "body": { + "error": { + "code": "500 InternalServerError", + "message": "An error occurred while processing the request. Please try again later." + } + } + } + } +} diff --git a/specification/maps/data-plane/Microsoft.Maps/Tileset/preview/2.0/examples/GetOperation.json b/specification/maps/data-plane/Microsoft.Maps/Tileset/preview/2.0/examples/GetOperation.json new file mode 100644 index 000000000000..3edd1f0bb893 --- /dev/null +++ b/specification/maps/data-plane/Microsoft.Maps/Tileset/preview/2.0/examples/GetOperation.json @@ -0,0 +1,29 @@ +{ + "parameters": { + "api-version": "2.0", + "subscription-key": "[subscription-key]", + "operationId": "8b1288fa-1958-4a2b-b68e-13a7i5af7d7c" + }, + "responses": { + "200": { + "body": { + "operationId": "8b1288fa-1958-4a2b-b68e-13a7i5af7d7c", + "created": "2021-04-20T22:43:14.9401559+00:00", + "status": "Succeeded", + "resourceLocation": "https://us.atlas.microsoft.com/tilesets/3e36b996-f6d1-b068-0fcb-dd6b014c3447?api-version=2.0" + }, + "headers": { + "Resource-Location": "https://us.atlas.microsoft.com/tilesets/3e36b996-f6d1-b068-0fcb-dd6b014c3447?api-version=2.0" + } + }, + "400": { + "headers": {}, + "body": { + "error": { + "code": "400 BadRequest", + "message": "Bad request: one or more parameters were incorrectly specified or are mutually exclusive." + } + } + } + } +} diff --git a/specification/maps/data-plane/Microsoft.Maps/Tileset/preview/2.0/examples/GetOperationStillRunning.json b/specification/maps/data-plane/Microsoft.Maps/Tileset/preview/2.0/examples/GetOperationStillRunning.json new file mode 100644 index 000000000000..0a160c590eb8 --- /dev/null +++ b/specification/maps/data-plane/Microsoft.Maps/Tileset/preview/2.0/examples/GetOperationStillRunning.json @@ -0,0 +1,25 @@ +{ + "parameters": { + "api-version": "2.0", + "subscription-key": "[subscription-key]", + "operationId": "8b1288fa-1958-4a2b-b68e-13a7i5af7d7c" + }, + "responses": { + "200": { + "body": { + "operationId": "8b1288fa-1958-4a2b-b68e-13a7i5af7d7c", + "created": "2021-04-23T19:14:03.2452596+00:00", + "status": "Running" + } + }, + "400": { + "headers": {}, + "body": { + "error": { + "code": "400 BadRequest", + "message": "Bad request: one or more parameters were incorrectly specified or are mutually exclusive." + } + } + } + } +} diff --git a/specification/maps/data-plane/Microsoft.Maps/Tileset/preview/2.0/examples/List.json b/specification/maps/data-plane/Microsoft.Maps/Tileset/preview/2.0/examples/List.json new file mode 100644 index 000000000000..d76a6c0448c2 --- /dev/null +++ b/specification/maps/data-plane/Microsoft.Maps/Tileset/preview/2.0/examples/List.json @@ -0,0 +1,85 @@ +{ + "parameters": { + "api-version": "2.0", + "subscription-key": "[subscription-key]" + }, + "responses": { + "200": { + "body": { + "tilesets": [ + { + "tilesetId": "d8fa86de-bb0f-4a02-a6ff-62ae7545dd84", + "datasetId": "63b18a6b-ac35-4b23-a1d9-ffa1003ad50b", + "description": "My first tileset", + "minZoom": 16, + "maxZoom": 18, + "bbox": [ + -122.13595, + 47.636524, + -122.1329, + 47.637525 + ] + }, + { + "tilesetId": "b8dca8b3-8aad-4afe-abd6-0efe37b5a2e3", + "datasetId": "c0a01139-662e-4d5a-bf5f-92ea4a292aad", + "description": "My second tileset", + "minZoom": 19, + "maxZoom": 19, + "bbox": [ + -122.13595, + 47.636524, + -122.1329, + 47.637525 + ] + } + ] + } + }, + "400": { + "headers": {}, + "body": { + "error": { + "code": "400 BadRequest", + "message": "Bad request: one or more parameters were incorrectly specified or are mutually exclusive." + } + } + }, + "401": { + "headers": {}, + "body": { + "error": { + "code": "401 Unauthorized", + "message": "Access denied due to invalid subscription key. Make sure to provide a valid key for an active subscription." + } + } + }, + "403": { + "headers": {}, + "body": { + "error": { + "code": "403 Forbidden", + "message": "Permission, capacity, or authentication issues." + } + } + }, + "404": { + "headers": {}, + "body": { + "error": { + "code": "404 NotFound", + "message": "Not Found: the requested resource could not be found, but it may be available again in the future." + } + } + }, + "500": { + "headers": {}, + "body": { + "error": { + "code": "500 InternalServerError", + "message": "An error occurred while processing the request. Please try again later." + } + } + } + } +} diff --git a/specification/maps/data-plane/Microsoft.Maps/Tileset/preview/2.0/tileset.json b/specification/maps/data-plane/Microsoft.Maps/Tileset/preview/2.0/tileset.json new file mode 100644 index 000000000000..997ecb96e397 --- /dev/null +++ b/specification/maps/data-plane/Microsoft.Maps/Tileset/preview/2.0/tileset.json @@ -0,0 +1,561 @@ +{ + "swagger": "2.0", + "info": { + "title": "Azure Maps Tileset Service", + "version": "2.0", + "description": "APIs for managing Tilesets." + }, + "host": "atlas.microsoft.com", + "schemes": [ + "https" + ], + "consumes": [], + "produces": [ + "application/json" + ], + "securityDefinitions": { + "azure_auth": { + "type": "oauth2", + "authorizationUrl": "https://login.microsoftonline.com/common/oauth2/authorize", + "flow": "implicit", + "description": "These are the [Azure Active Directory OAuth2](https://docs.microsoft.com/en-us/azure/active-directory/develop/v1-overview) Flows. When paired with [Azure Role Based Access](https://docs.microsoft.com/en-us/azure/role-based-access-control/overview) control it can be used to control access to Azure Maps REST APIs. Azure Role based access controls are used to designate access to one or more Azure Maps resource account or sub-resources. Any user, group, or service principal can be granted access via a built in role or a custom role composed of one or more permissions to Azure Maps REST APIs.\n\nTo implement scenarios we recommend viewing [authentication concepts](https://aka.ms/amauth). In summary, this security definition provides a solution for modeling application(s) via objects capable of access control on specific APIs and scopes.\n\n#### Note\n* This security definition **requires** the use of the `x-ms-client-id` header to indicate which Azure Maps resource the application is requesting access to. This can be acquired from the [Maps management API](https://aka.ms/amauthdetails).\n* The `Authorization URL` is specific to the Azure public cloud instance. Sovereign clouds have unique Authorization URLs and Azure Active directory configurations. \n* The Azure role based access control is configured from the [Azure management plane](https://aka.ms/amrbac) via Azure portal, Powershell, CLI, Azure SDKs, or REST APIs.\n* Usage of the [Azure Maps Web SDK](https://aka.ms/amaadmc) allows for configuration based setup of an application for multiple use cases.\n* Currently Azure Active Directory [v1.0](https://docs.microsoft.com/en-us/azure/active-directory/develop/azure-ad-endpoint-comparison) tokens are supported.", + "scopes": { + "user_impersonation": "Impersonates a user's Azure Active Directory account." + } + }, + "apiKeyQuery": { + "type": "apiKey", + "description": "This is a shared key which is provisioned when creating an [Azure Maps resource](https://aka.ms/amauth) through the Azure management plane via Azure portal, Powershell, CLI, Azure SDKs, or REST APIs. With this key, any application is authorized to access all REST APIs. In other words, these can currently be treated as master keys to the account which they are issued for. For publicly exposed applications our recommendation is to use server to server access of Azure Maps REST APIs where this key can be securely stored.", + "name": "subscription-key", + "in": "query" + } + }, + "security": [ + { + "azure_auth": [] + }, + { + "apiKeyQuery": [] + } + ], + "responses": { + "400": { + "description": "Bad request: one or more parameters were incorrectly specified or are mutually exclusive.", + "schema": { + "$ref": "#/definitions/ODataErrorResponse" + } + }, + "401": { + "description": "Access denied due to invalid subscription key or invalid Azure Active Directory bearer token. Make sure to provide a valid key for an active Azure subscription and Maps resource. Otherwise, verify the [WWW-Authenticate](https://tools.ietf.org/html/rfc6750#section-3.1) header for error code and description of the provided AAD bearer token.", + "schema": { + "$ref": "#/definitions/ODataErrorResponse" + }, + "headers": { + "WWW-Authenticate": { + "type": "string", + "description": "Bearer realm=\"https://atlas.microsoft.com/\", error=\"invalid_token\", error_description=\"The access token expired\"" + } + } + }, + "403": { + "description": "Permission, capacity, or authentication issues.", + "schema": { + "$ref": "#/definitions/ODataErrorResponse" + } + }, + "404": { + "description": "Not Found: the requested resource could not be found, but it may be available again in the future.", + "schema": { + "$ref": "#/definitions/ODataErrorResponse" + } + }, + "500": { + "description": "An error occurred while processing the request. Please try again later.", + "schema": { + "$ref": "#/definitions/ODataErrorResponse" + } + }, + "200Async": { + "description": "The operation is running or complete. If the operation was successful, use the Resource-Location header to obtain the path to the result.", + "schema": { + "$ref": "#/definitions/LongRunningOperationResult" + }, + "headers": { + "Resource-Location": { + "type": "string", + "description": "If successful, a URI where details on the newly created resource can be found." + } + } + }, + "202Accepted": { + "description": "Request Accepted: The request has been accepted for processing. Please use the URL in the Operation-Location Header to obtain status.", + "headers": { + "Operation-Location": { + "type": "string", + "description": "New URL to check for the results of the long running process." + } + } + } + }, + "parameters": { + "ClientId": { + "name": "x-ms-client-id", + "description": "Specifies which account is intended for usage in conjunction with the Azure AD security model. It represents a unique ID for the Azure Maps account and can be retrieved from Azure Maps management plane Account API. To use Azure AD security in Azure Maps see the following [articles](https://aka.ms/amauthdetails) for guidance.", + "type": "string", + "in": "header", + "required": false, + "x-ms-parameter-location": "client" + }, + "SubscriptionKey": { + "name": "subscription-key", + "description": "One of the Azure Maps keys provided from an Azure Map Account. Please refer to this [article](https://docs.microsoft.com/azure/azure-maps/how-to-manage-authentication) for details on how to manage authentication.", + "type": "string", + "in": "query", + "required": false, + "x-ms-parameter-location": "client" + }, + "ApiVersion": { + "name": "api-version", + "description": "Version number of Azure Maps API. Current version is 2.0", + "type": "string", + "in": "query", + "required": true, + "default": "2.0", + "x-ms-parameter-location": "client" + }, + "JsonFormat": { + "name": "format", + "description": "Desired format of the response. Only `json` format is supported.", + "type": "string", + "in": "path", + "required": true, + "enum": [ + "json" + ], + "x-ms-enum": { + "name": "JsonFormat", + "modelAsString": true, + "values": [ + { + "value": "json", + "description": "[The JavaScript Object Notation Data Interchange Format](https://tools.ietf.org/html/rfc8259)" + } + ] + }, + "x-ms-parameter-location": "method" + }, + "DatasetIdQuery": { + "name": "datasetId", + "description": "The unique `datasetId` that the tileset create API uses to retrieve features to generate tiles. The `datasetId` must have been obtained from a successful [Dataset Create API](/en-us/rest/api/maps/dataset/createpreview) call.", + "type": "string", + "in": "query", + "required": true, + "x-ms-parameter-location": "client" + }, + "TilesetId": { + "name": "tilesetId", + "description": "The Tileset Id", + "type": "string", + "in": "path", + "required": true, + "x-ms-parameter-location": "method" + }, + "DescriptionTileset": { + "name": "description", + "description": "User provided description of the tileset.", + "type": "string", + "in": "query", + "required": false, + "x-ms-parameter-location": "method" + }, + "TilesetOperationId": { + "name": "operationId", + "type": "string", + "in": "path", + "description": "The ID to query the status for the dataset create/import request.", + "required": true, + "x-ms-parameter-location": "method" + } + }, + "paths": { + "/tilesets": { + "post": { + "x-publish": true, + "description": "**Tileset Create API**\n\n**Applies to**: S1 pricing tier.\n\nCreator makes it possible to develop applications based on your private indoor map data using Azure Maps API \nand SDK. The Tileset API is part of Creator.\n\nThe Tileset Create API allows the caller to create a tileset from a dataset. A tileset contains a set of tiles that can be consumed \nfrom the [Get Map Tile](/rest/api/maps/render/getmaptile) to retrieve custom tiles. To make a dataset, use the \n[DataSet Create API](/rest/api/maps/dataset/createpreview).\n\n## Submit Create Request\n\nTo create your tileset you will make a `POST` request with an empty body. The `datasetId` query parameter will be \nused as the source of the tileset data.\n\nThe Create Tileset API is a \n[long-running request](https://aka.ms/am-creator-lrt).", + "operationId": "Tileset_Create", + "x-ms-examples": { + "Create Tileset by providing a Dataset Id": { + "$ref": "./examples/Create.json" + } + }, + "parameters": [ + { + "$ref": "#/parameters/ClientId" + }, + { + "$ref": "#/parameters/SubscriptionKey" + }, + { + "$ref": "#/parameters/ApiVersion" + }, + { + "$ref": "#/parameters/DatasetIdQuery" + }, + { + "$ref": "#/parameters/DescriptionTileset" + } + ], + "responses": { + "202": { + "$ref": "#/responses/202Accepted" + }, + "400": { + "$ref": "#/responses/400" + }, + "401": { + "$ref": "#/responses/401" + }, + "403": { + "$ref": "#/responses/403" + }, + "404": { + "$ref": "#/responses/404" + }, + "500": { + "$ref": "#/responses/500" + } + } + }, + "get": { + "x-publish": true, + "description": "**Tileset List API**\n\n**Applies to:** S1 pricing tier.\n
\n\nCreator makes it possible to develop applications based on your private indoor map data using Azure Maps API and SDK. The Tileset API is part of Creator.\nThis API allows the caller to fetch a list of all tilesets created. \n
", + "operationId": "Tileset_List", + "x-ms-examples": { + "Get a list of all tilesets": { + "$ref": "./examples/List.json" + } + }, + "parameters": [ + { + "$ref": "#/parameters/ClientId" + }, + { + "$ref": "#/parameters/SubscriptionKey" + }, + { + "$ref": "#/parameters/ApiVersion" + } + ], + "responses": { + "200": { + "description": "List tileset request completed successfully. The response body contains a list of all tilesets.", + "schema": { + "$ref": "#/definitions/TilesetListResponse" + } + }, + "400": { + "$ref": "#/responses/400" + }, + "401": { + "$ref": "#/responses/401" + }, + "403": { + "$ref": "#/responses/403" + }, + "404": { + "$ref": "#/responses/404" + }, + "500": { + "$ref": "#/responses/500" + } + } + } + }, + "/tilesets/{tilesetId}": { + "get": { + "x-publish": true, + "description": "**Tileset Get API**\n\n**Applies to:** S1 pricing tier.\n
\n\nCreator makes it possible to develop applications based on your private indoor map data using Azure Maps API and SDK. The Tileset API is part of Creator.\nThis API allows the caller to fetch a tileset.", + "operationId": "Tileset_Get", + "x-ms-examples": { + "Gets the details for a single tileset": { + "$ref": "./examples/Get.json" + } + }, + "parameters": [ + { + "$ref": "#/parameters/ClientId" + }, + { + "$ref": "#/parameters/SubscriptionKey" + }, + { + "$ref": "#/parameters/ApiVersion" + }, + { + "$ref": "#/parameters/TilesetId" + } + ], + "responses": { + "200": { + "description": "List tileset request completed successfully. The response body contains a list of all tilesets.", + "schema": { + "$ref": "#/definitions/TilesetDetailInfo" + } + }, + "400": { + "$ref": "#/responses/400" + }, + "401": { + "$ref": "#/responses/401" + }, + "403": { + "$ref": "#/responses/403" + }, + "404": { + "$ref": "#/responses/404" + }, + "500": { + "$ref": "#/responses/500" + } + } + }, + "delete": { + "x-publish": true, + "description": "**Tileset Delete API**\n\n**Applies to:** S1 pricing tier.\n
\n\nCreator makes it possible to develop applications based on your private indoor map data using Azure Maps API and SDK. The Tileset API is part of Creator.\nThis API allows the caller to delete a created tileset.
\nYou can use this API if a tileset is no longer needed. \n\n### Submit Delete Request\n\nTo delete your content you will issue a `DELETE` request where the path will contain the `tilesetId` of the tileset to delete.
\n\n#### Delete request \"Successful\"\n\nThe Tileset Delete API returns a HTTP `204 No Content` response with an empty body, if the tileset was deleted successfully.
\n\n#### Delete request \"Failed\"\n\nA HTTP `400 Bad Request` error response will be returned if the tileset with the passed-in `tilesetId` is not found. \n\nHere is a sample error response:\n\n
\n\n```json\n{\n \"error\": {\n \"code\": \"400 BadRequest\",\n \"message\": \"Bad request - Tileset Id: d85b5b27-5fc4-4599-8b50-47160e90f8ce does not exist.\"\n }\n}\n```", + "operationId": "Tileset_Delete", + "x-ms-examples": { + "Delete a created tileset": { + "$ref": "./examples/Delete.json" + } + }, + "parameters": [ + { + "$ref": "#/parameters/ClientId" + }, + { + "$ref": "#/parameters/SubscriptionKey" + }, + { + "$ref": "#/parameters/ApiVersion" + }, + { + "$ref": "#/parameters/TilesetId" + } + ], + "responses": { + "204": { + "description": "Tileset delete request completed successfully." + }, + "400": { + "$ref": "#/responses/400" + }, + "401": { + "$ref": "#/responses/401" + }, + "403": { + "$ref": "#/responses/403" + }, + "404": { + "$ref": "#/responses/404" + }, + "500": { + "$ref": "#/responses/500" + } + } + } + }, + "/tilesets/operations/{operationId}": { + "get": { + "description": "This path will be obtained from a call to /tilesets/create. While in progress, an http200 will be returned with no extra headers - followed by an http200 with Resource-Location header once successfully completed.", + "operationId": "Tileset_GetOperation", + "x-ms-examples": { + "Get the status of an operation which is still running": { + "$ref": "./examples/GetOperationStillRunning.json" + }, + "Get the status of an operation which has finished successfully": { + "$ref": "./examples/GetOperation.json" + } + }, + "parameters": [ + { + "$ref": "#/parameters/SubscriptionKey" + }, + { + "$ref": "#/parameters/ApiVersion" + }, + { + "$ref": "#/parameters/TilesetOperationId" + } + ], + "responses": { + "200": { + "$ref": "#/responses/200Async" + }, + "400": { + "$ref": "#/responses/400" + } + } + } + } + }, + "definitions": { + "ODataErrorResponse": { + "type": "object", + "description": "This response object is returned when an error occurs in the Maps API.", + "properties": { + "error": { + "$ref": "#/definitions/ODataError" + } + } + }, + "ODataError": { + "type": "object", + "description": "This object is returned when an error occurs in the Maps API.", + "properties": { + "code": { + "type": "string", + "readOnly": true, + "description": "The ODataError code." + }, + "message": { + "type": "string", + "readOnly": true, + "description": "If available, a human readable description of the error." + }, + "details": { + "type": "array", + "items": { + "$ref": "#/definitions/ODataError" + } + }, + "target": { + "type": "string", + "readOnly": true, + "description": "If available, the target causing the error." + } + } + }, + "LongRunningOperationResult": { + "description": "The response model for a Long-Running Operations API.", + "type": "object", + "properties": { + "operationId": { + "description": "The Id for this long-running operation.", + "type": "string" + }, + "status": { + "description": "The status state of the request.", + "type": "string", + "enum": [ + "NotStarted", + "Running", + "Failed", + "Succeeded" + ], + "x-ms-enum": { + "name": "type", + "modelAsString": true, + "values": [ + { + "value": "NotStarted", + "description": "The request has not started processing yet." + }, + { + "value": "Running", + "description": "The request has started processing." + }, + { + "value": "Failed", + "description": "The request has one or more failures." + }, + { + "value": "Succeeded", + "description": "The request has successfully completed." + } + ] + }, + "readOnly": true + }, + "created": { + "description": "The created timestamp.", + "type": "string", + "readOnly": true + }, + "resourceLocation": { + "description": "The location URI for details about the created resource. This is only provided when the request was successfully completed.", + "type": "string", + "readOnly": true + }, + "error": { + "$ref": "#/definitions/ODataError" + }, + "warning": { + "$ref": "#/definitions/ODataError" + } + } + }, + "TilesetListResponse": { + "description": "The response model for the Tileset List API. Returns a list of all tilesets.", + "type": "object", + "properties": { + "tilesets": { + "description": "A list of all tilesets.", + "type": "array", + "readOnly": true, + "items": { + "$ref": "#/definitions/TilesetDetailInfo" + } + }, + "nextLink": { + "description": "If present, the location of the next page of data.", + "type": "string", + "readOnly": true + } + } + }, + "TilesetDetailInfo": { + "description": "Detail information for the data.", + "type": "object", + "properties": { + "tilesetId": { + "description": "The unique tileset id for the tileset.", + "type": "string", + "readOnly": true + }, + "ontology": { + "description": "", + "type": "string", + "readOnly": true + }, + "datasetId": { + "description": "The unique dataset Id used to create the tileset.", + "type": "string", + "readOnly": true + }, + "description": { + "description": "The description the caller provided when creating the tileset. Maximum length 1024 characters.", + "type": "string", + "readOnly": true + }, + "minZoom": { + "description": "The lowest tile zoom level tile generated for the tileset.", + "type": "integer", + "readOnly": true + }, + "maxZoom": { + "description": "The highest tile zoom level tile generated for the tileset.", + "type": "integer", + "readOnly": true + }, + "bbox": { + "description": "Bounding box which all features of the tileset lay within. Projection used - EPSG:3857. Format : 'minLon, minLat, maxLon, maxLat'.", + "type": "array", + "readOnly": true, + "items": { + "type": "number" + } + } + } + } + } +} diff --git a/specification/maps/data-plane/Microsoft.Maps/WFS/preview/2.0/examples/DeleteItem.json b/specification/maps/data-plane/Microsoft.Maps/WFS/preview/2.0/examples/DeleteItem.json new file mode 100644 index 000000000000..da4d41a75b6f --- /dev/null +++ b/specification/maps/data-plane/Microsoft.Maps/WFS/preview/2.0/examples/DeleteItem.json @@ -0,0 +1,57 @@ +{ + "parameters": { + "api-version": "2.0", + "datasetid": "018fda98-e638-0edf-5ef7-28491ff3bed4", + "subscription-key": "[subscription-key]", + "collectionId": "facility", + "featureId": "FCL39" + }, + "responses": { + "204": {}, + "400": { + "headers": {}, + "body": { + "error": { + "code": "400 BadRequest", + "message": "Bad request: one or more parameters were incorrectly specified or are mutually exclusive." + } + } + }, + "401": { + "headers": {}, + "body": { + "error": { + "code": "401 Unauthorized", + "message": "Access denied due to invalid subscription key. Make sure to provide a valid key for an active subscription." + } + } + }, + "403": { + "headers": {}, + "body": { + "error": { + "code": "403 Forbidden", + "message": "Permission, capacity, or authentication issues." + } + } + }, + "404": { + "headers": {}, + "body": { + "error": { + "code": "404 NotFound", + "message": "Not Found: the requested resource could not be found, but it may be available again in the future." + } + } + }, + "500": { + "headers": {}, + "body": { + "error": { + "code": "500 InternalServerError", + "message": "An error occurred while processing the request. Please try again later." + } + } + } + } +} diff --git a/specification/maps/data-plane/Microsoft.Maps/WFS/preview/2.0/examples/GetCollection.json b/specification/maps/data-plane/Microsoft.Maps/WFS/preview/2.0/examples/GetCollection.json new file mode 100644 index 000000000000..498c1c64ab00 --- /dev/null +++ b/specification/maps/data-plane/Microsoft.Maps/WFS/preview/2.0/examples/GetCollection.json @@ -0,0 +1,79 @@ +{ + "parameters": { + "api-version": "2.0", + "datasetid": "018fda98-e638-0edf-5ef7-28491ff3bed4", + "subscription-key": "[subscription-key]", + "collectionId": "unit" + }, + "responses": { + "200": { + "body": { + "name": "unit", + "description": "A physical and non-overlapping area which might be occupied and traversed by a navigating agent. Can be a hallway, a room, a courtyard, etc. It is surrounded by physical obstruction (wall), unless the isOpenArea attribute is equal to true, and one must add openings where the obstruction shouldn't be there. If isOpenArea attribute is equal to true, all the sides are assumed open to the surroundings and walls are to be added where needed. Walls for open areas are represented as a lineElement or areaElement with isObstruction equal to true.", + "ontology": "Facility-2.0", + "links": [ + { + "href": "https://atlas.microsoft.com/wfs/dataset/4a25a249-8bd4-3f78-8cd8-eff11751d35b/collections/unit/definition?api-version=1.0", + "rel": "describedBy", + "title": "Metadata catalogue for unit" + }, + { + "href": "https://atlas.microsoft.com/wfs/dataset/4a25a249-8bd4-3f78-8cd8-eff11751d35b/collections/unit/items?api-version=1.0", + "rel": "data", + "title": "unit" + }, + { + "href": "https://atlas.microsoft.com/wfs/dataset/4a25a249-8bd4-3f78-8cd8-eff11751d35b/collections/unit?api-version=1.0", + "rel": "self", + "title": "Metadata catalogue for unit" + } + ] + } + }, + "400": { + "headers": {}, + "body": { + "error": { + "code": "400 BadRequest", + "message": "Bad request: one or more parameters were incorrectly specified or are mutually exclusive." + } + } + }, + "401": { + "headers": {}, + "body": { + "error": { + "code": "401 Unauthorized", + "message": "Access denied due to invalid subscription key. Make sure to provide a valid key for an active subscription." + } + } + }, + "403": { + "headers": {}, + "body": { + "error": { + "code": "403 Forbidden", + "message": "Permission, capacity, or authentication issues." + } + } + }, + "404": { + "headers": {}, + "body": { + "error": { + "code": "404 NotFound", + "message": "Not Found: the requested resource could not be found, but it may be available again in the future." + } + } + }, + "500": { + "headers": {}, + "body": { + "error": { + "code": "500 InternalServerError", + "message": "An error occurred while processing the request. Please try again later." + } + } + } + } +} diff --git a/specification/maps/data-plane/Microsoft.Maps/WFS/preview/2.0/examples/GetCollectionDefinition.json b/specification/maps/data-plane/Microsoft.Maps/WFS/preview/2.0/examples/GetCollectionDefinition.json new file mode 100644 index 000000000000..1b054f862796 --- /dev/null +++ b/specification/maps/data-plane/Microsoft.Maps/WFS/preview/2.0/examples/GetCollectionDefinition.json @@ -0,0 +1,197 @@ +{ + "parameters": { + "api-version": "2.0", + "datasetid": "018fda98-e638-0edf-5ef7-28491ff3bed4", + "subscription-key": "[subscription-key]", + "collectionId": "unit" + }, + "responses": { + "200": { + "body": { + "idPrefix": "UNIT", + "name": "unit", + "description": "A physical and non-overlapping area which might be occupied and traversed by a navigating agent. Can be a hallway, a room, a courtyard, etc. It is surrounded by physical obstruction (wall), unless the isOpenArea attribute is equal to true, and one must add openings where the obstruction shouldn't be there. If isOpenArea attribute is equal to true, all the sides are assumed open to the surroundings and walls are to be added where needed. Walls for open areas are represented as a lineElement or areaElement with isObstruction equal to true.", + "ontology": "Facility-2.0", + "geometryType": "Polygon", + "featureTypes": [], + "properties": [ + { + "name": "externalId", + "required": false, + "type": "text" + }, + { + "name": "originalId", + "required": false, + "type": "text" + }, + { + "name": "categoryId", + "required": true, + "type": { + "featureId": "category" + } + }, + { + "name": "isOpenArea", + "required": false, + "type": "boolean" + }, + { + "name": "navigableBy", + "required": false, + "type": { + "array": { + "enum": [ + "pedestrian", + "wheelchair", + "machine", + "bicycle", + "automobile", + "hiredAuto", + "bus", + "railcar", + "emergency", + "ferry", + "boat" + ] + } + } + }, + { + "name": "isRoutable", + "required": false, + "type": "boolean" + }, + { + "name": "routeThroughBehavior", + "required": false, + "type": { + "enum": [ + "disallowed", + "allowed", + "preferred" + ] + } + }, + { + "name": "nonPublic", + "required": false, + "type": "boolean" + }, + { + "name": "levelId", + "required": true, + "type": { + "featureId": "level" + } + }, + { + "name": "occupants", + "required": false, + "type": { + "array": { + "featureId": "directoryInfo" + } + } + }, + { + "name": "addressId", + "required": false, + "type": { + "featureId": "directoryInfo" + } + }, + { + "name": "addressRoomNumber", + "required": false, + "type": "text" + }, + { + "name": "name", + "required": false, + "type": "text" + }, + { + "name": "nameSubtitle", + "required": false, + "type": "text" + }, + { + "name": "nameAlt", + "required": false, + "type": "text" + }, + { + "name": "anchorPoint", + "required": false, + "type": { + "geometry": [ + "Point" + ], + "isFragmented": false, + "srid": 4326 + } + } + ], + "links": [ + { + "href": "https://atlas.microsoft.com/wfs/dataset/4a25a249-8bd4-3f78-8cd8-eff11751d35b/collections/unit/definition?api-version=1.0", + "rel": "self", + "title": "Metadata catalogue for unit" + }, + { + "href": "https://atlas.microsoft.com/wfs/dataset/4a25a249-8bd4-3f78-8cd8-eff11751d35b/collections/unit/items?api-version=1.0", + "rel": "data", + "title": "unit" + } + ] + } + }, + "400": { + "headers": {}, + "body": { + "error": { + "code": "400 BadRequest", + "message": "Bad request: one or more parameters were incorrectly specified or are mutually exclusive." + } + } + }, + "401": { + "headers": {}, + "body": { + "error": { + "code": "401 Unauthorized", + "message": "Access denied due to invalid subscription key. Make sure to provide a valid key for an active subscription." + } + } + }, + "403": { + "headers": {}, + "body": { + "error": { + "code": "403 Forbidden", + "message": "Permission, capacity, or authentication issues." + } + } + }, + "404": { + "headers": {}, + "body": { + "error": { + "code": "404 NotFound", + "message": "Not Found: the requested resource could not be found, but it may be available again in the future." + } + } + }, + "500": { + "headers": {}, + "body": { + "error": { + "code": "500 InternalServerError", + "message": "An error occurred while processing the request. Please try again later." + } + } + } + } +} diff --git a/specification/maps/data-plane/Microsoft.Maps/WFS/preview/2.0/examples/GetCollections.json b/specification/maps/data-plane/Microsoft.Maps/WFS/preview/2.0/examples/GetCollections.json new file mode 100644 index 000000000000..ae9b4d3d3938 --- /dev/null +++ b/specification/maps/data-plane/Microsoft.Maps/WFS/preview/2.0/examples/GetCollections.json @@ -0,0 +1,298 @@ +{ + "parameters": { + "api-version": "2.0", + "datasetid": "018fda98-e638-0edf-5ef7-28491ff3bed4", + "subscription-key": "[subscription-key]" + }, + "responses": { + "200": { + "body": { + "ontology": "Facility-2.0", + "collections": [ + { + "name": "unit", + "description": "A physical and non-overlapping area which might be occupied and traversed by a navigating agent. Can be a hallway, a room, a courtyard, etc. It is surrounded by physical obstruction (wall), unless the isOpenArea attribute is equal to true, and one must add openings where the obstruction shouldn't be there. If isOpenArea attribute is equal to true, all the sides are assumed open to the surroundings and walls are to be added where needed. Walls for open areas are represented as a lineElement or areaElement with isObstruction equal to true.", + "links": [ + { + "href": "https://atlas.microsoft.com/wfs/dataset/4a25a249-8bd4-3f78-8cd8-eff11751d35b/collections/unit/definition?api-version=1.0", + "rel": "describedBy", + "title": "Metadata catalogue for unit" + }, + { + "href": "https://atlas.microsoft.com/wfs/dataset/4a25a249-8bd4-3f78-8cd8-eff11751d35b/collections/unit/items?api-version=1.0", + "rel": "data", + "title": "unit" + }, + { + "href": "https://atlas.microsoft.com/wfs/dataset/4a25a249-8bd4-3f78-8cd8-eff11751d35b/collections/unit?api-version=1.0", + "rel": "self", + "title": "Metadata catalogue for unit" + } + ] + }, + { + "name": "zone", + "description": "A virtual area. ex, wifi zone, emergency assembly area. Zones can be used as destinations but not meant for through traffic.", + "links": [ + { + "href": "https://atlas.microsoft.com/wfs/dataset/4a25a249-8bd4-3f78-8cd8-eff11751d35b/collections/zone/definition?api-version=1.0", + "rel": "describedBy", + "title": "Metadata catalogue for zone" + }, + { + "href": "https://atlas.microsoft.com/wfs/dataset/4a25a249-8bd4-3f78-8cd8-eff11751d35b/collections/zone/items?api-version=1.0", + "rel": "data", + "title": "zone" + }, + { + "href": "https://atlas.microsoft.com/wfs/dataset/4a25a249-8bd4-3f78-8cd8-eff11751d35b/collections/zone?api-version=1.0", + "rel": "self", + "title": "Metadata catalogue for zone" + } + ] + }, + { + "name": "level", + "description": "An indication of the extent and vertical position of a set of features.", + "links": [ + { + "href": "https://atlas.microsoft.com/wfs/dataset/4a25a249-8bd4-3f78-8cd8-eff11751d35b/collections/level/definition?api-version=1.0", + "rel": "describedBy", + "title": "Metadata catalogue for level" + }, + { + "href": "https://atlas.microsoft.com/wfs/dataset/4a25a249-8bd4-3f78-8cd8-eff11751d35b/collections/level/items?api-version=1.0", + "rel": "data", + "title": "level" + }, + { + "href": "https://atlas.microsoft.com/wfs/dataset/4a25a249-8bd4-3f78-8cd8-eff11751d35b/collections/level?api-version=1.0", + "rel": "self", + "title": "Metadata catalogue for level" + } + ] + }, + { + "name": "facility", + "description": "Area of the site, building footprint etc.", + "links": [ + { + "href": "https://atlas.microsoft.com/wfs/dataset/4a25a249-8bd4-3f78-8cd8-eff11751d35b/collections/facility/definition?api-version=1.0", + "rel": "describedBy", + "title": "Metadata catalogue for facility" + }, + { + "href": "https://atlas.microsoft.com/wfs/dataset/4a25a249-8bd4-3f78-8cd8-eff11751d35b/collections/facility/items?api-version=1.0", + "rel": "data", + "title": "facility" + }, + { + "href": "https://atlas.microsoft.com/wfs/dataset/4a25a249-8bd4-3f78-8cd8-eff11751d35b/collections/facility?api-version=1.0", + "rel": "self", + "title": "Metadata catalogue for facility" + } + ] + }, + { + "name": "verticalPenetration", + "description": "An area that, when used in a set, represents a method of navigating vertically between levels. It can be used to model stairs, elevators etc. Geometry can overlap units and other vertical penetration features.", + "links": [ + { + "href": "https://atlas.microsoft.com/wfs/dataset/4a25a249-8bd4-3f78-8cd8-eff11751d35b/collections/verticalPenetration/definition?api-version=1.0", + "rel": "describedBy", + "title": "Metadata catalogue for verticalPenetration" + }, + { + "href": "https://atlas.microsoft.com/wfs/dataset/4a25a249-8bd4-3f78-8cd8-eff11751d35b/collections/verticalPenetration/items?api-version=1.0", + "rel": "data", + "title": "verticalPenetration" + }, + { + "href": "https://atlas.microsoft.com/wfs/dataset/4a25a249-8bd4-3f78-8cd8-eff11751d35b/collections/verticalPenetration?api-version=1.0", + "rel": "self", + "title": "Metadata catalogue for verticalPenetration" + } + ] + }, + { + "name": "opening", + "description": "A usually-traversable boundary between two units, or a unit and verticalPenetration.", + "links": [ + { + "href": "https://atlas.microsoft.com/wfs/dataset/4a25a249-8bd4-3f78-8cd8-eff11751d35b/collections/opening/definition?api-version=1.0", + "rel": "describedBy", + "title": "Metadata catalogue for opening" + }, + { + "href": "https://atlas.microsoft.com/wfs/dataset/4a25a249-8bd4-3f78-8cd8-eff11751d35b/collections/opening/items?api-version=1.0", + "rel": "data", + "title": "opening" + }, + { + "href": "https://atlas.microsoft.com/wfs/dataset/4a25a249-8bd4-3f78-8cd8-eff11751d35b/collections/opening?api-version=1.0", + "rel": "self", + "title": "Metadata catalogue for opening" + } + ] + }, + { + "name": "directoryInfo", + "description": "Name, address, phone number, website, and hours of operation for a unit, facility, or an occupant of a unit or facility.", + "links": [ + { + "href": "https://atlas.microsoft.com/wfs/dataset/4a25a249-8bd4-3f78-8cd8-eff11751d35b/collections/directoryInfo/definition?api-version=1.0", + "rel": "describedBy", + "title": "Metadata catalogue for directoryInfo" + }, + { + "href": "https://atlas.microsoft.com/wfs/dataset/4a25a249-8bd4-3f78-8cd8-eff11751d35b/collections/directoryInfo/items?api-version=1.0", + "rel": "data", + "title": "directoryInfo" + }, + { + "href": "https://atlas.microsoft.com/wfs/dataset/4a25a249-8bd4-3f78-8cd8-eff11751d35b/collections/directoryInfo?api-version=1.0", + "rel": "self", + "title": "Metadata catalogue for directoryInfo" + } + ] + }, + { + "name": "pointElement", + "description": "A point feature in a unit, such as a first aid kit or a sprinkler head.", + "links": [ + { + "href": "https://atlas.microsoft.com/wfs/dataset/4a25a249-8bd4-3f78-8cd8-eff11751d35b/collections/pointElement/definition?api-version=1.0", + "rel": "describedBy", + "title": "Metadata catalogue for pointElement" + }, + { + "href": "https://atlas.microsoft.com/wfs/dataset/4a25a249-8bd4-3f78-8cd8-eff11751d35b/collections/pointElement/items?api-version=1.0", + "rel": "data", + "title": "pointElement" + }, + { + "href": "https://atlas.microsoft.com/wfs/dataset/4a25a249-8bd4-3f78-8cd8-eff11751d35b/collections/pointElement?api-version=1.0", + "rel": "self", + "title": "Metadata catalogue for pointElement" + } + ] + }, + { + "name": "lineElement", + "description": "A line feature in a unit, such as a dividing wall, window.", + "links": [ + { + "href": "https://atlas.microsoft.com/wfs/dataset/4a25a249-8bd4-3f78-8cd8-eff11751d35b/collections/lineElement/definition?api-version=1.0", + "rel": "describedBy", + "title": "Metadata catalogue for lineElement" + }, + { + "href": "https://atlas.microsoft.com/wfs/dataset/4a25a249-8bd4-3f78-8cd8-eff11751d35b/collections/lineElement/items?api-version=1.0", + "rel": "data", + "title": "lineElement" + }, + { + "href": "https://atlas.microsoft.com/wfs/dataset/4a25a249-8bd4-3f78-8cd8-eff11751d35b/collections/lineElement?api-version=1.0", + "rel": "self", + "title": "Metadata catalogue for lineElement" + } + ] + }, + { + "name": "areaElement", + "description": "A polygon feature in a unit, such as an area open to below, an obstruction like an island in a unit.", + "links": [ + { + "href": "https://atlas.microsoft.com/wfs/dataset/4a25a249-8bd4-3f78-8cd8-eff11751d35b/collections/areaElement/definition?api-version=1.0", + "rel": "describedBy", + "title": "Metadata catalogue for areaElement" + }, + { + "href": "https://atlas.microsoft.com/wfs/dataset/4a25a249-8bd4-3f78-8cd8-eff11751d35b/collections/areaElement/items?api-version=1.0", + "rel": "data", + "title": "areaElement" + }, + { + "href": "https://atlas.microsoft.com/wfs/dataset/4a25a249-8bd4-3f78-8cd8-eff11751d35b/collections/areaElement?api-version=1.0", + "rel": "self", + "title": "Metadata catalogue for areaElement" + } + ] + }, + { + "name": "category", + "description": "Category names. e.g. \"room.conference\". The isRoutable attribute puts a feature with that category on the routing graph. The routeThroughBehavior attribute determines whether a feature can be used for through traffic or not.", + "links": [ + { + "href": "https://atlas.microsoft.com/wfs/dataset/4a25a249-8bd4-3f78-8cd8-eff11751d35b/collections/category/definition?api-version=1.0", + "rel": "describedBy", + "title": "Metadata catalogue for category" + }, + { + "href": "https://atlas.microsoft.com/wfs/dataset/4a25a249-8bd4-3f78-8cd8-eff11751d35b/collections/category/items?api-version=1.0", + "rel": "data", + "title": "category" + }, + { + "href": "https://atlas.microsoft.com/wfs/dataset/4a25a249-8bd4-3f78-8cd8-eff11751d35b/collections/category?api-version=1.0", + "rel": "self", + "title": "Metadata catalogue for category" + } + ] + } + ], + "links": [ + { + "href": "https://atlas.microsoft.com/wfs/dataset/4a25a249-8bd4-3f78-8cd8-eff11751d35b/collections?api-version=1.0", + "rel": "self" + } + ] + } + }, + "400": { + "headers": {}, + "body": { + "error": { + "code": "400 BadRequest", + "message": "Bad request: one or more parameters were incorrectly specified or are mutually exclusive." + } + } + }, + "401": { + "headers": {}, + "body": { + "error": { + "code": "401 Unauthorized", + "message": "Access denied due to invalid subscription key. Make sure to provide a valid key for an active subscription." + } + } + }, + "403": { + "headers": {}, + "body": { + "error": { + "code": "403 Forbidden", + "message": "Permission, capacity, or authentication issues." + } + } + }, + "404": { + "headers": {}, + "body": { + "error": { + "code": "404 NotFound", + "message": "Not Found: the requested resource could not be found, but it may be available again in the future." + } + } + }, + "500": { + "headers": {}, + "body": { + "error": { + "code": "500 InternalServerError", + "message": "An error occurred while processing the request. Please try again later." + } + } + } + } +} diff --git a/specification/maps/data-plane/Microsoft.Maps/WFS/preview/2.0/examples/GetConformance.json b/specification/maps/data-plane/Microsoft.Maps/WFS/preview/2.0/examples/GetConformance.json new file mode 100644 index 000000000000..2ba8ad476b28 --- /dev/null +++ b/specification/maps/data-plane/Microsoft.Maps/WFS/preview/2.0/examples/GetConformance.json @@ -0,0 +1,64 @@ +{ + "parameters": { + "api-version": "2.0", + "datasetid": "018fda98-e638-0edf-5ef7-28491ff3bed4", + "subscription-key": "[subscription-key]" + }, + "responses": { + "200": { + "body": { + "conformsTo": [ + "http://www.opengis.net/spec/wfs-1/3.0/req/core", + "http://www.opengis.net/spec/wfs-1/3.0/req/oas30", + "http://www.opengis.net/spec/wfs-1/3.0/req/geojson", + "http://tempuri.org/wfs/3.0/edit" + ] + } + }, + "400": { + "headers": {}, + "body": { + "error": { + "code": "400 BadRequest", + "message": "Bad request: one or more parameters were incorrectly specified or are mutually exclusive." + } + } + }, + "401": { + "headers": {}, + "body": { + "error": { + "code": "401 Unauthorized", + "message": "Access denied due to invalid subscription key. Make sure to provide a valid key for an active subscription." + } + } + }, + "403": { + "headers": {}, + "body": { + "error": { + "code": "403 Forbidden", + "message": "Permission, capacity, or authentication issues." + } + } + }, + "404": { + "headers": {}, + "body": { + "error": { + "code": "404 NotFound", + "message": "Not Found: the requested resource could not be found, but it may be available again in the future." + } + } + }, + "500": { + "headers": {}, + "body": { + "error": { + "code": "500 InternalServerError", + "message": "An error occurred while processing the request. Please try again later." + } + } + } + } +} diff --git a/specification/maps/data-plane/Microsoft.Maps/WFS/preview/2.0/examples/GetItem.json b/specification/maps/data-plane/Microsoft.Maps/WFS/preview/2.0/examples/GetItem.json new file mode 100644 index 000000000000..bb4b406d2a1b --- /dev/null +++ b/specification/maps/data-plane/Microsoft.Maps/WFS/preview/2.0/examples/GetItem.json @@ -0,0 +1,129 @@ +{ + "parameters": { + "api-version": "2.0", + "datasetid": "018fda98-e638-0edf-5ef7-28491ff3bed4", + "subscription-key": "[subscription-key]", + "collectionId": "unit", + "featureId": "UNIT39" + }, + "responses": { + "200": { + "body": { + "ontology": "Facility-2.0", + "feature": { + "type": "feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 139.63304057829211, + 35.457686686108559 + ], + [ + 139.63296283234274, + 35.457783904258683 + ], + [ + 139.63308672404617, + 35.457850229062018 + ], + [ + 139.63314516916711, + 35.457777145699858 + ], + [ + 139.63312747036289, + 35.457767670747167 + ], + [ + 139.63314677109963, + 35.457743535881377 + ], + [ + 139.63304057829211, + 35.457686686108559 + ] + ] + ] + }, + "properties": { + "originalId": "ddbbb583-4621-4e11-8859-299d1057e843", + "categoryId": "CTG10", + "isOpenArea": false, + "navigableBy": [ + "pedestrian" + ], + "isRoutable": false, + "routeThroughBehavior": "allowed", + "nonPublic": false, + "levelId": "LVL18", + "occupants": [], + "addressId": "DIR16", + "addressRoomNumber": "", + "name": "21N13", + "nameSubtitle": "", + "nameAlt": "" + }, + "id": "UNIT39", + "featureType": "" + }, + "links": [ + { + "href": "https://atlas.microsoft.com/wfs/dataset/4a25a249-8bd4-3f78-8cd8-eff11751d35b/collections/unit/items/UNIT39?api-version=1.0", + "rel": "self" + }, + { + "href": "https://atlas.microsoft.com/wfs/dataset/4a25a249-8bd4-3f78-8cd8-eff11751d35b/collections/unit?api-version=1.0", + "rel": "data" + } + ] + } + }, + "400": { + "headers": {}, + "body": { + "error": { + "code": "400 BadRequest", + "message": "Bad request: one or more parameters were incorrectly specified or are mutually exclusive." + } + } + }, + "401": { + "headers": {}, + "body": { + "error": { + "code": "401 Unauthorized", + "message": "Access denied due to invalid subscription key. Make sure to provide a valid key for an active subscription." + } + } + }, + "403": { + "headers": {}, + "body": { + "error": { + "code": "403 Forbidden", + "message": "Permission, capacity, or authentication issues." + } + } + }, + "404": { + "headers": {}, + "body": { + "error": { + "code": "404 NotFound", + "message": "Not Found: the requested resource could not be found, but it may be available again in the future." + } + } + }, + "500": { + "headers": {}, + "body": { + "error": { + "code": "500 InternalServerError", + "message": "An error occurred while processing the request. Please try again later." + } + } + } + } +} diff --git a/specification/maps/data-plane/Microsoft.Maps/WFS/preview/2.0/examples/GetItems.json b/specification/maps/data-plane/Microsoft.Maps/WFS/preview/2.0/examples/GetItems.json new file mode 100644 index 000000000000..c4ba03fd6d91 --- /dev/null +++ b/specification/maps/data-plane/Microsoft.Maps/WFS/preview/2.0/examples/GetItems.json @@ -0,0 +1,138 @@ +{ + "parameters": { + "api-version": "2.0", + "datasetid": "018fda98-e638-0edf-5ef7-28491ff3bed4", + "subscription-key": "[subscription-key]", + "collectionId": "unit", + "limit": 1, + "bbox": "-122, 47, -120, 46" + }, + "responses": { + "200": { + "body": { + "type": "FeatureCollection", + "ontology": "Facility-2.0", + "features": [ + { + "type": "feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 139.63304057829211, + 35.457686686108559 + ], + [ + 139.63296283234274, + 35.457783904258683 + ], + [ + 139.63308672404617, + 35.457850229062018 + ], + [ + 139.63314516916711, + 35.457777145699858 + ], + [ + 139.63312747036289, + 35.457767670747167 + ], + [ + 139.63314677109963, + 35.457743535881377 + ], + [ + 139.63304057829211, + 35.457686686108559 + ] + ] + ] + }, + "properties": { + "originalId": "ddbbb583-4621-4e11-8859-299d1057e843", + "categoryId": "CTG10", + "isOpenArea": false, + "navigableBy": [ + "pedestrian" + ], + "isRoutable": false, + "routeThroughBehavior": "allowed", + "nonPublic": false, + "levelId": "LVL18", + "occupants": [], + "addressId": "DIR16", + "addressRoomNumber": "", + "name": "21N13", + "nameSubtitle": "", + "nameAlt": "" + }, + "id": "UNIT39", + "featureType": "" + } + ], + "numberReturned": 1, + "links": [ + { + "href": "https://atlas.microsoft.com/wfs/dataset/4a25a249-8bd4-3f78-8cd8-eff11751d35b/collections/unit/items?api-version=1.0&limit=1", + "rel": "self" + }, + { + "href": "https://atlas.microsoft.com/wfs/dataset/4a25a249-8bd4-3f78-8cd8-eff11751d35b/collections/unit?api-version=1.0", + "rel": "data" + }, + { + "href": "https://atlas.microsoft.com/wfs/dataset/4a25a249-8bd4-3f78-8cd8-eff11751d35b/collections/unit/items?n=PMRG4ZLYOQRDUMJMEJYHEZLWEI5C2ML5&api-version=1.0&limit=1", + "rel": "next" + } + ] + } + }, + "400": { + "headers": {}, + "body": { + "error": { + "code": "400 BadRequest", + "message": "Bad request: one or more parameters were incorrectly specified or are mutually exclusive." + } + } + }, + "401": { + "headers": {}, + "body": { + "error": { + "code": "401 Unauthorized", + "message": "Access denied due to invalid subscription key. Make sure to provide a valid key for an active subscription." + } + } + }, + "403": { + "headers": {}, + "body": { + "error": { + "code": "403 Forbidden", + "message": "Permission, capacity, or authentication issues." + } + } + }, + "404": { + "headers": {}, + "body": { + "error": { + "code": "404 NotFound", + "message": "Not Found: the requested resource could not be found, but it may be available again in the future." + } + } + }, + "500": { + "headers": {}, + "body": { + "error": { + "code": "500 InternalServerError", + "message": "An error occurred while processing the request. Please try again later." + } + } + } + } +} diff --git a/specification/maps/data-plane/Microsoft.Maps/WFS/preview/2.0/examples/GetLandingPage.json b/specification/maps/data-plane/Microsoft.Maps/WFS/preview/2.0/examples/GetLandingPage.json new file mode 100644 index 000000000000..1ff1f81bbcca --- /dev/null +++ b/specification/maps/data-plane/Microsoft.Maps/WFS/preview/2.0/examples/GetLandingPage.json @@ -0,0 +1,86 @@ +{ + "parameters": { + "api-version": "2.0", + "datasetid": "018fda98-e638-0edf-5ef7-28491ff3bed4", + "subscription-key": "[subscription-key]" + }, + "responses": { + "200": { + "body": { + "ontology": "Facility-2.0", + "links": [ + { + "href": "https://atlas.microsoft.com/wfs/datasets/018fda98-e638-0edf-5ef7-28491ff3bed4", + "rel": "self", + "title": "Azure Maps WFS" + }, + { + "href": "https://atlas.microsoft.com/wfs/datasets/018fda98-e638-0edf-5ef7-28491ff3bed4/api", + "rel": "service", + "title": "The API definition" + }, + { + "href": "https://atlas.microsoft.com/wfs/datasets/018fda98-e638-0edf-5ef7-28491ff3bed4/conformance", + "rel": "conformance", + "title": "WFS 3.0 conformance classes implemented by this server" + }, + { + "href": "https://atlas.microsoft.com/wfs/datasets/018fda98-e638-0edf-5ef7-28491ff3bed4/version", + "rel": "data", + "title": "The version information" + }, + { + "href": "https://atlas.microsoft.com/wfs/datasets/018fda98-e638-0edf-5ef7-28491ff3bed4/collections", + "rel": "data", + "title": "Metadata about the feature collections" + } + ] + } + }, + "400": { + "headers": {}, + "body": { + "error": { + "code": "400 BadRequest", + "message": "Bad request: one or more parameters were incorrectly specified or are mutually exclusive." + } + } + }, + "401": { + "headers": {}, + "body": { + "error": { + "code": "401 Unauthorized", + "message": "Access denied due to invalid subscription key. Make sure to provide a valid key for an active subscription." + } + } + }, + "403": { + "headers": {}, + "body": { + "error": { + "code": "403 Forbidden", + "message": "Permission, capacity, or authentication issues." + } + } + }, + "404": { + "headers": {}, + "body": { + "error": { + "code": "404 NotFound", + "message": "Not Found: the requested resource could not be found, but it may be available again in the future." + } + } + }, + "500": { + "headers": {}, + "body": { + "error": { + "code": "500 InternalServerError", + "message": "An error occurred while processing the request. Please try again later." + } + } + } + } +} diff --git a/specification/maps/data-plane/Microsoft.Maps/WFS/preview/2.0/wfs.json b/specification/maps/data-plane/Microsoft.Maps/WFS/preview/2.0/wfs.json new file mode 100644 index 000000000000..f34917a29d28 --- /dev/null +++ b/specification/maps/data-plane/Microsoft.Maps/WFS/preview/2.0/wfs.json @@ -0,0 +1,998 @@ +{ + "swagger": "2.0", + "info": { + "title": "Azure Maps Web Feature Service", + "version": "2.0", + "description": "Azure Maps Web Feature REST APIs" + }, + "host": "atlas.microsoft.com", + "schemes": [ + "https" + ], + "consumes": [], + "produces": [ + "application/json", + "application/xml" + ], + "securityDefinitions": { + "azure_auth": { + "type": "oauth2", + "authorizationUrl": "https://login.microsoftonline.com/common/oauth2/authorize", + "flow": "implicit", + "description": "These are the [Azure Active Directory OAuth2](https://docs.microsoft.com/en-us/azure/active-directory/develop/v1-overview) Flows. When paired with [Azure Role Based Access](https://docs.microsoft.com/en-us/azure/role-based-access-control/overview) control it can be used to control access to Azure Maps REST APIs. Azure Role based access controls are used to designate access to one or more Azure Maps resource account or sub-resources. Any user, group, or service principal can be granted access via a built in role or a custom role composed of one or more permissions to Azure Maps REST APIs.\n\nTo implement scenarios we recommend viewing [authentication concepts](https://aka.ms/amauth). In summary, this security definition provides a solution for modeling application(s) via objects capable of access control on specific APIs and scopes.\n\n#### Note\n* This security definition **requires** the use of the `x-ms-client-id` header to indicate which Azure Maps resource the application is requesting access to. This can be acquired from the [Maps management API](https://aka.ms/amauthdetails).\n* The `Authorization URL` is specific to the Azure public cloud instance. Sovereign clouds have unique Authorization URLs and Azure Active directory configurations. \n* The Azure role based access control is configured from the [Azure management plane](https://aka.ms/amrbac) via Azure portal, Powershell, CLI, Azure SDKs, or REST APIs.\n* Usage of the [Azure Maps Web SDK](https://aka.ms/amaadmc) allows for configuration based setup of an application for multiple use cases.\n* Currently Azure Active Directory [v1.0](https://docs.microsoft.com/en-us/azure/active-directory/develop/azure-ad-endpoint-comparison) tokens are supported.", + "scopes": { + "user_impersonation": "Impersonates a user's Azure Active Directory account." + } + }, + "apiKeyQuery": { + "type": "apiKey", + "description": "This is a shared key which is provisioned when creating an [Azure Maps resource](https://aka.ms/amauth) through the Azure management plane via Azure portal, Powershell, CLI, Azure SDKs, or REST APIs. With this key, any application is authorized to access all REST APIs. In other words, these can currently be treated as master keys to the account which they are issued for. For publicly exposed applications our recommendation is to use server to server access of Azure Maps REST APIs where this key can be securely stored.", + "name": "subscription-key", + "in": "query" + } + }, + "security": [ + { + "azure_auth": [] + }, + { + "apiKeyQuery": [] + } + ], + "responses": { + "400": { + "description": "Bad request: one or more parameters were incorrectly specified or are mutually exclusive.", + "schema": { + "$ref": "#/definitions/ODataErrorResponse" + } + }, + "401": { + "description": "Access denied due to invalid subscription key or invalid Azure Active Directory bearer token. Make sure to provide a valid key for an active Azure subscription and Maps resource. Otherwise, verify the [WWW-Authenticate](https://tools.ietf.org/html/rfc6750#section-3.1) header for error code and description of the provided AAD bearer token.", + "schema": { + "$ref": "#/definitions/ODataErrorResponse" + }, + "headers": { + "WWW-Authenticate": { + "type": "string", + "description": "Bearer realm=\"https://atlas.microsoft.com/\", error=\"invalid_token\", error_description=\"The access token expired\"" + } + } + }, + "403": { + "description": "Permission, capacity, or authentication issues.", + "schema": { + "$ref": "#/definitions/ODataErrorResponse" + } + }, + "404": { + "description": "Not Found: the requested resource could not be found, but it may be available again in the future.", + "schema": { + "$ref": "#/definitions/ODataErrorResponse" + } + }, + "500": { + "description": "An error occurred while processing the request. Please try again later.", + "schema": { + "$ref": "#/definitions/ODataErrorResponse" + } + } + }, + "parameters": { + "ClientId": { + "name": "x-ms-client-id", + "description": "Specifies which account is intended for usage in conjunction with the Azure AD security model. It represents a unique ID for the Azure Maps account and can be retrieved from Azure Maps management plane Account API. To use Azure AD security in Azure Maps see the following [articles](https://aka.ms/amauthdetails) for guidance.", + "type": "string", + "in": "header", + "required": false, + "x-ms-parameter-location": "client" + }, + "SubscriptionKey": { + "name": "subscription-key", + "description": "One of the Azure Maps keys provided from an Azure Map Account. Please refer to this [article](https://docs.microsoft.com/azure/azure-maps/how-to-manage-authentication) for details on how to manage authentication.", + "type": "string", + "in": "query", + "required": false, + "x-ms-parameter-location": "client" + }, + "ApiVersion": { + "name": "api-version", + "description": "Version number of Azure Maps API. Current version is 2.0", + "type": "string", + "in": "query", + "required": true, + "default": "2.0", + "x-ms-parameter-location": "client" + }, + "Datasetid": { + "name": "datasetid", + "type": "string", + "in": "path", + "description": "The identifier for the dataset to query from.", + "required": true, + "x-ms-parameter-location": "method" + }, + "LimitWfs": { + "name": "limit", + "in": "query", + "type": "number", + "minimum": 1, + "maximum": 50, + "default": 10, + "description": "The optional limit parameter limits the number of features that are presented in the response document.\nOnly features that are on the first level of the collection in the response document are counted. Nested objects contained within the explicitly requested features shall not be counted.\n* Minimum = 1 * Maximum = 50 * Default = 10", + "x-ms-parameter-location": "method" + }, + "Filter": { + "name": "filter", + "in": "query", + "type": "string", + "description": "Filter expression to search for features with specific property values in a given collection. Only feature properties of scalar type and equals operator are supported.\nThis is a special parameter where the parameter name is the property name. The scheme for this parameter is {property name}={property value}. Unless \"filter\" is one of the property names in the collection, \"filter\" should not be used as a parameter name. To search for features with \"name\" property value \"21N13\", use \"name=21N13\".\nMultiple filters are supported and should be represented as multiple query parameters. E.g., =&= String values are case sensitive.", + "x-ms-parameter-location": "method" + }, + "Bbox": { + "name": "bbox", + "in": "query", + "type": "string", + "description": "Only features that have a geometry that intersects the supplied bounding box are selected.\n* Lower left corner, coordinate axis 1 * Lower left corner, coordinate axis 2 * Upper right corner, coordinate axis 1 * Upper right corner, coordinate axis 2\nThe coordinate reference system of the values is WGS84 longitude/latitude (http://www.opengis.net/def/crs/OGC/1.3/CRS84) unless a different coordinate reference system is specified in the parameter `bbox-crs`.\nFor WGS84 longitude/latitude the values are in most cases the sequence of minimum longitude, minimum latitude, maximum longitude and maximum latitude. However, in cases where the box spans the antimeridian the first value (west-most box edge) is larger than the third value (east-most box edge).", + "required": false, + "x-ms-parameter-location": "method" + }, + "CollectionId": { + "name": "collectionId", + "in": "path", + "type": "string", + "required": true, + "description": "Identifier (name) of a specific collection", + "x-ms-parameter-location": "method" + }, + "FeatureId": { + "name": "featureId", + "in": "path", + "type": "string", + "description": "Local identifier of a specific feature", + "required": true, + "x-ms-parameter-location": "method" + } + }, + "paths": { + "/wfs/datasets/{datasetid}/": { + "get": { + "x-publish": true, + "description": "Creator makes it possible to develop applications based on your private indoor map data using Azure Maps API and SDK. The Web Feature Service (WFS) API is part of Creator. WFS API follows the [Open Geospatial Consortium API standard for Features](http://docs.opengeospatial.org/is/17-069r3/17-069r3.html) to query [Datasets](https://docs.microsoft.com/en-us/rest/api/maps/dataset/createpreview). \nA dataset consists of multiple feature collections. A feature collection is a collection of features of a similar type, based on a common schema.\nThe Get Landing Page API provides links to the API definition, the Conformance statements and the metadata about the feature data in this dataset.", + "operationId": "WFS_GetLandingPage", + "x-ms-examples": { + "GetLandingPage": { + "$ref": "./examples/GetLandingPage.json" + } + }, + "parameters": [ + { + "$ref": "#/parameters/ClientId" + }, + { + "$ref": "#/parameters/SubscriptionKey" + }, + { + "$ref": "#/parameters/ApiVersion" + }, + { + "$ref": "#/parameters/Datasetid" + } + ], + "responses": { + "200": { + "description": "Ok", + "schema": { + "$ref": "#/definitions/Root" + } + }, + "400": { + "$ref": "#/responses/400" + }, + "401": { + "$ref": "#/responses/401" + }, + "403": { + "$ref": "#/responses/403" + }, + "404": { + "$ref": "#/responses/404" + }, + "500": { + "$ref": "#/responses/500" + } + } + } + }, + "/wfs/datasets/{datasetid}/conformance": { + "get": { + "description": "Creator makes it possible to develop applications based on your private indoor map data using Azure Maps API and SDK. The Web Feature Service (WFS) API is part of Creator. WFS API follows the [Open Geospatial Consortium API standard for Features](http://docs.opengeospatial.org/is/17-069r3/17-069r3.html) to query [Datasets](https://docs.microsoft.com/en-us/rest/api/maps/dataset/createpreview). \nA dataset consists of multiple feature collections. A feature collection is a collection of features of a similar type, based on a common schema.\nThe Get Requirements Classes lists all requirements classes specified in the standard that the server conforms to.", + "x-publish": true, + "operationId": "WFS_GetRequirementsClasses", + "x-ms-examples": { + "GetConformance": { + "$ref": "./examples/GetConformance.json" + } + }, + "parameters": [ + { + "$ref": "#/parameters/ClientId" + }, + { + "$ref": "#/parameters/SubscriptionKey" + }, + { + "$ref": "#/parameters/ApiVersion" + }, + { + "$ref": "#/parameters/Datasetid" + } + ], + "responses": { + "200": { + "description": "Ok", + "schema": { + "$ref": "#/definitions/ReqClasses" + } + }, + "400": { + "$ref": "#/responses/400" + }, + "401": { + "$ref": "#/responses/401" + }, + "403": { + "$ref": "#/responses/403" + }, + "404": { + "$ref": "#/responses/404" + }, + "500": { + "$ref": "#/responses/500" + } + } + } + }, + "/wfs/datasets/{datasetid}/collections": { + "get": { + "description": "Creator makes it possible to develop applications based on your private indoor map data using Azure Maps API and SDK. The Web Feature Service (WFS) API is part of Creator. WFS API follows the [Open Geospatial Consortium API standard for Features](http://docs.opengeospatial.org/is/17-069r3/17-069r3.html) to query [Datasets](https://docs.microsoft.com/en-us/rest/api/maps/dataset/createpreview). \nA dataset consists of multiple feature collections. A feature collection is a collection of features of a similar type, based on a common schema.\nThe Collections Description API provides descriptions of all the collections in a given dataset.", + "operationId": "WFS_CollectionsDescription", + "x-publish": true, + "x-ms-examples": { + "GetCollections": { + "$ref": "./examples/GetCollections.json" + } + }, + "parameters": [ + { + "$ref": "#/parameters/ClientId" + }, + { + "$ref": "#/parameters/SubscriptionKey" + }, + { + "$ref": "#/parameters/ApiVersion" + }, + { + "$ref": "#/parameters/Datasetid" + } + ], + "responses": { + "200": { + "description": "Ok", + "schema": { + "$ref": "#/definitions/Content" + } + }, + "400": { + "$ref": "#/responses/400" + }, + "401": { + "$ref": "#/responses/401" + }, + "403": { + "$ref": "#/responses/403" + }, + "404": { + "$ref": "#/responses/404" + }, + "500": { + "$ref": "#/responses/500" + } + } + } + }, + "/wfs/datasets/{datasetid}/collections/{collectionId}": { + "get": { + "description": "Creator makes it possible to develop applications based on your private indoor map data using Azure Maps API and SDK. The Web Feature Service (WFS) API is part of Creator. WFS API follows the [Open Geospatial Consortium API standard for Features](http://docs.opengeospatial.org/is/17-069r3/17-069r3.html) to query [Datasets](https://docs.microsoft.com/en-us/rest/api/maps/dataset/createpreview). \nA dataset consists of multiple feature collections. A feature collection is a collection of features of a similar type, based on a common schema.\n \nThe Collection Description API provides the description of a given collection. It includes the links to the operations that can be performed on the collection.", + "operationId": "WFS_CollectionDescription", + "x-publish": true, + "x-ms-examples": { + "GetCollection": { + "$ref": "./examples/GetCollection.json" + } + }, + "parameters": [ + { + "$ref": "#/parameters/ClientId" + }, + { + "$ref": "#/parameters/SubscriptionKey" + }, + { + "$ref": "#/parameters/ApiVersion" + }, + { + "$ref": "#/parameters/Datasetid" + }, + { + "$ref": "#/parameters/CollectionId" + } + ], + "responses": { + "200": { + "description": "Ok", + "schema": { + "$ref": "#/definitions/CollectionInfo" + } + }, + "400": { + "$ref": "#/responses/400" + }, + "401": { + "$ref": "#/responses/401" + }, + "403": { + "$ref": "#/responses/403" + }, + "404": { + "$ref": "#/responses/404" + }, + "500": { + "$ref": "#/responses/500" + } + } + } + }, + "/wfs/datasets/{datasetid}/collections/{collectionId}/definition": { + "get": { + "description": "Creator makes it possible to develop applications based on your private indoor map data using Azure Maps API and SDK. The Web Feature Service (WFS) API is part of Creator. WFS API follows the [Open Geospatial Consortium API standard for Features](http://docs.opengeospatial.org/is/17-069r3/17-069r3.html) to query [Datasets](https://docs.microsoft.com/en-us/rest/api/maps/dataset/createpreview). \nA dataset consists of multiple feature collections. A feature collection is a collection of features of a similar type, based on a common schema.\n \nThe Collection Definition API provides the detailed data model of a given collection.", + "operationId": "WFS_CollectionDefinition", + "x-publish": true, + "x-ms-examples": { + "GetCollectionDefinition": { + "$ref": "./examples/GetCollectionDefinition.json" + } + }, + "parameters": [ + { + "$ref": "#/parameters/ClientId" + }, + { + "$ref": "#/parameters/SubscriptionKey" + }, + { + "$ref": "#/parameters/ApiVersion" + }, + { + "$ref": "#/parameters/Datasetid" + }, + { + "$ref": "#/parameters/CollectionId" + } + ], + "responses": { + "200": { + "description": "Ok", + "schema": { + "$ref": "#/definitions/CollectionDefinition" + } + }, + "400": { + "$ref": "#/responses/400" + }, + "401": { + "$ref": "#/responses/401" + }, + "403": { + "$ref": "#/responses/403" + }, + "404": { + "$ref": "#/responses/404" + }, + "500": { + "$ref": "#/responses/500" + } + } + } + }, + "/wfs/datasets/{datasetid}/collections/{collectionId}/items": { + "get": { + "description": "Creator makes it possible to develop applications based on your private indoor map data using Azure Maps API and SDK. The Web Feature Service (WFS) API is part of Creator. WFS API follows the [Open Geospatial Consortium API standard for Features](http://docs.opengeospatial.org/is/17-069r3/17-069r3.html) to query [Datasets](https://docs.microsoft.com/en-us/rest/api/maps/dataset/createpreview). \nA dataset consists of multiple feature collections. A feature collection is a collection of features of a similar type, based on a common schema.\nThe Get Features API returns the list of features in the given collection.", + "operationId": "WFS_GetFeatures", + "x-publish": true, + "x-ms-examples": { + "Getitems": { + "$ref": "./examples/GetItems.json" + } + }, + "parameters": [ + { + "$ref": "#/parameters/ClientId" + }, + { + "$ref": "#/parameters/SubscriptionKey" + }, + { + "$ref": "#/parameters/ApiVersion" + }, + { + "$ref": "#/parameters/Datasetid" + }, + { + "$ref": "#/parameters/CollectionId" + }, + { + "$ref": "#/parameters/LimitWfs" + }, + { + "$ref": "#/parameters/Bbox" + }, + { + "$ref": "#/parameters/Filter" + } + ], + "responses": { + "200": { + "description": "Ok", + "schema": { + "$ref": "#/definitions/FeatureCollectionGeoJSON" + } + }, + "400": { + "$ref": "#/responses/400" + }, + "401": { + "$ref": "#/responses/401" + }, + "403": { + "$ref": "#/responses/403" + }, + "404": { + "$ref": "#/responses/404" + }, + "500": { + "$ref": "#/responses/500" + } + } + } + }, + "/wfs/datasets/{datasetid}/collections/{collectionId}/items/{featureId}": { + "get": { + "description": "Creator makes it possible to develop applications based on your private indoor map data using Azure Maps API and SDK. The Web Feature Service (WFS) API is part of Creator. WFS API follows the [Open Geospatial Consortium API standard for Features](http://docs.opengeospatial.org/is/17-069r3/17-069r3.html) to query [Datasets](https://docs.microsoft.com/en-us/rest/api/maps/dataset/createpreview). \nA dataset consists of multiple feature collections. A feature collection is a collection of features of a similar type, based on a common schema.\nThe Get Feature API returns the feature identified by the provided id in the given collection.", + "x-publish": true, + "operationId": "WFS_GetFeature", + "x-ms-examples": { + "GetFeature": { + "$ref": "./examples/GetItem.json" + } + }, + "parameters": [ + { + "$ref": "#/parameters/SubscriptionKey" + }, + { + "$ref": "#/parameters/ApiVersion" + }, + { + "$ref": "#/parameters/Datasetid" + }, + { + "$ref": "#/parameters/CollectionId" + }, + { + "$ref": "#/parameters/FeatureId" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/Feature" + } + }, + "400": { + "$ref": "#/responses/400" + }, + "401": { + "$ref": "#/responses/401" + }, + "403": { + "$ref": "#/responses/403" + }, + "404": { + "$ref": "#/responses/404" + }, + "500": { + "$ref": "#/responses/500" + } + } + }, + "delete": { + "description": "Creator makes it possible to develop applications based on your private indoor map data using Azure Maps API and SDK. The Web Feature Service (WFS) API is part of Creator. WFS API follows the [Open Geospatial Consortium API standard for Features](http://docs.opengeospatial.org/is/17-069r3/17-069r3.html) to query [Datasets](https://docs.microsoft.com/en-us/rest/api/maps/dataset/createpreview). \nA dataset consists of multiple feature collections. A feature collection is a collection of features of a similar type, based on a common schema.\nThe Delete Feature API deletes the feature identified by the provided id in the given collection. At this point this API supports only facility features. Deleting a facility feature deletes all the child features of that facility recursively.", + "x-publish": true, + "operationId": "WFS_DeleteFeature", + "x-ms-examples": { + "GetFeature": { + "$ref": "./examples/DeleteItem.json" + } + }, + "parameters": [ + { + "$ref": "#/parameters/SubscriptionKey" + }, + { + "$ref": "#/parameters/ApiVersion" + }, + { + "$ref": "#/parameters/Datasetid" + }, + { + "$ref": "#/parameters/CollectionId" + }, + { + "$ref": "#/parameters/FeatureId" + } + ], + "responses": { + "204": { + "description": "Feature Deleted." + }, + "400": { + "$ref": "#/responses/400" + }, + "401": { + "$ref": "#/responses/401" + }, + "403": { + "$ref": "#/responses/403" + }, + "404": { + "$ref": "#/responses/404" + }, + "500": { + "$ref": "#/responses/500" + } + } + } + } + }, + "definitions": { + "ODataErrorResponse": { + "type": "object", + "description": "This response object is returned when an error occurs in the Maps API.", + "properties": { + "error": { + "$ref": "#/definitions/ODataError" + } + } + }, + "ODataError": { + "type": "object", + "description": "This object is returned when an error occurs in the Maps API.", + "properties": { + "code": { + "type": "string", + "readOnly": true, + "description": "The ODataError code." + }, + "message": { + "type": "string", + "readOnly": true, + "description": "If available, a human readable description of the error." + }, + "details": { + "type": "array", + "items": { + "$ref": "#/definitions/ODataError" + } + }, + "target": { + "type": "string", + "readOnly": true, + "description": "If available, the target causing the error." + } + } + }, + "Exception": { + "type": "object", + "required": [ + "code" + ], + "properties": { + "code": { + "type": "string" + }, + "description": { + "type": "string" + } + } + }, + "Root": { + "type": "object", + "required": [ + "links" + ], + "properties": { + "ontology": { + "$ref": "#/definitions/Ontology" + }, + "links": { + "type": "array", + "items": { + "$ref": "#/definitions/Link" + } + } + } + }, + "ReqClasses": { + "type": "object", + "required": [ + "conformsTo" + ], + "properties": { + "conformsTo": { + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "http://www.opengis.net/spec/wfs-1/3.0/req/core", + "http://www.opengis.net/spec/wfs-1/3.0/req/oas30", + "http://www.opengis.net/spec/wfs-1/3.0/req/html", + "http://www.opengis.net/spec/wfs-1/3.0/req/geojson" + ] + } + } + }, + "Link": { + "description": "Links to other WFS endpoints", + "type": "object", + "required": [ + "href" + ], + "properties": { + "href": { + "type": "string" + }, + "rel": { + "type": "string", + "example": "prev" + }, + "type": { + "type": "string", + "example": "application/geo+json" + }, + "hreflang": { + "type": "string", + "example": "en" + }, + "title": { + "type": "string" + } + } + }, + "Content": { + "type": "object", + "required": [ + "links", + "collections" + ], + "properties": { + "ontology": { + "$ref": "#/definitions/Ontology" + }, + "links": { + "type": "array", + "items": { + "$ref": "#/definitions/Link" + }, + "example": [ + { + "href": "http://data.example.org/collections.json", + "rel": "self", + "type": "application/json", + "title": "this document" + }, + { + "href": "http://data.example.org/collections.html", + "rel": "alternate", + "type": "text/html", + "title": "this document as HTML" + }, + { + "href": "http://schemas.example.org/1.0/foobar.xsd", + "rel": "describedBy", + "type": "application/xml", + "title": "XML schema for Acme Corporation data" + } + ] + }, + "collections": { + "type": "array", + "items": { + "$ref": "#/definitions/CollectionInfo" + } + } + } + }, + "Version": { + "type": "object", + "required": [ + "version", + "revisionTimestamp", + "links" + ], + "properties": { + "version": { + "description": "version number of the dataset", + "type": "string", + "example": "1.0.0" + }, + "revisionTimestamp": { + "description": "timestamp of the revision", + "type": "string", + "example": "2020-01-02T03:04:05" + }, + "links": { + "type": "array", + "items": { + "$ref": "#/definitions/Link" + }, + "example": [ + { + "href": "http://data.example.org/collections.json", + "rel": "self", + "type": "application/json", + "title": "this document" + }, + { + "href": "http://data.example.org/collections.html", + "rel": "alternate", + "type": "text/html", + "title": "this document as HTML" + }, + { + "href": "http://schemas.example.org/1.0/foobar.xsd", + "rel": "describedBy", + "type": "application/xml", + "title": "XML schema for Acme Corporation data" + } + ] + } + } + }, + "CollectionInfo": { + "type": "object", + "required": [ + "name", + "links" + ], + "properties": { + "name": { + "description": "identifier of the collection used, for example, in URIs", + "type": "string", + "example": "buildings" + }, + "title": { + "description": "human readable title of the collection", + "type": "string", + "example": "Buildings" + }, + "ontology": { + "$ref": "#/definitions/Ontology" + }, + "description": { + "description": "a description of the features in the collection", + "type": "string", + "example": "Buildings in the city of Bonn." + }, + "links": { + "type": "array", + "items": { + "$ref": "#/definitions/Link" + }, + "example": [ + { + "href": "http://data.example.org/collections/buildings/items", + "rel": "item", + "type": "application/geo+json", + "title": "Buildings" + }, + { + "href": "http://example.org/concepts/building.html", + "rel": "describedBy", + "type": "text/html", + "title": "Feature catalogue for buildings" + } + ] + } + } + }, + "CollectionDefinition": { + "description": "collection of GeoJSON features", + "type": "object", + "required": [ + "idPrefix", + "name", + "geometryType", + "featureTypes" + ], + "properties": { + "description": { + "description": "describes the collection", + "type": "string" + }, + "idPrefix": { + "description": "prefix of the collection used", + "type": "string", + "example": "BLD" + }, + "name": { + "description": "identifier of the collection used, for example, in URIs", + "type": "string", + "example": "buildings" + }, + "title": { + "description": "title of collection", + "type": "string", + "example": "Feature Class buildings" + }, + "ontology": { + "$ref": "#/definitions/Ontology" + }, + "geometryType": { + "description": "type of geometry returned", + "type": "string", + "enum": [ + "Point", + "MultiPoint", + "LineString", + "MultiLineString", + "Polygon", + "MultiPolygon", + "GeometryCollection" + ] + }, + "featureTypes": { + "description": "type of features returned", + "type": "array", + "items": { + "type": "string" + } + }, + "properties": { + "description": "attributes of the collection used", + "type": "array", + "items": { + "$ref": "#/definitions/DefinitionProperties" + } + }, + "links": { + "type": "array", + "items": { + "$ref": "#/definitions/Link" + } + } + } + }, + "DefinitionProperties": { + "type": "object", + "required": [ + "name", + "required", + "type" + ], + "properties": { + "name": { + "description": "name of attribute", + "type": "string", + "example": "external_id" + }, + "required": { + "description": "is attribute required", + "type": "boolean" + }, + "type": { + "description": "type of attribute", + "type": "object" + } + } + }, + "FeatureCollectionGeoJSON": { + "type": "object", + "required": [ + "type", + "features" + ], + "properties": { + "type": { + "type": "string" + }, + "ontology": { + "$ref": "#/definitions/Ontology" + }, + "numberReturned": { + "type": "integer" + }, + "features": { + "type": "array", + "items": { + "$ref": "#/definitions/FeatureGeoJSON" + } + }, + "links": { + "type": "array", + "items": { + "$ref": "#/definitions/Link" + } + } + } + }, + "Feature": { + "type": "object", + "required": [ + "feature" + ], + "properties": { + "ontology": { + "$ref": "#/definitions/Ontology" + }, + "feature": { + "$ref": "#/definitions/FeatureGeoJSON" + }, + "links": { + "type": "array", + "items": { + "$ref": "#/definitions/Link" + } + } + } + }, + "FeatureGeoJSON": { + "description": "GeoJSON Feature", + "type": "object", + "required": [ + "type", + "geometry", + "properties" + ], + "properties": { + "type": { + "description": "feature", + "type": "string" + }, + "geometry": { + "description": "This represents the geometry for one or more geographical features (parks, state boundary etc.) and should be a `GeoJSON` compliant type. Please refer to [RFC 7946](https://tools.ietf.org/html/rfc7946) for details.", + "type": "object" + }, + "properties": { + "description": "Additional properties of the feature.", + "type": "object" + }, + "id": { + "description": "Identifier for the feature.", + "type": "string" + }, + "featureType": { + "description": "The type of the feature. The value depends on the data model the current feature is part of. Some data models may have an empty value.", + "type": "string" + } + } + }, + "Ontology": { + "type": "string", + "description": "The ontology version of this dataset.", + "readOnly": true + } + } +} diff --git a/specification/maps/data-plane/readme.md b/specification/maps/data-plane/readme.md index 28df36208f0c..cd93b9d99169 100644 --- a/specification/maps/data-plane/readme.md +++ b/specification/maps/data-plane/readme.md @@ -27,7 +27,7 @@ These are the global settings for MapsClient. ``` yaml title: MapsClient openapi-type: data-plane -tag: package-1.0-preview +tag: package-preview-2.0 ``` ### Suppression @@ -40,6 +40,33 @@ directive: ``` + +### Tag: package-preview-2.0 + +These settings apply only when `--tag=package-preview-2.0` is specified on the command line. + +```yaml $(tag) == 'package-preview-2.0' +input-file: + - Microsoft.Maps/Alias/preview/2.0/alias.json + - Microsoft.Maps/Data/preview/2.0/data.json + - Microsoft.Maps/Dataset/preview/2.0/dataset.json + - Microsoft.Maps/DEM/preview/1.0/elevation.json + - Microsoft.Maps/DwgConversion/preview/2.0/dwgconversion.json + - Microsoft.Maps/FeatureState/preview/2.0/featurestate.json + - Microsoft.Maps/Feedback/preview/1.0/feedback.json + - Microsoft.Maps/Geolocation/preview/1.0/geolocation.json + - Microsoft.Maps/Mobility/preview/1.0/mobility.json + - Microsoft.Maps/Render/preview/1.0/render.json + - Microsoft.Maps/Render/preview/2.0/render.json + - Microsoft.Maps/Route/preview/1.0/route.json + - Microsoft.Maps/Search/preview/1.0/search.json + - Microsoft.Maps/Spatial/preview/1.0/spatial.json + - Microsoft.Maps/Tileset/preview/2.0/tileset.json + - Microsoft.Maps/Timezone/preview/1.0/timezone.json + - Microsoft.Maps/Traffic/preview/1.0/traffic.json + - Microsoft.Maps/Weather/preview/1.0/weather.json + - Microsoft.Maps/WFS/preview/2.0/wfs.json +``` ### Tag: package-1.0-preview These settings apply only when `--tag=package-1.0-preview` is specified on the command line.