From e8bca9ebd5afdac342ccc31090e3d86d57abaa5c Mon Sep 17 00:00:00 2001 From: Dhivakar Asokan <48990091+dhivakar-asokan@users.noreply.github.com> Date: Thu, 21 May 2020 20:29:31 +0530 Subject: [PATCH 01/22] Delete APIGatewayAdministration.json --- .../APIGatewayAdministration.json | 7552 ----------------- 1 file changed, 7552 deletions(-) delete mode 100644 apigatewayservices/APIGatewayAdministration.json diff --git a/apigatewayservices/APIGatewayAdministration.json b/apigatewayservices/APIGatewayAdministration.json deleted file mode 100644 index c4dd9a0..0000000 --- a/apigatewayservices/APIGatewayAdministration.json +++ /dev/null @@ -1,7552 +0,0 @@ -{ - "swagger" : "2.0", - "info" : { - "description" : "API Gateway Administration Service provides interface for you to administer various functions of the API Gateway. The user needs to have different functional privileges to administer different functions. For example, in order to manage runtime transactions data of the API Gateway, the user needs to have 'Manage purge and restore runtime events' privilege. By default, the users who are part of API-Gateway-Administrators group will have all privileges. \n\nFollowing Administration functions are exposed using this API. \n\n1. Manage data- Archive, Purge and Restore API Gateway runtime events, audit logs & metrics data. \n\nThis function lets the users manage the API Gateway runtime events, audit logs & metrics data. \n\nAPI Gateway generates different types of events in the runtime depending on the state of the API invocation. For example, an error event is generated when API Gateway encounters an error while processing the API request or the response. API Metrics is an aggregated data computed from the different events that happen in the system. These metrics provides information about the key performance indicators of an API like its \"Availability\", \"Fault Count\" etc which are useful for monitoring & governing the service performance and service level agreements. The API providers has a variety of options to choose from for storing these events and metrics. By default, API Gateway store will be used for storing this data. Here are some details about different type of events.\n\nTransactional event: Provides a summary (request & response) of each runtime transaction in the system. It is generated when a Log Invocation policy is included for the API. For example, if an API has this policy attached to it, then for every invoke the system generates a transaction event. \n\nError event: Provides details of an error that occurred during an API invoke. This event is generated whenever there is an error in the system during a runtime service invocation. \n\nMonitoring event: This event is generated based on the parameters configured in the API monitoring policies such as Monitor Service Level Agreements, Throttling etc. Monitoring could be done based on various parameters such as Total Request Count, Total Success Count, Response Time, Availability. Monitoring can be done at the consumer application level too so that each consumer can be tracked individually. \n \nPolicy violation event: Provides a summary of the policy violations that occurred in the system. When a policy attached to an API is violated, the system generates the policy violation event.\n\nLifeCycle event: Provides a summary of the life cycle of the API Gateway instance. Whenever the instance is started or stopped, a life cycle notification is generated.\n\nThreat protection events: Provides a summary of the threat protection filter and rule violations. When a filter or rule is violated, the system generates the threat protection violation event. \n\nThe Audit logging of API Gateway provides audit information for different categories of system transactions, events, and occurrences of specific events (for example, login attempts) over a period of time. You can use audit logs to view a detailed record of various auditable events that occurred on the API Gateway objects, user login and logout operations, and identify the users who are responsible for the changes. You can configure which audit events to log for a specific destination based on your auditing requirements.You can configure API Gateway to log the auditable events for following destinations:\nAPI Gateway\nDatabase\nDigital Event Services (DES)\nElasticsearch. \n\nThe following auditable events can be configured to write to the API Gateway audit logs:\n Access profile management events: Creation, modification, and deletion of an Access profile object. \n Alias management events: Creation, modification, and deletion of an Alias object. \n Analytics management events: Archiving, purging, and restoring of analytics data in the database. \n API management events: Creation, modification, deletion, activation and deactivation of an API object. \n Application management events: Creation, modification, and deletion of an Application object. \n Approval management events: Approval and rejection of a request to create, register, and modify an application. Approval and rejection of a request to subscribe a package in API Portal.\n Group management events: Creation, modification, and deletion of a Group object.\n Package management events: Creation, modification, and deletion of a Package object.\n Plan management events: Creation, modification, and deletion of a Plan object.\n Policy management: Creation, modification, and deletion of a global Policy object.Creation, modification, and deletion of an API level Policy object.Activation and deactivation of a global policy.\n Activation and deactivation of an API level policy.\n Promotion management events: Creation, modification, and deletion of a Stage object.Promotion of an API stage.Rollback operation of an API stage.\n User management events: A user logs in or fails to log in to API Gateway.A user logs out of API Gateway.Creation, modification, and deletion of a User object.\n\nManaging the Events/Audit logs/Metrics Data\n\nPurge: The process of systematically deleting unwanted data from the database is called purging. You can purge events, audit logs and metrics from the API Gateway store by setting the required date or duration in the API Gateway. You must have the required functional privileges to purge the API analytics data.\n\nArchive: Moving data that is no longer actively used for long-term retention so that it can be used at a later time is called archiving. You can archive events, audit logs and metrics by setting the required date or duration per tenant in the API Gateway. You must have the required functional privileges to archive events, audit logs and metrics.\n\nRestore: You can restore the archived data as required. \n\n\n2.Transaction based license: \n\nAPI Gateway supports core as well as transaction-based licensing model. When API Gateway uses a transaction-based licensing model, then each service invocation is considered as a transaction and API Gateway keeps a track of these transactions. API Gateway transactions for the current month are compared with the maximum number of transactions allowed in a month.When the usage breaches, notification will be generated for the current month. Apart from this if the user wants to generate notifications before usage breach itself when usage reaches to some x% like 70% or 80% then the user has to add notification criteria at 70% or 80%. By default API Gateway will have two default notification criteria's at 90%, 100%.\n\n\n3.Destination configuration: \n\nAPI Gateway can publish events and performance metrics data to the configured destinations. You must have the API Gateway's manage destination configurations functional privilege assigned to configure the following destinations to which the event types and performance metrics data is published:\nAPI Gateway\nAPI Portal\nTransaction logger\nCentraSite\nDatabase\nDigital Events\nElasticsearch\nEmail\nSNMP \n\n\n4.Default API fault configuration: \n\n API provider can configure a global error handling behaviour. In case of the native service error, the provider may choose to either forward the native error as is or can choose to modify the error response. In case the provider chooses to provide a custom error response, he/she can use the default error template containing standard aliases. These alias values will be replaced with the request specific information before the response is sent to the client. The standard aliases like the error message, service, operation, date/time, IP address, user and consumer application can be used in the template. The custom error response configuration is applicable for the errors thrown by API Gateway also.\n\n\n5.Custom assertions: \n\nCustom assertions allow the API providers to extend and provide additional security policies that are not available by default in API Gateway. Kindly refer to Policy swagger documentation for information about these configurations. \n\n\n6.SAML Issuer: \n\nIf a native API is enforced with the SAML policy, API Gateway uses this configuration to communicate to STS (Security Token Service) to retrieve the SAMl token. This is internally stored as an alias, kindly refer Alias Swagger documentation for information about these configurations.\n\n\n7.OAuth 2.0: \n\nAPI Gateway allows the API provider to configure any 3rd party OAuth2 Authorization server. In this case API Gateway acts as Resource server. Use can refer to Alias Swagger documentation for information about configuring external Authorization server.\n\n\n8.OpenID Provider: \n\nAPI Gateway allows the API provider to configure any OpenID provider. In this case API Gateway acts as Relying Party. You can refer to Alias Swagger documentation for information about configuring OpenID provider.\n\n9. Approval \n\nAPI Gateway allows you to configure approvals for: \n\t- Create application: To enforce approvals for creating an application in API Gateway.\n\t- Register application: To enforce approvals for associating an application with APIs.\n\t- Update application: To enforce approvals for modifying an application.\n\t- Subscribe package: To enforce approvals in API Gateway to enable API Portal consumers for subscribing a package to a plan in API Portal.\n\nIn API Gateway, you can create an application and associate (register) the application created with APIs. If you have the API Gateway's manage general administration configurations functional privilege assigned, you can configure approvals for creating or registering an application. If you have configured approvers, and if a user wants to create and register an application in API Gateway, then the application is created and registered with an API only if any one approver from the approvers group approves the create application and the register application requests. Similarly, you can configure approvals for updating an application or subscribing a package.\n\n10. Load Balancer \n\nIf you cluster API Gateway instances, you must configure API Gateway with the load balancer URL. This is the URL to which the consumer applications sends the requests to. Also this URL will be used to generate the API endpoint during activation.\n\n11. API Portal Configuration Management \n\n This API is used for managing API Portal configurations in API Gateway.\n\nThe API Provider can define APIs in API Gateway, secure and monitor them and then may choose to publish these APIs to the API Portal. API Portal enables an organization to securely expose APIs to external developers, partners, and other consumers for use in building their own applications.\n\nAny user with 'Manage Destinations' functional privilege can configure API Portal connection in API Gateway. APIs/Packages can be published from API Gateway to API Portal if and only if the API Portal configuration changes are done successfully.\n\n12. URL Alias Management\n\nAPI Gateway provides support for managing URL Aliases. A URL Alias is used to substitute a specific path of a HTTP/HTTPS endpoint of an API in API Gateway. URL Aliases allow for a level of indirection and helps to mask or shorten the API endpoint so that the actual endpoint can be subject to changes without having to affect the end consumers of the API. You need to have the Manage general administration configurations functional privilege inorder to manage URL Aliases in API Gateway.\n\n13. Outbound Proxy Management\n\nDefine proxy server aliases in API Gateway to route outbound requests from API Gateway through proxy servers. This is useful if the API Gateway is behind a firewall and outbound requests are sent to remote servers located outside the firewall. Outbound proxies are supported for the following types of protocols: HTTP, HTTPS, FTP and SOCKS. You need to have the Manage general administration configurations functional privilege inorder to manage outbound proxies in API Gateway.\n\n14. Kerberos Settings\n\nAPI Gateway provides support for Kerberos authentication for inbound and outbound service requests. Kerberos is an authentication protocol that uses symmetric encryption and a trusted third party system to validate the identity of clients. You need to have the Manage security configurations functional privilege inorder to configure Kerberos settings in API Gateway.\n\n15. Keystore Management\n\nAPI Gateway uses keystores to store SSL certificates and private keys. A keystore file contains one or more pairs of a private key and signed certificate for its corresponding public key. The keystore should be strongly protected with a password. You need to have the Manage security configurations functional privilege inorder to manage keystores in API Gateway.\n\n16. Truststore Management\n\nAPI Gateway uses truststores to manage the public keys for the signing Certificate Authoritites (CAs) for clients and partners. These are identified using aliases during any form of SSL authentication performed by API Gateway. You need to have the Manage security configurations functional privilege inorder to manage truststores in API Gateway.\n\n17. Configure Whitelisted IPs\n\nServer side request forgery is a vulnerability which allows an attacker to force a vulnerable application to issue malicious requests to third-party servers and or internal resources.The remote API importing functionallity allows specifying an URL which contains the API specification, this URL is not properly sanitized and allows to issue arbitrary requests to any service, including ones inside the internal network or on the local host. An attacker can exploit this issue to attack other internal and external services.\n\nTo solve this SSRF issue, API Gateway implemented a filter for URL which would disallow users to use IPs or hosts that resolve to internal network IP ranges and this filter included the following IP ranges: \n127.0.0.1 \n10.0.0.0/8 \n172.16.0.0/12 \n192.168.0.0/16\n\nTo provide a way to customers to allow API creation from internal IP addresses/hostnames, this rest resource introduces a configuration with whitelisting of IP addresses we have to pull resources from.\n\n18.Master Password Management\n\nAPI Gateway handles many secure strings as part of its normal operations. It protects these secure keys by encrypting them using Password-Based Encryption (PBE) technology, also known as PKCS5. This encryption method requires the use of an encryption key or master password that you specify.API Gateway provides a default master password and this can be changed at any point of time.\n\nFor greater security there is an expiration interval associated with the master password which is the duration after which the master password would expire. Customers can change this master password periodically. In case if the master password is lost, the same can be reset to the default value and it can be changed later to a secure value.\n\n19.Log Aggregation: \n\nAPI Gateway collects and stores logs from different sources such as API Gateway server logs, API Gateway UI logs, Internal Data Store logs, dashboard logs and platform logs. Each type of logged data comes from different components. API Gateway provides an easy way of configuring log settings to collate the logs from different sources at a single place in a common format. You also have an option to download these logs as an archive. This provides an easy access to logs collected from different sources when you have to look into the logs to troubleshoot any issues, such as error or performance problems.\n\n\n20.Service Registry: \n\nA service registry is essentially a catalog of services. API Gateway allows Administrators to configure service registries. API Gateway supports ServiceConsul and Eureka service registries. Both client side discovery and server side discovery of Service Registry are supported by API Gateway. You can refer to Alias Swagger documentation for information about configuring Service Registries. Also refer to API Gateway Service Management Swagger documentation for information about how to register/deregister API Gateway APIs to/from Service Registries..\n\n\n21.Clustering : \n\nA Clustering is an advanced feature that substantially extends the reliability, availability, and scalability of APIGateway. Clustering accomplishes this by providing the infrastructure and tools to use multiple APIGateway as if they were a single virtual server and to deliver applications that leverage that architecture.\n\n\n22.JMS Configuration Management\r\n\r\nAPI Gateway provides support for JMS and message protocols like AMQP, any REST or SOAP API can be exposed over JMS/AMQP and vice-versa. \r\nBy exposing an API over JMS we can achieve Interoperability in asychronous way across the Java platforms. By exposing an API over AMQP we can achieve Interoperability in asychronous way across multiple languages and platforms.\r\nAPI Gateway uses JMS configurations like JNDI, JMS Connection, Web service Provider/Consumer aliases, JMS Trigger to expose the APIs over JMS/AMQP.\r\n\r\nTo Expose the APIs over JMS/AMQP, \r\n a) First, we need to create the JNDI \r\n b) Create a JMS connection using the above created JNDI\r\n\t -We can use this JMS connection alias to expose our REST APIs over JMS/AMQP and vice-versa\r\n In case of SOAP \t\t\r\n c) Create Web service Provider endpoint to expose our SOAP APIs over JMS/AMQP\r\n d) Create Web service Consumer endpoint to expose our existing Message queue/topic over SOAP\t \r\n\t \r\nYou need to have the Manage General Administration functional privilege inorder to configure JMS in API Gateway.\n\n\n23.AWS configuration: \n\nThis holds AWS instance configuration details. This can be used in any custom policies for invoking a lambda service running in any AWS cloud instance.\n\n\n24.Rule Management (REST resource '/rule')\r\n\r\nRules are defined by specifying one or more asset based conditions, and by configuring the rule output if the conditions are met.\r\nThis API can be used to create, retrieve, update or delete a rule.\r\nWhen Teamwork feature is enabled, Global Team Assignment rules can be defined to automate the team assignment for the assets.\n\n\n25.Proxy Bypass (REST resource '/is/proxyBypass')\r\n\r\nIf you are using a proxy server for outbound HTTP, HTTPS requests, you can optionally route selected requests directly to their targets, bypassing the proxy. To do this, the User who has manage general administration priviliege can define a list of domains to which you want APIGateway Server to issue requests directly..\n\n\n26.Integration servers: \n\nThis holds webMethods Integration Server accounts details. This configuration will be used to create connection to the integration server when publishing APIs to an integration server for implementing the API. You can refer to API Gateway Alias Swagger documentation for information about configuring Integration Server accounts. Also refer to API Gateway Service Management Swagger documentation for information about how to publish API Gateway APIs to/from Integration servers..", - "version" : "10.7", - "title" : "API Gateway Administration Service" - }, - "host" : "localhost:5555", - "basePath" : "/rest/apigateway", - "schemes" : [ "http" ], - "consumes" : [ "application/json" ], - "produces" : [ "application/json" ], - "paths" : { - "/is/webServiceEndpoints" : { - "get" : { - "description" : "The method retrieves list of all Webservice endpoints in API Gateway.", - "operationId" : "getAllWebserviceEndpoints", - "consumes" : [ "application/json" ], - "produces" : [ "application/json" ], - "parameters" : [ ], - "responses" : { - "200" : { - "description" : "This status code indicates that the list of Webservice endpoints is successfully retrieved.", - "examples" : { - "application/json" : "{\r\n \"WebserviceEndpointAlias\": [\r\n {\r\n \"id\": \"c00222\",\r\n \"alias\": \"c00222\",\r\n \"description\": \"des\",\r\n \"aliasType\": \"CONSUMER\",\r\n \"transportType\": \"JMS\",\r\n \"keyStoreAlias\": \"DEFAULT_IS_KEYSTORE\",\r\n \"keyAlias\": \"ssos\",\r\n \"trustStoreAlias\": \"DEFAULT_IS_TRUSTSTORE\",\r\n \"timestampPrecisionInMillis\": \"false\",\r\n \"timestampTimeToLive\": \"123\",\r\n \"timestampMaximumSkew\": \"1234\",\r\n \"executeACL\": \"Default\",\r\n \"jmsAliasType\": \"JMS\",\r\n \"jndiProvAlias\": \"\",\r\n \"connFactoryName\": \"qpidConnectionFactory\",\r\n \"jmsConnAlias\": \"JMS_CONN\",\r\n \"user\": \"user\",\r\n \"password\": \"password\"\r\n },\r\n {\r\n \"id\": \"c0022\",\r\n \"alias\": \"c0022\",\r\n \"description\": \"des\",\r\n \"aliasType\": \"CONSUMER\",\r\n \"transportType\": \"JMS\",\r\n \"keyStoreAlias\": \"DEFAULT_IS_KEYSTORE\",\r\n \"keyAlias\": \"ssos\",\r\n \"trustStoreAlias\": \"DEFAULT_IS_TRUSTSTORE\",\r\n \"timestampPrecisionInMillis\": \"false\",\r\n \"timestampTimeToLive\": \"123\",\r\n \"timestampMaximumSkew\": \"1234\",\r\n \"executeACL\": \"Default\",\r\n \"jmsAliasType\": \"JMS\",\r\n \"jndiProvAlias\": \"\",\r\n \"connFactoryName\": \"qpidConnectionFactory\",\r\n \"jmsConnAlias\": \"JMS_CONN\",\r\n \"user\": \"user\",\r\n \"password\": \"password\"\r\n },\r\n {\r\n \"id\": \"AMQP_PROVIDER_ALIAS\",\r\n \"alias\": \"AMQP_PROVIDER_ALIAS\",\r\n \"description\": \"AMQP_PROVIDER_ALIAS\",\r\n \"aliasType\": \"PROVIDER\",\r\n \"transportType\": \"JMS\",\r\n \"keyStoreAlias\": \"\",\r\n \"keyAlias\": \"\",\r\n \"trustStoreAlias\": \"\",\r\n \"timestampPrecisionInMillis\": \"\",\r\n \"timestampTimeToLive\": \"\",\r\n \"timestampMaximumSkew\": \"\",\r\n \"jmsTriggerName\": \"wm.namespace.ws:wseTrigger_\",\r\n \"deliveryMode\": \"\",\r\n \"timeToLive\": 0,\r\n \"priority\": 0,\r\n \"replyToDestType\": \"\",\r\n \"includeConnFactoryName\": \"true\"\r\n },\r\n {\r\n \"id\": \"c0021272\",\r\n \"alias\": \"c0021272\",\r\n \"description\": \"des\",\r\n \"aliasType\": \"CONSUMER\",\r\n \"transportType\": \"JMS\",\r\n \"keyStoreAlias\": \"DEFAULT_IS_KEYSTORE\",\r\n \"keyAlias\": \"ssos\",\r\n \"trustStoreAlias\": \"DEFAULT_IS_TRUSTSTORE\",\r\n \"timestampPrecisionInMillis\": \"false\",\r\n \"timestampTimeToLive\": \"123\",\r\n \"timestampMaximumSkew\": \"1234\",\r\n \"executeACL\": \"Default\",\r\n \"jmsAliasType\": \"JMS\",\r\n \"jndiProvAlias\": \"\",\r\n \"connFactoryName\": \"qpidConnectionFactory\",\r\n \"jmsConnAlias\": \"JMS_CONN\",\r\n \"user\": \"user\",\r\n \"password\": \"password\"\r\n },\r\n {\r\n \"id\": \"c002\",\r\n \"alias\": \"c002\",\r\n \"description\": \"des\",\r\n \"aliasType\": \"CONSUMER\",\r\n \"transportType\": \"JMS\",\r\n \"keyStoreAlias\": \"DEFAULT_IS_KEYSTORE\",\r\n \"keyAlias\": \"ssos\",\r\n \"trustStoreAlias\": \"DEFAULT_IS_TRUSTSTORE\",\r\n \"timestampPrecisionInMillis\": \"false\",\r\n \"timestampTimeToLive\": \"123\",\r\n \"timestampMaximumSkew\": \"1234\",\r\n \"executeACL\": \"Default\",\r\n \"jmsAliasType\": \"JNDI\",\r\n \"jndiProvAlias\": \"JNDI_AMQP\",\r\n \"connFactoryName\": \"qpidConnectionFactory\",\r\n \"jmsConnAlias\": \"\",\r\n \"user\": \"user\",\r\n \"password\": \"password\"\r\n },\r\n {\r\n \"id\": \"c00214272\",\r\n \"alias\": \"c00214272\",\r\n \"description\": \"des\",\r\n \"aliasType\": \"CONSUMER\",\r\n \"transportType\": \"JMS\",\r\n \"keyStoreAlias\": \"DEFAULT_IS_KEYSTORE\",\r\n \"keyAlias\": \"ssos\",\r\n \"trustStoreAlias\": \"DEFAULT_IS_TRUSTSTORE\",\r\n \"timestampPrecisionInMillis\": \"false\",\r\n \"timestampTimeToLive\": \"123\",\r\n \"timestampMaximumSkew\": \"1234\",\r\n \"executeACL\": \"Default\",\r\n \"jmsAliasType\": \"JNDI\",\r\n \"jndiProvAlias\": \"JNDI_AMQP\",\r\n \"connFactoryName\": \"qpidConnectionFactory\",\r\n \"jmsConnAlias\": \"JMS_CONN\",\r\n \"user\": \"user\",\r\n \"password\": \"password\"\r\n }\r\n ]\r\n}" - } - }, - "401" : { - "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." - }, - "404" : { - "description" : "" - } - }, - "security" : [ { - "Basic" : [ ] - } ] - }, - "post" : { - "description" : "The method creates a Webservice endpoint in API Gateway. The API request body must contain the payload for the Webservice endpoint", - "operationId" : "createWebserviceEndpoint", - "consumes" : [ "application/json" ], - "produces" : [ "application/json" ], - "parameters" : [ { - "in" : "body", - "name" : "body", - "description" : "", - "required" : true, - "schema" : { - "$ref" : "#/definitions/WebserviceEndpointAlias" - }, - "x-examples" : { - "application/json" : "{\r\n \r\n \"alias\": \"c00222\",\r\n \"description\": \"des\",\r\n \"aliasType\": \"CONSUMER\",\r\n \"transportType\": \"JMS\",\r\n \"keyStoreAlias\": \"DEFAULT_IS_KEYSTORE\",\r\n \"keyAlias\": \"ssos\",\r\n \"trustStoreAlias\": \"DEFAULT_IS_TRUSTSTORE\",\r\n \"timestampPrecisionInMillis\": \"false\",\r\n \"timestampTimeToLive\": \"123\",\r\n \"timestampMaximumSkew\": \"1234\",\r\n \"executeACL\": \"Default\",\r\n \"jmsAliasType\": \"JMS\",\r\n \"jndiProvAlias\": \"\",\r\n \"connFactoryName\": \"qpidConnectionFactory\",\r\n \"jmsConnAlias\": \"JMS_CONN\",\r\n \"user\": \"user\",\r\n \"password\": \"password\"\r\n }" - } - } ], - "responses" : { - "201" : { - "description" : "This status code indicates that the Webservice endpoint has been successfully created in API Gateway, and the newly created Webservice endpoint is available in the response body.", - "examples" : { - "application/json" : "{\r\n \"WebserviceEndpointAlias\": {\r\n \"id\": \"c001\",\r\n \"alias\": \"c001\",\r\n \"description\": \"des\",\r\n \"aliasType\": \"CONSUMER\",\r\n \"transportType\": \"JMS\",\r\n \"keyStoreAlias\": \"DEFAULT_IS_KEYSTORE\",\r\n \"keyAlias\": \"ssos\",\r\n \"trustStoreAlias\": \"DEFAULT_IS_TRUSTSTORE\",\r\n \"timestampPrecisionInMillis\": \"false\",\r\n \"timestampTimeToLive\": \"123\",\r\n \"timestampMaximumSkew\": \"1234\",\r\n \"executeACL\": \"Default\",\r\n \"jmsAliasType\": \"JMS\",\r\n \"jndiProvAlias\": \"\",\r\n \"connFactoryName\": \"qpidConnectionFactory\",\r\n \"jmsConnAlias\": \"JMS_CONN\",\r\n \"user\": \"user\",\r\n \"password\": \"password\"\r\n }\r\n}" - }, - "schema" : { - "$ref" : "#/definitions/WebserviceEndpointAlias" - } - }, - "401" : { - "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." - }, - "400" : { - "description" : "This status code indicates that the Webservice endpoint with the given name already exists in API Gateway or the request body is not correct.", - "examples" : { - "application/json" : "{}" - } - } - }, - "security" : [ { - "Basic" : [ ] - } ] - }, - "put" : { - "description" : "This REST service is used to update the Webservice endpoint", - "operationId" : "updateWebserviceEndpoint", - "consumes" : [ "application/json" ], - "produces" : [ "application/json" ], - "parameters" : [ { - "in" : "body", - "name" : "body", - "description" : "", - "required" : true, - "schema" : { - "$ref" : "#/definitions/WebserviceEndpointAlias" - }, - "x-examples" : { - "application/json" : "{\r\n \"id\": \"c001\",\r\n \"alias\": \"c001\",\r\n \"description\": \"des\",\r\n \"aliasType\": \"CONSUMER\",\r\n \"transportType\": \"JMS\",\r\n \"keyStoreAlias\": \"DEFAULT_IS_KEYSTORE\",\r\n \"keyAlias\": \"ssos\",\r\n \"trustStoreAlias\": \"DEFAULT_IS_TRUSTSTORE\",\r\n \"timestampPrecisionInMillis\": \"false\",\r\n \"timestampTimeToLive\": \"123\",\r\n \"timestampMaximumSkew\": \"1234\",\r\n \"executeACL\": \"Default\",\r\n \"jmsAliasType\": \"JMS\",\r\n \"jndiProvAlias\": \"\",\r\n \"connFactoryName\": \"qpidConnectionFactory\",\r\n \"jmsConnAlias\": \"JMS_CONN\",\r\n \"user\": \"user\",\r\n \"password\": \"password\"\r\n }" - } - } ], - "responses" : { - "200" : { - "description" : "This status code indicates that API Gateway has successfully updated the specified Webservice endpoint and the updated Webservice endpoint details can be found in the response body", - "examples" : { - "application/json" : "{\r\n \"WebserviceEndpointAlias\": {\r\n \"id\": \"c001\",\r\n \"alias\": \"c001\",\r\n \"description\": \"des\",\r\n \"aliasType\": \"CONSUMER\",\r\n \"transportType\": \"JMS\",\r\n \"keyStoreAlias\": \"DEFAULT_IS_KEYSTORE\",\r\n \"keyAlias\": \"ssos\",\r\n \"trustStoreAlias\": \"DEFAULT_IS_TRUSTSTORE\",\r\n \"timestampPrecisionInMillis\": \"false\",\r\n \"timestampTimeToLive\": \"123\",\r\n \"timestampMaximumSkew\": \"1234\",\r\n \"executeACL\": \"Default\",\r\n \"jmsAliasType\": \"JMS\",\r\n \"jndiProvAlias\": \"\",\r\n \"connFactoryName\": \"qpidConnectionFactory\",\r\n \"jmsConnAlias\": \"JMS_CONN\",\r\n \"user\": \"user\",\r\n \"password\": \"password\"\r\n }\r\n}" - }, - "schema" : { - "$ref" : "#/definitions/WebserviceEndpointAlias" - } - }, - "401" : { - "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." - }, - "400" : { - "description" : "Tis status code indicates the request payload is not correct and corresponding error details can be seen in the response body", - "examples" : { - "application/json" : "" - } - } - }, - "security" : [ { - "Basic" : [ ] - } ] - } - }, - "/is/webServiceEndpoints/{webserviceEndpointId}" : { - "get" : { - "description" : "The method retrieves the specified Webservice endpoint in API Gateway.", - "operationId" : "getWebserviceEndpoint", - "consumes" : [ "application/json" ], - "produces" : [ "application/json" ], - "parameters" : [ { - "name" : "webserviceEndpointId", - "in" : "path", - "description" : "This path parameter is used to specify the Webservice endpoint id which Webservice endpoint needs to be retrived.", - "required" : true, - "type" : "string", - "x-example" : "sampleEndpoint" - } ], - "responses" : { - "200" : { - "description" : "This status code indicates that the specified Webservice endpoint is successfully retrieved.", - "examples" : { - "application/json" : "{\r\n \"WebserviceEndpointAlias\": {\r\n \"id\": \"c001\",\r\n \"alias\": \"c001\",\r\n \"description\": \"des\",\r\n \"aliasType\": \"CONSUMER\",\r\n \"transportType\": \"JMS\",\r\n \"keyStoreAlias\": \"DEFAULT_IS_KEYSTORE\",\r\n \"keyAlias\": \"ssos\",\r\n \"trustStoreAlias\": \"DEFAULT_IS_TRUSTSTORE\",\r\n \"timestampPrecisionInMillis\": \"false\",\r\n \"timestampTimeToLive\": \"123\",\r\n \"timestampMaximumSkew\": \"1234\",\r\n \"executeACL\": \"Default\",\r\n \"jmsAliasType\": \"JMS\",\r\n \"jndiProvAlias\": \"\",\r\n \"connFactoryName\": \"qpidConnectionFactory\",\r\n \"jmsConnAlias\": \"JMS_CONN\",\r\n \"user\": \"user\",\r\n \"password\": \"password\"\r\n }\r\n}" - }, - "schema" : { - "$ref" : "#/definitions/WebserviceEndpointAlias" - } - }, - "401" : { - "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." - }, - "404" : { - "description" : "This status code indicates that the Webservice endpoint id specified is not found in API Gateway", - "examples" : { - "application/json" : "{\r\n \"errorDetails\": \" Exception occured : The Webservice endpoint object with the given ID: Consumer123 couldn't found\"\r\n}" - } - } - }, - "security" : [ { - "Basic" : [ ] - } ] - }, - "delete" : { - "description" : "This delete request will delete the Webservice endpoint based on the Webservice endpoint id which is specified in path", - "operationId" : "deleteWebserviceEndpoint", - "consumes" : [ "application/json" ], - "produces" : [ "application/json" ], - "parameters" : [ { - "name" : "webserviceEndpointId", - "in" : "path", - "description" : "This path parameter is used to specify the Webservice endpoint id for which Webservice endpoint needs to deleted.", - "required" : true, - "type" : "string", - "x-example" : "sampleEndpoint" - } ], - "responses" : { - "200" : { - "description" : "" - }, - "401" : { - "description" : "This status code indicates either user didn't provide any user credential or user doesn't have API Gateway Administrator or API Gateway provider access to delete the assertion." - }, - "404" : { - "description" : "This status code indicates that the corresponding Webservice endpoint id does not exist", - "examples" : { - "application/json" : "{\r\n \"errorDetails\": \" Unable to find the resource: 685e99ee-0e1b-4afa-8ff3-4322cf2965661\"\r\n}" - } - } - }, - "security" : [ { - "Basic" : [ ] - } ] - } - }, - "/is/kerberos" : { - "get" : { - "description" : "Retrieves the configured Kerberos settings from API Gateway.", - "operationId" : "getKerberosSetting", - "produces" : [ "application/json" ], - "parameters" : [ ], - "responses" : { - "200" : { - "description" : "This status code indicates that the kerberos setting has been successfully retrieved from API Gateway.", - "examples" : { - "application/json" : "{\r\n\t\"kerberosRealm\": \"krbRelam\",\r\n\t\"kerberosKDC\": \"krbDistCenter\",\r\n\t\"useSubjectCreds\": false,\r\n\t\"kerberosConfigContents\": \"\"\r\n}" - }, - "schema" : { - "$ref" : "#/definitions/KerberosSettings" - } - }, - "400" : { - "description" : "This status code indicates invalid request or bad input." - }, - "401" : { - "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." - }, - "404" : { - "description" : "This status code indicates that the requested resource is not found." - }, - "405" : { - "description" : "This status code indicates that the requested HTTP method is not supported for the resource." - }, - "500" : { - "description" : "This status code indicates an error occurred while fetching the configured Kerberos settings from API Gateway." - } - }, - "security" : [ { - "Basic" : [ ] - } ] - }, - "put" : { - "operationId" : "updateKerberos", - "consumes" : [ "application/json" ], - "produces" : [ "application/json" ], - "parameters" : [ { - "in" : "body", - "name" : "body", - "description" : "The request payload for Kerberos settings in API Gateway.", - "required" : true, - "schema" : { - "$ref" : "#/definitions/KerberosSettings" - }, - "x-examples" : { - "application/json" : "{\r\n\t\"kerberosRealm\": \"krbRelam\",\r\n\t\"kerberosKDC\": \"krbDistCenter\",\r\n\t\"useSubjectCreds\": false,\r\n\t\"kerberosConfigContents\": \"\"\r\n}" - } - } ], - "responses" : { - "200" : { - "description" : "This status code indicates that the configured Kerberos settings have been successfully persisted in API Gateway." - }, - "400" : { - "description" : "This status code indicates invalid request or bad input." - }, - "401" : { - "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." - }, - "404" : { - "description" : "This status code indicates that the requested resource is not found." - }, - "405" : { - "description" : "This status code indicates that the requested HTTP method is not supported for the resource." - }, - "500" : { - "description" : "This status code indicates an error occurred while persisting the Kerberos settings in API Gateway." - } - }, - "security" : [ { - "Basic" : [ ] - } ] - } - }, - "/is/jmsConnections" : { - "get" : { - "description" : "The method retrieves list of all the JMS connections in API Gateway.", - "operationId" : "getAllJMSConnections", - "consumes" : [ "application/json" ], - "produces" : [ "application/json" ], - "parameters" : [ ], - "responses" : { - "200" : { - "description" : "This status code indicates that the list of JMS connections is successfully retrieved.", - "examples" : { - "application/json" : "{\r\n \"jmsList\": [\r\n {\r\n \"id\": \"JMSConn1\",\r\n \"aliasName\": \"JMSConn1\",\r\n \"enabled\": \"false\",\r\n \"description\": \"adasd\",\r\n \"transactionType\": \"0\",\r\n \"clientID\": \"clientID\",\r\n \"user\": \"user\",\r\n \"password\": \"pwd\",\r\n \"associationType\": \"0\",\r\n \"jndi_jndiAliasName\": \"JNDI_AMQP\",\r\n \"jndi_connectionFactoryLookupName\": \"qpidConnectionFactory\",\r\n \"jndi_automaticallyCreateUMAdminObjects\": \"false\",\r\n \"jndi_enableFollowTheMaster\": \"true\",\r\n \"jndi_connectionFactoryUpdateType\": \"NONE\",\r\n \"jndi_connectionFactoryPollingInterval\": \"0\",\r\n \"classLoader\": \"INTEGRATION_SERVER\",\r\n \"csqSize\": \"-1\",\r\n \"csqDrainInOrder\": \"true\",\r\n \"optTempQueueCreate\": \"true\",\r\n \"allowReplyToConsumer\": \"false\",\r\n \"manageDestinations\": \"true\",\r\n \"allowNewConnectionPerTrigger\": \"true\",\r\n \"producerCachingMode\": \"0\",\r\n \"producerSessionPoolMinSize\": \"0\",\r\n \"producerSessionPoolSize\": \"0\",\r\n \"cacheProducersPoolMinSize\": \"0\",\r\n \"cacheProducersPoolSize\": \"0\",\r\n \"poolTimeout\": \"6000\",\r\n \"cacheProducersQueueList\": \"\",\r\n \"producerMaxRetryAttempts\": \"0\",\r\n \"producerRetryInterval\": \"1000\",\r\n \"um_loggingOutput\": \"0\",\r\n \"um_producerMessageTracking\": \"false\",\r\n \"um_producerIncludedStrings\": \"1000\",\r\n \"um_consumerMessageTracking\": \"false\",\r\n \"um_consumerIncludedStrings\": \"1000\"\r\n },\r\n {\r\n \"id\": \"JMSConn 002\",\r\n \"aliasName\": \"JMSConn 002\",\r\n \"enabled\": \"false\",\r\n \"description\": \"sailesh2\",\r\n \"transactionType\": \"0\",\r\n \"clientID\": \"clientID\",\r\n \"user\": \"user\",\r\n \"password\": \"pwd\",\r\n \"associationType\": \"0\",\r\n \"jndi_jndiAliasName\": \"JNDI_AMQP\",\r\n \"jndi_connectionFactoryLookupName\": \"qpidConnectionFactory\",\r\n \"jndi_automaticallyCreateUMAdminObjects\": \"false\",\r\n \"jndi_enableFollowTheMaster\": \"true\",\r\n \"jndi_connectionFactoryUpdateType\": \"NONE\",\r\n \"jndi_connectionFactoryPollingInterval\": \"0\",\r\n \"classLoader\": \"INTEGRATION_SERVER\",\r\n \"csqSize\": \"-1\",\r\n \"csqDrainInOrder\": \"true\",\r\n \"optTempQueueCreate\": \"true\",\r\n \"allowReplyToConsumer\": \"false\",\r\n \"manageDestinations\": \"true\",\r\n \"allowNewConnectionPerTrigger\": \"true\",\r\n \"producerCachingMode\": \"0\",\r\n \"producerSessionPoolMinSize\": \"0\",\r\n \"producerSessionPoolSize\": \"0\",\r\n \"cacheProducersPoolMinSize\": \"0\",\r\n \"cacheProducersPoolSize\": \"0\",\r\n \"poolTimeout\": \"6000\",\r\n \"cacheProducersQueueList\": \"\",\r\n \"producerMaxRetryAttempts\": \"0\",\r\n \"producerRetryInterval\": \"1000\",\r\n \"um_loggingOutput\": \"0\",\r\n \"um_producerMessageTracking\": \"false\",\r\n \"um_producerIncludedStrings\": \"1000\",\r\n \"um_consumerMessageTracking\": \"1000\",\r\n \"um_consumerIncludedStrings\": \"1000\"\r\n }\r\n ]\r\n}" - } - }, - "401" : { - "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." - } - }, - "security" : [ { - "Basic" : [ ] - } ] - }, - "post" : { - "description" : "The method creates a JMS connection in API Gateway. The API request body must contain the payload for the JMS connection", - "operationId" : "createJMSConnection", - "consumes" : [ "application/json" ], - "produces" : [ "application/json" ], - "parameters" : [ { - "in" : "body", - "name" : "body", - "description" : "", - "required" : true, - "schema" : { - "$ref" : "#/definitions/JMSConnectionAlias" - }, - "x-examples" : { - "application/json" : "{\"aliasName\":\"JMSConn1\",\"enabled\":\"false\",\"description\":\"adasd\",\"transactionType\":\"0\",\"clientID\":\"clientID\",\"user\":\"user\",\"password\":\"pwd\",\"associationType\":\"0\",\"jndi_jndiAliasName\":\"JNDI_AMQP\",\"jndi_connectionFactoryLookupName\":\"qpidConnectionFactory\",\"jndi_automaticallyCreateUMAdminObjects\":\"false\",\"jndi_enableFollowTheMaster\":\"true\",\"jndi_connectionFactoryUpdateType\":\"NONE\",\"jndi_connectionFactoryPollingInterval\":\"0\",\"classLoader\":\"INTEGRATION_SERVER\",\"csqSize\":\"-1\",\"csqDrainInOrder\":\"true\",\"optTempQueueCreate\":\"true\",\"allowReplyToConsumer\":\"false\",\"manageDestinations\":\"true\",\"allowNewConnectionPerTrigger\":\"true\",\"producerCachingMode\":\"0\",\"producerSessionPoolSize\":\"0\",\"producerSessionPoolMinSize\":\"0\",\"cacheProducersPoolMinSize\":\"0\",\"cacheProducersPoolSize\":\"0\",\"poolTimeout\":\"6000\",\"cacheProducersQueueList\":\"\",\"producerMaxRetryAttempts\":\"0\",\"producerRetryInterval\":\"1000\",\"um_loggingOutput\":\"0\",\"um_producerMessageTracking\":\"false\",\"um_producerIncludedStrings\":\"1000\",\"um_consumerMessageTracking\":\"false\",\"um_consumerIncludedStrings\":\"1000\"}\r\n\r\n" - } - } ], - "responses" : { - "201" : { - "description" : "This status code indicates that the JMS connection has been successfully created in API Gateway, and the newly created JMS connection is available in the response body.", - "examples" : { - "application/json" : "{\r\n \"jms\": {\r\n \"id\": \"JMSConn11\",\r\n \"aliasName\": \"JMSConn11\",\r\n \"enabled\": \"false\",\r\n \"description\": \"adasd\",\r\n \"transactionType\": \"0\",\r\n \"clientID\": \"clientID\",\r\n \"user\": \"user\",\r\n \"password\": \"pwd\",\r\n \"associationType\": \"0\",\r\n \"jndi_jndiAliasName\": \"JNDI_AMQP\",\r\n \"jndi_connectionFactoryLookupName\": \"qpidConnectionFactory\",\r\n \"jndi_automaticallyCreateUMAdminObjects\": \"false\",\r\n \"jndi_enableFollowTheMaster\": \"true\",\r\n \"jndi_connectionFactoryUpdateType\": \"NONE\",\r\n \"jndi_connectionFactoryPollingInterval\": \"0\",\r\n \"classLoader\": \"INTEGRATION_SERVER\",\r\n \"csqSize\": \"-1\",\r\n \"csqDrainInOrder\": \"true\",\r\n \"optTempQueueCreate\": \"true\",\r\n \"allowReplyToConsumer\": \"false\",\r\n \"manageDestinations\": \"true\",\r\n \"allowNewConnectionPerTrigger\": \"true\",\r\n \"producerCachingMode\": \"0\",\r\n \"producerSessionPoolMinSize\": \"0\",\r\n \"producerSessionPoolSize\": \"0\",\r\n \"cacheProducersPoolMinSize\": \"0\",\r\n \"cacheProducersPoolSize\": \"0\",\r\n \"poolTimeout\": \"6000\",\r\n \"cacheProducersQueueList\": \"\",\r\n \"producerMaxRetryAttempts\": \"0\",\r\n \"producerRetryInterval\": \"1000\",\r\n \"um_loggingOutput\": \"0\",\r\n \"um_producerMessageTracking\": \"false\",\r\n \"um_producerIncludedStrings\": \"1000\",\r\n \"um_consumerMessageTracking\": \"false\",\r\n \"um_consumerIncludedStrings\": \"1000\"\r\n }\r\n}" - }, - "schema" : { - "$ref" : "#/definitions/JMSConnectionAlias" - } - }, - "401" : { - "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." - }, - "400" : { - "description" : "This status code indicates that the JMS connection with the given name already exists in API Gateway or the request body is not correct.", - "examples" : { - "application/json" : "{}" - } - } - }, - "security" : [ { - "Basic" : [ ] - } ] - }, - "put" : { - "description" : "This REST service is used to update the JMS connection", - "operationId" : "updateJMSConnection", - "consumes" : [ "application/json" ], - "produces" : [ "application/json" ], - "parameters" : [ { - "in" : "body", - "name" : "body", - "description" : "", - "required" : true, - "schema" : { - "$ref" : "#/definitions/JMSConnectionAlias" - }, - "x-examples" : { - "application/json" : "{\r\n \"id\": \"JMSConn11\",\r\n \"aliasName\": \"JMSConn11\",\r\n \"enabled\": \"false\",\r\n \"description\": \"adasd\",\r\n \"transactionType\": \"0\",\r\n \"clientID\": \"clientID\",\r\n \"user\": \"user\",\r\n \"password\": \"pwd\",\r\n \"associationType\": \"0\",\r\n \"jndi_jndiAliasName\": \"JNDI_AMQP\",\r\n \"jndi_connectionFactoryLookupName\": \"qpidConnectionFactory\",\r\n \"jndi_automaticallyCreateUMAdminObjects\": \"false\",\r\n \"jndi_enableFollowTheMaster\": \"true\",\r\n \"jndi_connectionFactoryUpdateType\": \"NONE\",\r\n \"jndi_connectionFactoryPollingInterval\": \"0\",\r\n \"classLoader\": \"INTEGRATION_SERVER\",\r\n \"csqSize\": \"-1\",\r\n \"csqDrainInOrder\": \"true\",\r\n \"optTempQueueCreate\": \"true\",\r\n \"allowReplyToConsumer\": \"false\",\r\n \"manageDestinations\": \"true\",\r\n \"allowNewConnectionPerTrigger\": \"true\",\r\n \"producerCachingMode\": \"0\",\r\n \"producerSessionPoolMinSize\": \"0\",\r\n \"producerSessionPoolSize\": \"0\",\r\n \"cacheProducersPoolMinSize\": \"0\",\r\n \"cacheProducersPoolSize\": \"0\",\r\n \"poolTimeout\": \"6000\",\r\n \"cacheProducersQueueList\": \"\",\r\n \"producerMaxRetryAttempts\": \"0\",\r\n \"producerRetryInterval\": \"1000\",\r\n \"um_loggingOutput\": \"0\",\r\n \"um_producerMessageTracking\": \"false\",\r\n \"um_producerIncludedStrings\": \"1000\",\r\n \"um_consumerMessageTracking\": \"false\",\r\n \"um_consumerIncludedStrings\": \"1000\"\r\n }" - } - } ], - "responses" : { - "200" : { - "description" : "This status code indicates that API Gateway has successfully updated the specified JMS connection and the updated JMS connection details can be found in the response body", - "examples" : { - "application/json" : "{\r\n \"jms\": {\r\n \"id\": \"JMSConn11\",\r\n \"aliasName\": \"JMSConn11\",\r\n \"enabled\": \"false\",\r\n \"description\": \"adasd\",\r\n \"transactionType\": \"0\",\r\n \"clientID\": \"clientID\",\r\n \"user\": \"user\",\r\n \"password\": \"pwd\",\r\n \"associationType\": \"0\",\r\n \"jndi_jndiAliasName\": \"JNDI_AMQP\",\r\n \"jndi_connectionFactoryLookupName\": \"qpidConnectionFactory\",\r\n \"jndi_automaticallyCreateUMAdminObjects\": \"false\",\r\n \"jndi_enableFollowTheMaster\": \"true\",\r\n \"jndi_connectionFactoryUpdateType\": \"NONE\",\r\n \"jndi_connectionFactoryPollingInterval\": \"0\",\r\n \"classLoader\": \"INTEGRATION_SERVER\",\r\n \"csqSize\": \"-1\",\r\n \"csqDrainInOrder\": \"true\",\r\n \"optTempQueueCreate\": \"true\",\r\n \"allowReplyToConsumer\": \"false\",\r\n \"manageDestinations\": \"true\",\r\n \"allowNewConnectionPerTrigger\": \"true\",\r\n \"producerCachingMode\": \"0\",\r\n \"producerSessionPoolMinSize\": \"0\",\r\n \"producerSessionPoolSize\": \"0\",\r\n \"cacheProducersPoolMinSize\": \"0\",\r\n \"cacheProducersPoolSize\": \"0\",\r\n \"poolTimeout\": \"6000\",\r\n \"cacheProducersQueueList\": \"\",\r\n \"producerMaxRetryAttempts\": \"0\",\r\n \"producerRetryInterval\": \"1000\",\r\n \"um_loggingOutput\": \"0\",\r\n \"um_producerMessageTracking\": \"false\",\r\n \"um_producerIncludedStrings\": \"1000\",\r\n \"um_consumerMessageTracking\": \"false\",\r\n \"um_consumerIncludedStrings\": \"1000\"\r\n }\r\n}" - }, - "schema" : { - "$ref" : "#/definitions/JMSConnectionAlias" - } - }, - "401" : { - "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." - }, - "400" : { - "description" : "Tis status code indicates the request payload is not correct and corresponding error details can be seen in the response body", - "examples" : { - "application/json" : "" - } - } - }, - "security" : [ { - "Basic" : [ ] - } ] - } - }, - "/is/jmsConnections/{jmsConnId}/enable" : { - "put" : { - "description" : "The method enables the specified JMS connections in API Gateway.", - "operationId" : "enableJMSConnection", - "consumes" : [ "application/json" ], - "produces" : [ "application/json" ], - "parameters" : [ { - "name" : "jmsConnId", - "in" : "path", - "description" : "This path parameter is used to specify the JMS connection id which JMS connection needs to be enabled.", - "required" : true, - "type" : "string", - "x-example" : "sampleJMSConn" - } ], - "responses" : { - "200" : { - "description" : "This status code indicates that the specified JMS connections is successfully enabled.", - "examples" : { - "application/json" : "{\r\n \"status\": \"JMS Connection Alias \\\"JMSConn11\\\" set to enabled.\",\r\n \"result\": true\r\n}" - } - }, - "401" : { - "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." - }, - "500" : { - "description" : "" - } - }, - "security" : [ { - "Basic" : [ ] - } ] - } - }, - "/is/jmsConnections/{jmsConnId}/disable" : { - "put" : { - "description" : "The method disables the specified JMS connections in API Gateway.", - "operationId" : "disableJMSConnection", - "consumes" : [ "application/json" ], - "produces" : [ "application/json" ], - "parameters" : [ { - "name" : "jmsConnId", - "in" : "path", - "description" : "This path parameter is used to specify the JMS connection id which JMS connection needs to be disabled.", - "required" : true, - "type" : "string", - "x-example" : "sampleJMSConn" - } ], - "responses" : { - "200" : { - "description" : "This status code indicates that the specified JMS connections is successfully disabled.", - "examples" : { - "application/json" : "{\r\n \"status\": \"JMS Connection Alias \\\"JMSConn11\\\" set to disabled.\",\r\n \"result\": true\r\n}" - } - }, - "401" : { - "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." - }, - "500" : { - "description" : "" - } - }, - "security" : [ { - "Basic" : [ ] - } ] - } - }, - "/is/jmsConnections/{jmsConnId}" : { - "get" : { - "description" : "The method retrieves the specified JMS connection in API Gateway.", - "operationId" : "getJMSConnection", - "consumes" : [ "application/json" ], - "produces" : [ "application/json" ], - "parameters" : [ { - "name" : "jmsConnId", - "in" : "path", - "description" : "This path parameter is used to specify the JMS connection id which JMS connection needs to be retrived.", - "required" : true, - "type" : "string", - "x-example" : "sampleJMSConn" - } ], - "responses" : { - "200" : { - "description" : "This status code indicates that the specified JMS connections is successfully retrieved.", - "examples" : { - "application/json" : "{\r\n \"jms\": {\r\n \"id\": \"JMSConn1\",\r\n \"aliasName\": \"JMSConn1\",\r\n \"enabled\": \"false\",\r\n \"description\": \"adasd\",\r\n \"transactionType\": \"0\",\r\n \"clientID\": \"clientID\",\r\n \"user\": \"user\",\r\n \"password\": \"pwd\",\r\n \"associationType\": \"0\",\r\n \"jndi_jndiAliasName\": \"JNDI_AMQP\",\r\n \"jndi_connectionFactoryLookupName\": \"qpidConnectionFactory\",\r\n \"jndi_automaticallyCreateUMAdminObjects\": \"false\",\r\n \"jndi_enableFollowTheMaster\": \"true\",\r\n \"jndi_connectionFactoryUpdateType\": \"NONE\",\r\n \"jndi_connectionFactoryPollingInterval\": \"0\",\r\n \"classLoader\": \"INTEGRATION_SERVER\",\r\n \"csqSize\": \"-1\",\r\n \"csqDrainInOrder\": \"true\",\r\n \"optTempQueueCreate\": \"true\",\r\n \"allowReplyToConsumer\": \"false\",\r\n \"manageDestinations\": \"true\",\r\n \"allowNewConnectionPerTrigger\": \"true\",\r\n \"producerCachingMode\": \"0\",\r\n \"producerSessionPoolMinSize\": \"0\",\r\n \"producerSessionPoolSize\": \"0\",\r\n \"cacheProducersPoolMinSize\": \"0\",\r\n \"cacheProducersPoolSize\": \"0\",\r\n \"poolTimeout\": \"6000\",\r\n \"cacheProducersQueueList\": \"\",\r\n \"producerMaxRetryAttempts\": \"0\",\r\n \"producerRetryInterval\": \"1000\",\r\n \"um_loggingOutput\": \"0\",\r\n \"um_producerMessageTracking\": \"false\",\r\n \"um_producerIncludedStrings\": \"1000\",\r\n \"um_consumerMessageTracking\": \"false\",\r\n \"um_consumerIncludedStrings\": \"1000\"\r\n }\r\n}" - }, - "schema" : { - "$ref" : "#/definitions/JMSConnectionAlias" - } - }, - "401" : { - "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." - }, - "404" : { - "description" : "This status code indicates that the JMS id specified is not found in API Gateway", - "examples" : { - "application/json" : "{\r\n \"errorDetails\": \" Exception occured : The JMS settings object with the given ID: JMSConn11 couldn't found\"\r\n}" - } - } - }, - "security" : [ { - "Basic" : [ ] - } ] - }, - "delete" : { - "description" : "This delete request will delete the JMS connection based on the JMS connection id which is specified in path", - "operationId" : "deleteJMSConnection", - "consumes" : [ "application/json" ], - "produces" : [ "application/json" ], - "parameters" : [ { - "name" : "jmsConnId", - "in" : "path", - "description" : "This path parameter is used to specify the JMS connection id for which JMS connection needs to deleted.", - "required" : true, - "type" : "string", - "x-example" : "sampleJMSConn" - } ], - "responses" : { - "204" : { - "description" : "This status code indicates that the specified JMS connection is successfully deleted" - }, - "401" : { - "description" : "This status code indicates either user didn't provide any user credential or user doesn't have API Gateway Administrator or API Gateway provider access to delete the assertion." - }, - "404" : { - "description" : "This status code indicates that the corresponding JMS connection id does not exist", - "examples" : { - "application/json" : "{\r\n \"errorDetails\": \" Unable to find the resource: 685e99ee-0e1b-4afa-8ff3-4322cf2965661\"\r\n}" - } - } - }, - "security" : [ { - "Basic" : [ ] - } ] - } - }, - "/is/license" : { - "get" : { - "description" : "Retrieves the license details from API Gateway.", - "operationId" : "getLicenseDetails", - "produces" : [ "application/json" ], - "parameters" : [ ], - "responses" : { - "200" : { - "description" : "This status code indicates that the license has been successfully retrieved from API Gateway.", - "examples" : { - "application/json" : "{ \r\n\t\"LicenseInfo\": { \r\n\t\t\"Clustering\": \"true\", \r\n\t\t\"Publish / Subscribe\": \"false\", \r\n\t\t\"Adapter Runtime\": \"false\", \r\n\t\t\"Remote Invoke\": \"true\", \r\n\t\t\"Guaranteed Delivery\": \"false\", \r\n\t\t\"Security Auditing\": \"true\", \r\n\t\t\"Enterprise Gateway\": \"true\", \r\n\t\t\"Distributed Cache\": \"true\", \r\n\t\t\"Microservices\": \"false\" }, \r\n\t\"LicenseDetails\": [ { \r\n\t\t\"Sales Information\": { \r\n\t\t\t\"Serial Number\": \"12323232\", \r\n\t\t\t\"License Key\": \"dddddddddddddddddd\", \r\n\t\t\t\"Customer ID\": \"LK-WIN\", \r\n\t\t\t\"Customer Name\": \"Software AG Internal\", \r\n\t\t\t\"ContractDetails\": \"1\", \r\n\t\t\t\"ContractPosNumber\": \"1\", \r\n\t\t\t\"License Type Details\": \"Internal\", \r\n\t\t\t\"AutoCallHome\": \"\" \r\n\t\t} \r\n\t}, \r\n\t{ \r\n\t\t\"Product Information\": { \r\n\t\t\t\"Expiration Date\": \"2019-12-01 23:59:59 IST\", \r\n\t\t\t\"Operating System\": \"win\", \r\n\t\t\t\"Product Code\": \"YAIAA\", \r\n\t\t\t\"Product ID\": \"\", \r\n\t\t\t\"Product Name\": \"API Gateway Advanced Edition\", \r\n\t\t\t\"Product Version\": \"10.1\", \r\n\t\t\t\"Usage\": \"1\", \r\n\t\t\t\"RenewalDate\": \"\", \r\n\t\t\t\"HigherLevPosNr\": \"\", \r\n\t\t\t\"HigherLevProdCode\": \"\", \r\n\t\t\t\"HigherLevProdName\": \"\" \r\n\t\t} \r\n\t}, \r\n\t{ \r\n\t\t\"Integration Server\": { \r\n\t\t\t\"Product Code\": \"YAI\", \r\n\t\t\t\"Product Version\": \"10.1\", \r\n\t\t\t\"Concurrent Sessions\": \"Unlimited\", \r\n\t\t\t\"Clustering\": \"yes\", \r\n\t\t\t\"Publish / Subscribe\": \"no\", \r\n\t\t\t\"Adapter Runtime\": \"no\", \r\n\t\t\t\"Remote Invoke\": \"yes\", \r\n\t\t\t\"Guaranteed Delivery\": \"no\", \r\n\t\t\t\"Security Auditing\": \"yes\", \r\n\t\t\t\"Distributed Cache\": \"yes\", \r\n\t\t\t\"Enterprise Gateway\": \"yes\" \r\n\t\t} \r\n\t}, \r\n\t{ \r\n\t\t\"License Information\": { \r\n\t\t\t\"Price Unit\": \"CoreA\", \r\n\t\t\t\"Price Quantity\": \"1\", \r\n\t\t\t\"TypeOfInstallation\": \"1\", \r\n\t\t\t\"LicenseType\": \"\", \r\n\t\t\t\"ExtendedRights\": \"\", \r\n\t\t\t\"LicenseVersion\": \"1.2\", \r\n\t\t\t\"Metering\": \"\" \r\n\t\t} \r\n\t}, \r\n\t{ \r\n\t\t\"API Gateway\": { \r\n\t\t\t\"Policy Management - Threat Protection\": \"yes\", \r\n\t\t\t\"Policy Management - Gateway\": \"yes\", \r\n\t\t\t\"Application Management\": \"yes\", \r\n\t\t\t\"APIManagement\": \"yes\" \r\n\t\t} \r\n\t} \r\n\t], \r\n\t\"TerracottaLicenseInformation\": { \r\n\t\t\"License File\": null, \r\n\t\t\"BigMemory\": \"no\", \r\n\t\t\"Expiration Date\": null \r\n\t}, \r\n\t\"LicenseSettings\": { \r\n\t\t\"LicenseKeyFile\": \"C:\\GatewayTrunk\\IntegrationServer\\instances\\default\\config\\licenseKey.xml\", \r\n\t\t\"terracottaLicenseFileSet\": null \r\n\t\t} \r\n\t}" - }, - "schema" : { - "$ref" : "#/definitions/LicenseDetail" - } - }, - "400" : { - "description" : "This status code indicates invalid request or bad input." - }, - "401" : { - "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." - }, - "404" : { - "description" : "This status code indicates that the requested resource is not found." - }, - "405" : { - "description" : "This status code indicates that the requested HTTP method is not supported for the resource." - }, - "500" : { - "description" : "This status code indicates an error occurred while fetching the configured license details from API Gateway." - } - }, - "security" : [ { - "Basic" : [ ] - } ] - }, - "put" : { - "operationId" : "updateLicenseDetails", - "consumes" : [ "application/json" ], - "produces" : [ "application/json" ], - "parameters" : [ { - "in" : "body", - "name" : "body", - "description" : "The request payload for updating license details in APIGateway.", - "required" : true, - "schema" : { - "$ref" : "#/definitions/LicenseDetail" - }, - "x-examples" : { - "application/json" : "{\r\n\t\"APIGatewayLicensePath\": \"C:\\GatewayTrunk\\IntegrationServer\\instances\\default\\config\\licenseKey.xml\", \r\n\t\"TerraCottaLicensePath\": \"C:\\Documents\\SAG License\\terracotta-license.key\" \r\n}" - } - } ], - "responses" : { - "200" : { - "description" : "This status code indicates that the configured license details have been successfully persisted in API Gateway." - }, - "400" : { - "description" : "This status code indicates invalid request or bad input." - }, - "401" : { - "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." - }, - "404" : { - "description" : "This status code indicates that the requested resource is not found." - }, - "405" : { - "description" : "This status code indicates that the requested HTTP method is not supported for the resource." - }, - "500" : { - "description" : "This status code indicates an error occurred while persisting the license details in API Gateway." - } - }, - "security" : [ { - "Basic" : [ ] - } ] - } - }, - "/licenseUsageDetails" : { - "get" : { - "description" : "This REST request is used to retrieve the details of transaction based license.", - "operationId" : "getLicenseUsageDetails", - "consumes" : [ "application/json" ], - "produces" : [ "application/json" ], - "parameters" : [ { - "name" : "month", - "in" : "query", - "description" : "This query parameter is used to provide the month details in numeric format", - "required" : false, - "type" : "string", - "x-example" : "month=5" - }, { - "name" : "year", - "in" : "query", - "description" : "This query parameter is used to provide the year details in numeric format", - "required" : false, - "type" : "string", - "x-example" : "year=2018" - } ], - "responses" : { - "200" : { - "description" : "This status code indicates that the transaction based license details for the given month has sent successfully as response.", - "examples" : { - "application/json" : "{\r\n \"currentUsage\": 111,\r\n \"licenseLimitPerMonth\": 20,\r\n \"pendingQuota\": 0,\r\n \"monthAndYear\": \"5/2018\"\r\n}" - } - }, - "401" : { - "description" : "This status code indicates that the user did not provide any user credential or user does not have API Gateway Administrator access to get the transaction based license details." - } - }, - "security" : [ { - "Basic" : [ ] - } ] - } - }, - "/apitransactions/typedefinitions" : { - "get" : { - "description" : "Returns the list of runtime event types. The available event types are as follows 1.transactionalEvents 2.monitorEvents 3.errorEvents 4.performanceMetrics 5.threatProtectionEvents 6.lifecycleEvents 7.policyViolationEvents 8.auditLogs 9.applicationlogs. You can use these eventType to scope the archive/purge operation. The user should be part of API-Gateway-Administrators group or else should have 'Manage purge and restore runtime events' privilege to perform this operation.", - "operationId" : "getMappings", - "consumes" : [ "application/json" ], - "produces" : [ "application/json" ], - "parameters" : [ ], - "responses" : { - "200" : { - "description" : "This response indicates that the list of type definitions has been returned to the requestor.", - "examples" : { - "application/json" : "{\r\n \"Mappings\": [\r\n \"performanceMetrics\",\r\n \"monitorEvents\",\r\n \"transactionalEvents\",\r\n \"policyViolationEvents\",\r\n \"errorEvents\",\r\n \"threatProtectionEvents\",\r\n \"lifecycleEvents\",\r\n \"auditLogs\"\r\n,\r\n \"applicationlogs\"\r\n ]\r\n}" - } - }, - "401" : { - "description" : "This response indicates that invalid credentials have been provided for the request." - }, - "500" : { - "description" : "This response indicates that the server has encountered an error while returning the list of type definitions. " - } - }, - "security" : [ { - "Basic" : [ ] - } ] - } - }, - "/approvalConfigurations/{id}" : { - "get" : { - "description" : "The method retrieves the details of a specified approval configuration in API Gateway", - "operationId" : "getApprovalConfiguration", - "produces" : [ "application/json" ], - "parameters" : [ { - "name" : "id", - "in" : "path", - "description" : "This parameter specifies the ID of an approval configuration whose details are to be retrieved in API Gateway.", - "required" : true, - "type" : "string" - } ], - "responses" : { - "200" : { - "description" : "This status code indicates that the details of the specified approval configuration are retrieved successfully.", - "examples" : { - "application/json" : "{\r\n \"approvalConfig\": {\r\n \"id\": \"createApplication\",\r\n \"eventType\": \"createApplication\",\r\n \"isEnabled\": true,\r\n \"approversGroupId\": \"0936de2c-9fb9-4625-b5b0-b7648e0d4103\",\r\n \"approvalMode\": \"anyone\",\r\n \"approvedEmailConfiguration\": {\r\n \"emailSubject\": \"Approval of @event.type\",\r\n \"emailContent\": \"Congratulations @requestor.name !\\n\\nYour request for @event.type has been approved.\",\r\n \"enabled\": false,\r\n \"requestType\": \"approved\"\r\n },\r\n \"rejectedEmailConfiguration\": {\r\n \"emailSubject\": \"Rejection of @event.type\",\r\n \"emailContent\": \"Hello @requestor.name,\\n\\nYour @event.type request has been rejected.\\nReasons:@rejectionReason.\\n\\nBest Regards,\\nAPI Gateway Team\\n\\n*** This notification was sent automatically. Do not reply to this email.***\",\r\n \"enabled\": false,\r\n \"requestType\": \"rejected\"\r\n },\r\n \"initiateApprovalRequestEmailConfiguration\": {\r\n \"emailSubject\": \"Approval request pending\",\r\n \"emailContent\": \"Hello @approver.name,\\n\\n A request by @requestor.name to @event.type needs your review and approval.\\n\\nBest Regards,\\nAPI Gateway Team\\n\\n*** This notification was sent automatically. Do not reply to this email.***\",\r\n \"enabled\": false,\r\n \"requestType\": \"initiate\"\r\n }\r\n }\r\n}" - }, - "schema" : { - "$ref" : "#/definitions/ApprovalConfiguration" - } - }, - "404" : { - "description" : "This status code indicates that an approval configuration with the given ID could not be found in API Gateway." - }, - "401" : { - "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." - } - }, - "security" : [ { - "Basic" : [ ] - } ] - }, - "put" : { - "description" : "The method updates the approval configuration in API Gateway.", - "operationId" : "updateApprovalConfiguration", - "consumes" : [ "application/json" ], - "produces" : [ "application/json" ], - "parameters" : [ { - "in" : "body", - "name" : "body", - "description" : "This parameter describes the request payload of an approval configuration that is to be updated in API Gateway.", - "required" : true, - "schema" : { - "$ref" : "#/definitions/ApprovalConfiguration" - }, - "x-examples" : { - "application/json" : "{\r\n \"approvalConfig\": {\r\n \"id\": \"createApplication\",\r\n \"eventType\": \"createApplication\",\r\n \"isEnabled\": true,\r\n \"approversGroupId\": \"0936de2c-9fb9-4625-b5b0-b7648e0d4103\",\r\n \"approvalMode\": \"anyone\",\r\n \"approvedEmailConfiguration\": {\r\n \"emailSubject\": \"Approval of @event.type\",\r\n \"emailContent\": \"Congratulations @requestor.name !\\n\\nYour request for @event.type has been approved.\",\r\n \"enabled\": false,\r\n \"requestType\": \"approved\"\r\n },\r\n \"rejectedEmailConfiguration\": {\r\n \"emailSubject\": \"Rejection of @event.type\",\r\n \"emailContent\": \"Hello @requestor.name,\\n\\nYour @event.type request has been rejected.\\nReasons:@rejectionReason.\\n\\nBest Regards,\\nAPI Gateway Team\\n\\n*** This notification was sent automatically. Do not reply to this email.***\",\r\n \"enabled\": false,\r\n \"requestType\": \"rejected\"\r\n },\r\n \"initiateApprovalRequestEmailConfiguration\": {\r\n \"emailSubject\": \"Approval request pending\",\r\n \"emailContent\": \"Hello @approver.name,\\n\\n A request by @requestor.name to @event.type needs your review and approval.\\n\\nBest Regards,\\nAPI Gateway Team\\n\\n*** This notification was sent automatically. Do not reply to this email.***\",\r\n \"enabled\": false,\r\n \"requestType\": \"initiate\"\r\n }\r\n }\r\n}" - } - }, { - "name" : "id", - "in" : "path", - "description" : "This parameter specifies the ID of an approval configuration that is to be updated in API Gateway.", - "required" : true, - "type" : "string" - } ], - "responses" : { - "200" : { - "description" : "This status code indicates that the approval configuration has been successfully updated in API Gateway.", - "examples" : { - "application/json" : "{\r\n \"approvalConfig\": {\r\n \"id\": \"createApplication\",\r\n \"eventType\": \"createApplication\",\r\n \"isEnabled\": true,\r\n \"approversGroupId\": \"0936de2c-9fb9-4625-b5b0-b7648e0d4103\",\r\n \"approvalMode\": \"anyone\",\r\n \"approvedEmailConfiguration\": {\r\n \"emailSubject\": \"Approval of @event.type\",\r\n \"emailContent\": \"Congratulations @requestor.name !\\n\\nYour request for @event.type has been approved.\",\r\n \"enabled\": false,\r\n \"requestType\": \"approved\"\r\n },\r\n \"rejectedEmailConfiguration\": {\r\n \"emailSubject\": \"Rejection of @event.type\",\r\n \"emailContent\": \"Hello @requestor.name,\\n\\nYour @event.type request has been rejected.\\nReasons:@rejectionReason.\\n\\nBest Regards,\\nAPI Gateway Team\\n\\n*** This notification was sent automatically. Do not reply to this email.***\",\r\n \"enabled\": false,\r\n \"requestType\": \"rejected\"\r\n },\r\n \"initiateApprovalRequestEmailConfiguration\": {\r\n \"emailSubject\": \"Approval request pending\",\r\n \"emailContent\": \"Hello @approver.name,\\n\\n A request by @requestor.name to @event.type needs your review and approval.\\n\\nBest Regards,\\nAPI Gateway Team\\n\\n*** This notification was sent automatically. Do not reply to this email.***\",\r\n \"enabled\": false,\r\n \"requestType\": \"initiate\"\r\n }\r\n }\r\n}" - }, - "schema" : { - "$ref" : "#/definitions/ApprovalConfiguration" - } - }, - "400" : { - "description" : "This status code indicates that the given approval configuration request body is not correct." - }, - "401" : { - "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." - } - }, - "security" : [ { - "Basic" : [ ] - } ] - }, - "delete" : { - "description" : "The method deletes the specified approval configuration in API Gateway.", - "operationId" : "deleteApprovalConfiguration", - "produces" : [ "application/json" ], - "parameters" : [ { - "name" : "id", - "in" : "path", - "description" : "This parameter specifies the ID of an approval configuration that is to be deleted in API Gateway.", - "required" : true, - "type" : "string" - } ], - "responses" : { - "401" : { - "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." - }, - "204" : { - "description" : "This status code indicates that the specified approval configuration has been successfully deleted from API Gateway." - }, - "404" : { - "description" : "This status code indicates that an approval configuration with the given ID could not be found in API Gateway." - } - }, - "security" : [ { - "Basic" : [ ] - } ] - } - }, - "/approvalConfigurations" : { - "get" : { - "description" : "The method retrieves a list of available approval configurations in API Gateway.", - "operationId" : "getApprovalConfigurations", - "produces" : [ "application/json" ], - "parameters" : [ ], - "responses" : { - "200" : { - "description" : "This status code indicates that a list of the available approval configurations is retrieved successfully.", - "examples" : { - "application/json" : "{\r\n \"approvalConfigurations\": [\r\n {\r\n \"id\": \"createApplication\",\r\n \"eventType\": \"createApplication\",\r\n \"isEnabled\": true,\r\n \"approversGroupId\": \"0936de2c-9fb9-4625-b5b0-b7648e0d4103\",\r\n \"approvalMode\": \"anyone\",\r\n \"approvedEmailConfiguration\": {\r\n \"emailSubject\": \"Approval of @event.type\",\r\n \"emailContent\": \"Congratulations @requestor.name !\\n\\nYour request for @event.type has been approved.\",\r\n \"enabled\": false,\r\n \"requestType\": \"approved\"\r\n },\r\n \"rejectedEmailConfiguration\": {\r\n \"emailSubject\": \"Rejection of @event.type\",\r\n \"emailContent\": \"Hello @requestor.name,\\n\\nYour @event.type request has been rejected.\\nReasons:@rejectionReason.\\n\\nBest Regards,\\nAPI Gateway Team\\n\\n*** This notification was sent automatically. Do not reply to this email.***\",\r\n \"enabled\": false,\r\n \"requestType\": \"rejected\"\r\n },\r\n \"initiateApprovalRequestEmailConfiguration\": {\r\n \"emailSubject\": \"Approval request pending\",\r\n \"emailContent\": \"Hello @approver.name,\\n\\n A request by @requestor.name to @event.type needs your review and approval.\\n\\nBest Regards,\\nAPI Gateway Team\\n\\n*** This notification was sent automatically. Do not reply to this email.***\",\r\n \"enabled\": false,\r\n \"requestType\": \"initiate\"\r\n }\r\n }\r\n ]\r\n}" - }, - "schema" : { - "$ref" : "#/definitions/ApprovalConfiguration" - } - }, - "401" : { - "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." - } - }, - "security" : [ { - "Basic" : [ ] - } ] - }, - "post" : { - "description" : "The method creates an approval configuration in API Gateway.", - "operationId" : "createApprovalConfiguration", - "consumes" : [ "application/json" ], - "produces" : [ "application/json" ], - "parameters" : [ { - "in" : "body", - "name" : "body", - "description" : "This parameter describes the request payload of an approval configuration that is to be created in API Gateway.", - "required" : true, - "schema" : { - "$ref" : "#/definitions/ApprovalConfiguration" - }, - "x-examples" : { - "application/json" : "{\r\n \"approvalConfig\": {\r\n \"id\": \"createApplication\",\r\n \"eventType\": \"createApplication\",\r\n \"isEnabled\": true,\r\n \"approversGroupId\": \"0936de2c-9fb9-4625-b5b0-b7648e0d4103\",\r\n \"approvalMode\": \"anyone\",\r\n \"approvedEmailConfiguration\": {\r\n \"emailSubject\": \"Approval of @event.type\",\r\n \"emailContent\": \"Congratulations @requestor.name !\\n\\nYour request for @event.type has been approved.\",\r\n \"enabled\": false,\r\n \"requestType\": \"approved\"\r\n },\r\n \"rejectedEmailConfiguration\": {\r\n \"emailSubject\": \"Rejection of @event.type\",\r\n \"emailContent\": \"Hello @requestor.name,\\n\\nYour @event.type request has been rejected.\\nReasons:@rejectionReason.\\n\\nBest Regards,\\nAPI Gateway Team\\n\\n*** This notification was sent automatically. Do not reply to this email.***\",\r\n \"enabled\": false,\r\n \"requestType\": \"rejected\"\r\n },\r\n \"initiateApprovalRequestEmailConfiguration\": {\r\n \"emailSubject\": \"Approval request pending\",\r\n \"emailContent\": \"Hello @approver.name,\\n\\n A request by @requestor.name to @event.type needs your review and approval.\\n\\nBest Regards,\\nAPI Gateway Team\\n\\n*** This notification was sent automatically. Do not reply to this email.***\",\r\n \"enabled\": false,\r\n \"requestType\": \"initiate\"\r\n }\r\n }\r\n}" - } - } ], - "responses" : { - "200" : { - "description" : "This status code indicates that the approval configuration has been successfully created in API Gateway.", - "examples" : { - "application/json" : "{\r\n \"approvalConfig\": {\r\n \"id\": \"createApplication\",\r\n \"eventType\": \"createApplication\",\r\n \"isEnabled\": true,\r\n \"approversGroupId\": \"0936de2c-9fb9-4625-b5b0-b7648e0d4103\",\r\n \"approvalMode\": \"anyone\",\r\n \"approvedEmailConfiguration\": {\r\n \"emailSubject\": \"Approval of @event.type\",\r\n \"emailContent\": \"Congratulations @requestor.name !\\n\\nYour request for @event.type has been approved.\",\r\n \"enabled\": false,\r\n \"requestType\": \"approved\"\r\n },\r\n \"rejectedEmailConfiguration\": {\r\n \"emailSubject\": \"Rejection of @event.type\",\r\n \"emailContent\": \"Hello @requestor.name,\\n\\nYour @event.type request has been rejected.\\nReasons:@rejectionReason.\\n\\nBest Regards,\\nAPI Gateway Team\\n\\n*** This notification was sent automatically. Do not reply to this email.***\",\r\n \"enabled\": false,\r\n \"requestType\": \"rejected\"\r\n },\r\n \"initiateApprovalRequestEmailConfiguration\": {\r\n \"emailSubject\": \"Approval request pending\",\r\n \"emailContent\": \"Hello @approver.name,\\n\\n A request by @requestor.name to @event.type needs your review and approval.\\n\\nBest Regards,\\nAPI Gateway Team\\n\\n*** This notification was sent automatically. Do not reply to this email.***\",\r\n \"enabled\": false,\r\n \"requestType\": \"initiate\"\r\n }\r\n }\r\n}" - }, - "schema" : { - "$ref" : "#/definitions/ApprovalConfiguration" - } - }, - "400" : { - "description" : "This status code indicates that the given approval configuration request body is not correct." - }, - "401" : { - "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." - } - }, - "security" : [ { - "Basic" : [ ] - } ] - } - }, - "/is/outboundproxy" : { - "get" : { - "description" : "Retrieves the list of all available outbound proxy server aliases in API Gateway.", - "operationId" : "getOutboundProxies", - "produces" : [ "application/json" ], - "parameters" : [ ], - "responses" : { - "200" : { - "description" : "This status code indicates that the outbound proxy server aliases has been successfully retireved from API Gateway.", - "examples" : { - "application/json" : "{\r\n\t\"proxyServerList\": {\r\n\t\t\"https_proxy\": {\r\n\t\t\t\"proxyAlias\": \"https_proxy\",\r\n\t\t\t\"host\": \"10.20.30.40\",\r\n\t\t\t\"port\": \"443\",\r\n\t\t\t\"username\": \"https_proxy_username\",\r\n\t\t\t\"password\": \"**********\",\r\n\t\t\t\"protocol\": \"HTTPS\",\r\n\t\t\t\"isDefault\": \"Y\",\r\n\t\t\t\"status\": \"Enabled\",\r\n\t\t\t\"ftpType\": null,\r\n\t\t\t\"socksVersion\": null,\r\n\t\t\t\"passwordHandle\": \"OutboundProxyPasswordhttps_proxy\",\r\n\t\t\t\"caller\": \"Administrator\",\r\n\t\t\t\"entityId\": \"https_proxy\"\r\n\t\t},\r\n\t\t\"ftp_proxy_alias\": {\r\n\t\t\t\"proxyAlias\": \"ftp_proxy_alias\",\r\n\t\t\t\"host\": \"ftp.proxy.server.com\",\r\n\t\t\t\"port\": \"8745\",\r\n\t\t\t\"username\": \"username\",\r\n\t\t\t\"password\": \"*****\",\r\n\t\t\t\"protocol\": \"FTP\",\r\n\t\t\t\"isDefault\": \"N\",\r\n\t\t\t\"status\": \"Enabled\",\r\n\t\t\t\"ftpType\": \"2\",\r\n\t\t\t\"socksVersion\": null,\r\n\t\t\t\"passwordHandle\": \"OutboundProxyPasswordftp_proxy_alias\",\r\n\t\t\t\"caller\": \"Administrator\",\r\n\t\t\t\"entityId\": \"ftp_proxy_alias\"\r\n\t\t},\r\n\t\t\"socks_proxy\": {\r\n\t\t\t\"proxyAlias\": \"socks_proxy\",\r\n\t\t\t\"host\": \"socks.proxy.server.com\",\r\n\t\t\t\"port\": \"447\",\r\n\t\t\t\"username\": \"\",\r\n\t\t\t\"password\": \"\",\r\n\t\t\t\"protocol\": \"SOCKS\",\r\n\t\t\t\"isDefault\": \"N\",\r\n\t\t\t\"status\": \"Disabled\",\r\n\t\t\t\"ftpType\": \"0\",\r\n\t\t\t\"socksVersion\": \"4\",\r\n\t\t\t\"passwordHandle\": null,\r\n\t\t\t\"caller\": \"Administrator\",\r\n\t\t\t\"entityId\": \"socks_proxy\"\r\n\t\t}\r\n\t}\r\n}" - }, - "schema" : { - "$ref" : "#/definitions/OutboundProxyGetResponse" - } - }, - "400" : { - "description" : "This status code indicates invalid request or bad input." - }, - "401" : { - "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." - }, - "404" : { - "description" : "This status code indicates that the requested resource is not found." - }, - "405" : { - "description" : "This status code indicates that the requested HTTP method is not supported for the resource." - }, - "500" : { - "description" : "This status code indicates an error occurred while retrieving the available outbound proxy server aliases from API Gateway." - } - }, - "security" : [ { - "Basic" : [ ] - } ] - }, - "post" : { - "operationId" : "createOutboundProxy", - "consumes" : [ "application/json" ], - "produces" : [ "application/json" ], - "parameters" : [ { - "in" : "body", - "name" : "body", - "description" : "The request payload of an outbound proxy server that is to be created in API Gateway.", - "required" : true, - "schema" : { - "$ref" : "#/definitions/OutboundProxySettings" - }, - "x-examples" : { - "application/json" : "{\r\n\t\"proxyAlias\": \"http_proxy_alias\",\r\n\t\"host\": \"proxy.http.server.com\",\r\n\t\"port\": \"80\",\r\n\t\"username\": \"proxy_user\",\r\n\t\"password\": \"proxy_password\",\r\n\t\"protocol\": \"HTTP\",\r\n\t\"isDefault\": \"N\"\r\n}" - } - } ], - "responses" : { - "200" : { - "description" : "This status code indicates that the outbound proxy server alias has been successfully created in API Gateway." - }, - "400" : { - "description" : "This status code indicates invalid request or bad input." - }, - "401" : { - "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." - }, - "404" : { - "description" : "This status code indicates that the requested resource is not found." - }, - "405" : { - "description" : "This status code indicates that the requested HTTP method is not supported for the resource." - }, - "500" : { - "description" : "This status code indicates an error occurred while persisting the outbound proxy server alias in API Gateway." - } - }, - "security" : [ { - "Basic" : [ ] - } ] - }, - "put" : { - "operationId" : "updateOutboundProxy", - "consumes" : [ "application/json" ], - "produces" : [ "application/json" ], - "parameters" : [ { - "in" : "body", - "name" : "body", - "description" : "The request payload of an outbound proxy server that is to be updated in API Gateway.", - "required" : true, - "schema" : { - "$ref" : "#/definitions/OutboundProxySettings" - }, - "x-examples" : { - "application/json" : "{\r\n\t\"proxyAlias\": \"http_proxy_alias\",\r\n\t\"host\": \"proxy.http.server.com\",\r\n\t\"port\": \"80\",\r\n\t\"username\": \"proxy_user\",\r\n\t\"password\": \"proxy_password_modified\",\r\n\t\"protocol\": \"HTTP\",\r\n\t\"isDefault\": \"N\"\r\n}" - } - } ], - "responses" : { - "200" : { - "description" : "This status code indicates that the outbound proxy server alias has been successfully updated in API Gateway." - }, - "400" : { - "description" : "This status code indicates invalid request or bad input." - }, - "401" : { - "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." - }, - "404" : { - "description" : "This status code indicates that the requested resource is not found." - }, - "405" : { - "description" : "This status code indicates that the requested HTTP method is not supported for the resource." - }, - "500" : { - "description" : "This status code indicates an error occurred while persisting the outbound proxy server alias in the API Gateway." - } - }, - "security" : [ { - "Basic" : [ ] - } ] - } - }, - "/is/outboundproxy{outboundproxyAlias}/enable" : { - "put" : { - "description" : "Enables an already existing outbound proxy server alias in API Gateway.", - "operationId" : "enableOutboundProxy", - "consumes" : [ "application/json" ], - "produces" : [ "application/json" ], - "parameters" : [ { - "name" : "outboundproxyAlias", - "in" : "path", - "description" : "The outbound proxy server alias to be enabled", - "required" : true, - "type" : "string", - "x-example" : "sample_proxy_alias" - } ], - "responses" : { - "200" : { - "description" : "This status code indicates that the outbound proxy server alias has been successfully enabled in API Gateway." - }, - "400" : { - "description" : "This status code indicates invalid request or bad input." - }, - "401" : { - "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." - }, - "404" : { - "description" : "This status code indicates that the requested resource is not found." - }, - "405" : { - "description" : "This status code indicates that the requested HTTP method is not supported for the resource." - }, - "500" : { - "description" : "This status code indicates an error occurred while enabling the outbound proxy server alias in the API Gateway." - } - }, - "security" : [ { - "Basic" : [ ] - } ] - } - }, - "/is/outboundproxy{outboundproxyAlias}/disable" : { - "put" : { - "description" : "Disables an already existing outbound proxy server alias in API Gateway.", - "operationId" : "disableOutboundProxy", - "consumes" : [ "application/json" ], - "produces" : [ "application/json" ], - "parameters" : [ { - "name" : "outboundproxyAlias", - "in" : "path", - "description" : "The outbound proxy server alias to be disabled", - "required" : true, - "type" : "string", - "x-example" : "sample_proxy_alias" - } ], - "responses" : { - "200" : { - "description" : "This status code indicates that the outbound proxy server alias has been successfully disabled in API Gateway." - }, - "400" : { - "description" : "This status code indicates invalid request or bad input." - }, - "401" : { - "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." - }, - "404" : { - "description" : "This status code indicates that the requested resource is not found." - }, - "405" : { - "description" : "This status code indicates that the requested HTTP method is not supported for the resource." - }, - "500" : { - "description" : "This status code indicates an error occurred while disabling the outbound proxy server alias in the API Gateway." - } - }, - "security" : [ { - "Basic" : [ ] - } ] - } - }, - "/is/outboundproxy/{outboundproxyAlias}" : { - "delete" : { - "description" : "Deletes the specified outbound proxy server alias from API Gateway.", - "operationId" : "deleteOutboundProxy", - "parameters" : [ { - "name" : "outboundproxyAlias", - "in" : "path", - "description" : "The outbound proxy server alias to be deleted", - "required" : true, - "type" : "string", - "x-example" : "sample_proxy_alias" - } ], - "responses" : { - "200" : { - "description" : "This status code indicates that the outbound proxy server alias has been successfully deleted from API Gateway." - }, - "400" : { - "description" : "This status code indicates invalid request or bad input." - }, - "401" : { - "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." - }, - "404" : { - "description" : "This status code indicates that the requested resource is not found." - }, - "405" : { - "description" : "This status code indicates that the requested HTTP method is not supported for the resource." - }, - "500" : { - "description" : "This status code indicates an error occurred while deleting the specified outbound proxy server alias from API Gateway." - } - }, - "security" : [ { - "Basic" : [ ] - } ] - } - }, - "/is/proxyBypass" : { - "get" : { - "description" : "The method retrieves a list of all hostlists for which outbound proxy servers are skipped. Note: proxyBypass Id is always proxyBypass", - "operationId" : "getProxyBypass", - "produces" : [ "application/json" ], - "parameters" : [ ], - "responses" : { - "200" : { - "description" : "This status code indicates that the proxyBypassAddresses are successfully retrieved.", - "examples" : { - "application/json" : "{\"proxyBypassAddresses\":[\"localhost\"]}" - }, - "schema" : { - "$ref" : "#/definitions/ProxyBypass" - } - }, - "400" : { - "description" : "This status code indicates invalid request or bad input." - }, - "401" : { - "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." - }, - "404" : { - "description" : "This status code indicates that the requested resource is not found." - }, - "405" : { - "description" : "This status code indicates that the requested HTTP method is not supported for the resource." - }, - "500" : { - "description" : "This status code indicates an error occurred while retrieving the available proxybypass from API Gateway." - } - }, - "security" : [ { - "Basic" : [ ] - } ] - }, - "post" : { - "description" : "The method updates the proxyBypassAddresses to bypass the outbound proxy servers. The API request body must contain the payload. In the proxyBypassAddresses field, type the fully qualified host and domain name of each server to which you want the Integration Server to issue requests directly. Type the host name and the domain name exactly as they appear in the URLs the server uses. To enter multiple names, separate each with commas.\r\nYou can use the asterisk (*) to identify several servers with similar names. The asterisk matches any number of characters. For example, if you want to bypass requests made to localhost, www.yahoo.com, home.microsoft.com, and all hosts whose names begin with NYC, you would type:\r\nlocalhost,www.yahoo.com,home.microsoft.com, NYC*.*", - "operationId" : "saveProxyBypass", - "consumes" : [ "application/json" ], - "produces" : [ "application/json" ], - "parameters" : [ { - "in" : "body", - "name" : "body", - "description" : "The request payload of proxybypass server that is to be saved in API Gateway.", - "required" : true, - "schema" : { - "$ref" : "#/definitions/ProxyBypass" - }, - "x-examples" : { - "application/json" : "{\"proxyBypassAddresses\":[\"localhost\"]}" - } - } ], - "responses" : { - "200" : { - "description" : "This status code indicates that the proxybypass server has been successfully created in API Gateway." - }, - "400" : { - "description" : "This status code indicates invalid request or bad input." - }, - "401" : { - "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." - }, - "404" : { - "description" : "This status code indicates that the requested resource is not found." - }, - "405" : { - "description" : "This status code indicates that the requested HTTP method is not supported for the resource." - }, - "500" : { - "description" : "This status code indicates an error occurred while persisting the proxybypass in API Gateway." - } - }, - "security" : [ { - "Basic" : [ ] - } ] - }, - "put" : { - "description" : "The method updates the proxyBypassAddresses to bypass the outbound proxy servers. The API request body must contain the payload. In the proxyBypassAddresses field, type the fully qualified host and domain name of each server to which you want the Integration Server to issue requests directly. Type the host name and the domain name exactly as they appear in the URLs the server uses. To enter multiple names, separate each with commas.\r\nYou can use the asterisk (*) to identify several servers with similar names. The asterisk matches any number of characters. For example, if you want to bypass requests made to localhost, www.yahoo.com, home.microsoft.com, and all hosts whose names begin with NYC, you would type:\r\nlocalhost,www.yahoo.com,home.microsoft.com, NYC*.*", - "operationId" : "updateProxyBypass", - "consumes" : [ "application/json" ], - "produces" : [ "application/json" ], - "parameters" : [ { - "in" : "body", - "name" : "body", - "description" : "The request payload of proxybypass that is to be updated in API Gateway.", - "required" : true, - "schema" : { - "$ref" : "#/definitions/ProxyBypass" - }, - "x-examples" : { - "application/json" : "{\"proxyBypassAddresses\":[\"localhost\"]}" - } - } ], - "responses" : { - "200" : { - "description" : "The method updates the proxyBypassAddresses.", - "examples" : { - "application/json" : "{\"proxyBypassAddresses\":[\"localhost\"]}" - } - }, - "400" : { - "description" : "This status code indicates invalid request or bad input." - }, - "401" : { - "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." - }, - "404" : { - "description" : "This status code indicates that the requested resource is not found." - }, - "405" : { - "description" : "This status code indicates that the requested HTTP method is not supported for the resource." - }, - "500" : { - "description" : "This status code indicates an error occurred while persisting the proxybypass in the API Gateway." - } - }, - "security" : [ { - "Basic" : [ ] - } ] - } - }, - "/masterPassword/setExpiry" : { - "put" : { - "description" : "The method updates the expiry interval of the master password in API Gateway.", - "operationId" : "UpdateExpiryInterval", - "consumes" : [ "application/json" ], - "produces" : [ "application/json" ], - "parameters" : [ { - "in" : "body", - "name" : "body", - "description" : "", - "required" : true, - "schema" : { - "$ref" : "#/definitions/MasterPasswordExpiryInterval" - }, - "x-examples" : { - "application/json" : "{ \r\n\t\"expireInterval\": \"30\" \r\n}\r\n\t" - } - } ], - "responses" : { - "200" : { - "description" : "This status code indicates that the master password expiry interval has been successfully updated in API Gateway", - "examples" : { - "application/json" : "{\r\n \"expireInterval\": \"60\",\r\n \"message\": \"Master password expiration interval updated\"\r\n}" - }, - "schema" : { - "$ref" : "#/definitions/MasterPasswordExpiryIntervalResponse" - } - }, - "401" : { - "description" : "This status code indicates that the necessary authentication is not supplied for accessing this resource" - }, - "400" : { - "description" : "This status code indicates that either the required parameters are missing or the parameters passed are incorrect" - } - }, - "security" : [ { - "Basic" : [ ] - } ] - } - }, - "/masterPassword/update" : { - "put" : { - "description" : "The method updates the master password in API Gateway.On successful update,all the old passwords available will be encrypted using this new master password.", - "operationId" : "UpdateMasterPassword", - "consumes" : [ "application/json" ], - "produces" : [ "application/json" ], - "parameters" : [ { - "in" : "body", - "name" : "body", - "description" : "", - "required" : true, - "schema" : { - "$ref" : "#/definitions/MasterPasswordUpdate" - }, - "x-examples" : { - "application/json" : "{ \r\n \"oldPassword\":\"bWFuYWdl\",\r\n \"newPassword\":\"c2VjdXJlcGFzc3dvcmQ=\"\r\n}" - } - } ], - "responses" : { - "200" : { - "description" : "This status code indicates that the master password has been successfully updated", - "examples" : { - "application/json" : "{\r\n \"message\": \"New master password saved\"\r\n}" - }, - "schema" : { - "$ref" : "#/definitions/MasterPasswordUpdateResponse" - } - }, - "401" : { - "description" : "This status code indicates that the necessary authentication is not supplied for accessing this resource" - }, - "400" : { - "description" : "This status code indicates that either the required parameters are missing or the parameters passed are incorrect" - } - }, - "security" : [ { - "Basic" : [ ] - } ] - } - }, - "/masterPassword/reset" : { - "put" : { - "description" : "Resets the master password to the default value in API Gateway.This should be performed when the master password is lost and after a successful reset, it is recommended to change the master password again to a secure value", - "operationId" : "ResetMasterPassword", - "produces" : [ "application/json" ], - "parameters" : [ ], - "responses" : { - "200" : { - "description" : "This status code indicates that the master password has been successfully updated to default value", - "examples" : { - "application/json" : "{\r\n \"handleCount\": \"7\",\r\n \"message\": \"7 passwords reset\"\r\n}" - }, - "schema" : { - "$ref" : "#/definitions/MasterPasswordResetResponse" - } - }, - "401" : { - "description" : "This status code indicates that the necessary authentication is not supplied for accessing this resource" - }, - "400" : { - "description" : "This status code indicates that either the required parameters are missing or the parameters passed are incorrect" - } - }, - "security" : [ { - "Basic" : [ ] - } ] - } - }, - "/masterPassword" : { - "get" : { - "description" : "This retrieves the master password properties in API Gateway.", - "operationId" : "getMasterPasswordProperties", - "consumes" : [ "application/json" ], - "produces" : [ "application/json" ], - "parameters" : [ ], - "responses" : { - "200" : { - "description" : "This status code indicates that the master password properties are retrieved successfully", - "examples" : { - "application/json" : "{\r\n \"lastChangeDate\": \"2018-09-04 11:50:51 IST\",\r\n \"expireDate\": \"2018-12-03 11:50:51 IST\",\r\n \"expireInterval\": \"90\",\r\n \"daysTilExpire\": \"75\",\r\n \"expireMessage\": null,\r\n \"statusMessage\": \"Active\"\r\n}" - }, - "schema" : { - "$ref" : "#/definitions/MasterPasswordProperties" - } - }, - "401" : { - "description" : "This status code indicates that the necessary authentication is not supplied for accessing this resource" - } - }, - "security" : [ { - "Basic" : [ ] - } ] - } - }, - "/assets/owner" : { - "post" : { - "description" : "This resource is used to change the owner of APIGateway asset", - "operationId" : "changeOwner", - "consumes" : [ "application/json" ], - "produces" : [ "application/json" ], - "parameters" : [ { - "in" : "body", - "name" : "body", - "description" : "", - "required" : true, - "schema" : { - "$ref" : "#/definitions/ChangeOwnerRequest" - }, - "x-examples" : { - "application/json" : "{\r\n\t\"assetType\":\"*\",\r\n\t\"newOwner\": \"user1\",\r\n\t\"currentOwner\": \"Administrator\"\r\n}\r\n" - } - } ], - "responses" : { - "200" : { - "description" : "This status code indicates that the ownership has been changed for the displayed assets", - "examples" : { - "application/json" : "{\r\n\t\"message\":\"Assets have been changed to user1\",\r\n\t\"apis\": [\"apiId1\", \"apiId2\"]\r\n\t\"application\": [\"appId1\", \"appId2\"]\r\n}\r\n" - }, - "schema" : { - "$ref" : "#/definitions/ChangeOwnerResponse" - } - }, - "400" : { - "description" : "Given payload is invalid" - }, - "401" : { - "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." - } - }, - "security" : [ { - "Basic" : [ ] - } ] - } - }, - "/assets/team" : { - "post" : { - "description" : "This resource is used to change the team of APIGateway asset", - "operationId" : "changeTeam", - "consumes" : [ "application/json" ], - "produces" : [ "application/json" ], - "parameters" : [ { - "in" : "body", - "name" : "body", - "description" : "", - "required" : true, - "schema" : { - "$ref" : "#/definitions/ChangeOwnerRequest" - }, - "x-examples" : { - "application/json" : "{\r\n\t\"assetType\":\"API\",\r\n\t\"assetIds\":[\"3e60f075-9415-4974-b9d8-f4a2180a3a44\"],\r\n\t\r\n\t\"newTeams\":[\"API-Gateway-Providers\"]\r\n}\r\n" - } - } ], - "responses" : { - "200" : { - "description" : "This status code indicates that the team has been changed for the displayed assets", - "examples" : { - "application/json" : "{\r\n\t\"message\":\"The assets have been assigned to the following teams : [Administrators, API-Gateway-Providers]\",\r\n\t\"api\":\"[3e60f075-9415-4974-b9d8-f4a2180a3a44]\"}\r\n" - }, - "schema" : { - "$ref" : "#/definitions/ChangeOwnerResponse" - } - }, - "400" : { - "description" : "Given payload is invalid" - }, - "401" : { - "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." - } - }, - "security" : [ { - "Basic" : [ ] - } ] - } - }, - "/apitransactions/jobs/{jobId}" : { - "get" : { - "description" : "Use this method to know the status of a specific job. This method returns the status and file name (in case of archive process) as a response. The user should be part of API-Gateway-Administrators group or else should have 'Manage purge and restore runtime events' privilege to perform this operation", - "operationId" : "trackJobStatus", - "consumes" : [ "application/json" ], - "produces" : [ "application/json" ], - "parameters" : [ { - "name" : "jobId", - "in" : "path", - "description" : "This parameter indicates the job Id. job Id is needed to identify and track the status of a job which has been initiated earlier. Ex: jobId=1504011632215", - "required" : true, - "type" : "string", - "x-example" : "1234432412312" - } ], - "responses" : { - "200" : { - "description" : "This response indicates that the status has been returned to the requestor.", - "examples" : { - "application/json" : "{\r\n \"status\": \"Completed\",\r\n \"Filename\": \"default-2017-08-31-1504177207377\"\r\n}" - } - }, - "401" : { - "description" : "This response indicates that invalid credentials have been provided for the request." - }, - "500" : { - "description" : "This response indicates that the server has encountered an error while returning the status. " - } - }, - "security" : [ { - "Basic" : [ ] - } ] - } - }, - "/apitransactions/jobs" : { - "get" : { - "description" : "This method returns a list of pending jobs. Every time you initiate archive, restore or purge process you will get the job id as a response. You can then use the specific job id to query the status of the initiated operation. The user should be part of API-Gateway-Administrators group or else should have 'Manage purge and restore runtime events' privilege to perform this operation.", - "operationId" : "listAllPendingJobs", - "consumes" : [ "application/json" ], - "produces" : [ "application/json" ], - "parameters" : [ ], - "responses" : { - "200" : { - "description" : "This response indicates that the list of in progress job ids has been returned to the requestor.", - "examples" : { - "application/json" : "{\r\n \"pendingJobs\": [124234,3312312]\r\n}" - } - }, - "401" : { - "description" : "This response indicates that invalid credentials have been provided for the request." - }, - "500" : { - "description" : "This response indicates that the server has encountered an error while returning the list of in progress job ids. " - } - }, - "security" : [ { - "Basic" : [ ] - } ] - } - }, - "/is/jndi" : { - "get" : { - "description" : "The method retrieves list of all JNDI configurations in API Gateway.", - "operationId" : "listAllJNDI", - "consumes" : [ "application/json" ], - "produces" : [ "application/json" ], - "parameters" : [ ], - "responses" : { - "200" : { - "description" : "This status code indicates that the list of JNDI configurations is successfully retrieved.", - "examples" : { - "application/json" : "{\r\n \"jndiList\": [\r\n {\r\n \"id\": \"JNDI_AMQP\",\r\n \"jndiAliasName\": \"JNDI_AMQP\",\r\n \"description\": \"JNDI_AMQP\",\r\n \"initialContextFactory\": \"org.apache.qpid.jms.jndi.JmsInitialContextFactory\",\r\n \"providerURL\": \"C:\\\\APIGateway1\\\\IntegrationServer\\\\lib\\\\jars\\\\AMQP.properties\"\r\n },\r\n {\r\n \"id\": \"JNDI_AMQP2\",\r\n \"jndiAliasName\": \"JNDI_AMQP2\",\r\n \"description\": \"JNDI_AMQP\",\r\n \"initialContextFactory\": \"org.apache.qpid.jms.jndi.JmsInitialContextFactory\",\r\n \"providerURL\": \"C:\\\\APIGateway1\\\\IntegrationServer\\\\lib\\\\jars\\\\AMQP.properties\"\r\n }\r\n ]\r\n}" - } - }, - "401" : { - "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." - } - }, - "security" : [ { - "Basic" : [ ] - } ] - }, - "post" : { - "description" : "The method creates a JNDI configuration in API Gateway. The API request body must contain the payload for the JNDI configuration", - "operationId" : "createJNDI", - "consumes" : [ "application/json" ], - "produces" : [ "application/json" ], - "parameters" : [ { - "in" : "body", - "name" : "body", - "description" : "", - "required" : true, - "schema" : { - "$ref" : "#/definitions/JNDIProviderAlias" - }, - "x-examples" : { - "application/json" : "{\"jndiAliasName\":\"JNDIALIAS22\",\"description\":\"new des\",\"initialContextFactory\":\"org.apache.qpid.jms.jndi.JmsInitialContextFactory\",\"providerURL\": \"C:\\\\APIGateway1\\\\IntegrationServer\\\\lib\\\\jars\\\\AMQP.properties\"}" - } - } ], - "responses" : { - "201" : { - "description" : "This status code indicates that the JNDI configuration has been successfully created in API Gateway, and the newly created JNDI configuration is available in the response body.", - "examples" : { - "application/json" : "{\r\n \"jndi\": {\r\n \"id\": \"JNDI_AMQPSample\",\r\n \"jndiAliasName\": \"JNDI_AMQPSample\",\r\n \"description\": \"JNDI_AMQP\",\r\n \"initialContextFactory\": \"org.apache.qpid.jms.jndi.JmsInitialContextFactory\",\r\n \"providerURL\": \"C:\\\\APIGateway1\\\\IntegrationServer\\\\lib\\\\jars\\\\AMQP.properties\"\r\n }\r\n}" - }, - "schema" : { - "$ref" : "#/definitions/JNDIProviderAlias" - } - }, - "401" : { - "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." - }, - "400" : { - "description" : "This status code indicates that the JNDI configuration with the given name already exists in API Gateway or the request body is not correct.", - "examples" : { - "application/json" : "{}" - } - } - }, - "security" : [ { - "Basic" : [ ] - } ] - }, - "put" : { - "description" : "This REST service is used to update the JNDI configuration", - "operationId" : "updateJNDI", - "consumes" : [ "application/json" ], - "produces" : [ "application/json" ], - "parameters" : [ { - "in" : "body", - "name" : "body", - "description" : "", - "required" : true, - "schema" : { - "$ref" : "#/definitions/JNDIProviderAlias" - }, - "x-examples" : { - "application/json" : "{\r\n \"id\": \"JNDI_AMQP\",\r\n \"jndiAliasName\": \"JNDI_AMQP\",\r\n \"description\": \"JNDI_AMQP\",\r\n \"initialContextFactory\": \"org.apache.qpid.jms.jndi.JmsInitialContextFactory\",\r\n \"providerURL\": \"C:\\\\APIGateway1\\\\IntegrationServer\\\\lib\\\\jars\\\\AMQP.properties\"\r\n }" - } - } ], - "responses" : { - "200" : { - "description" : "This status code indicates that API Gateway has successfully updated the specified JNDI configuration and the updated JNDI configuration details can be found in the response body", - "examples" : { - "application/json" : "{\r\n \"jndi\": {\r\n \"id\": \"JNDI_AMQP\",\r\n \"jndiAliasName\": \"JNDI_AMQP\",\r\n \"description\": \"JNDI_AMQP\",\r\n \"initialContextFactory\": \"org.apache.qpid.jms.jndi.JmsInitialContextFactory\",\r\n \"providerURL\": \"C:\\\\APIGateway1\\\\IntegrationServer\\\\lib\\\\jars\\\\AMQP.properties\"\r\n }\r\n}" - }, - "schema" : { - "$ref" : "#/definitions/JNDIProviderAlias" - } - }, - "401" : { - "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." - }, - "400" : { - "description" : "Tis status code indicates the request payload is not correct and corresponding error details can be seen in the response body", - "examples" : { - "application/json" : "{\r\n \"errorDetails\": \"Unable to create or update JNDI settings. providerURL should not be null\"\r\n}" - } - } - }, - "security" : [ { - "Basic" : [ ] - } ] - } - }, - "/is/jndi/{jndiId}" : { - "get" : { - "description" : "The method retrieves the specified JNDI configuration in API Gateway.", - "operationId" : "listJNDI", - "consumes" : [ "application/json" ], - "produces" : [ "application/json" ], - "parameters" : [ { - "name" : "jndiId", - "in" : "path", - "description" : "This path parameter is used to specify the JNDI configuration id which JNDI configuration needs to be retrived.", - "required" : true, - "type" : "string", - "x-example" : "sampleJNDI" - } ], - "responses" : { - "200" : { - "description" : "This status code indicates that the specified JNDI configuration is successfully retrieved.", - "examples" : { - "application/json" : "{\r\n \"jndi\": {\r\n \"id\": \"JNDI_AMQP\",\r\n \"jndiAliasName\": \"JNDI_AMQP\",\r\n \"description\": \"JNDI_AMQP\",\r\n \"initialContextFactory\": \"org.apache.qpid.jms.jndi.JmsInitialContextFactory\",\r\n \"providerURL\": \"C:\\\\APIGateway1\\\\IntegrationServer\\\\lib\\\\jars\\\\AMQP.properties\"\r\n }\r\n}" - }, - "schema" : { - "$ref" : "#/definitions/JNDIProviderAlias" - } - }, - "401" : { - "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." - } - }, - "security" : [ { - "Basic" : [ ] - } ] - }, - "delete" : { - "description" : "This delete request will delete the JNDI configuration based on the JNDI id which is specified in path", - "operationId" : "deleteJNDI", - "consumes" : [ "application/json" ], - "produces" : [ "application/json" ], - "parameters" : [ { - "name" : "jndiId", - "in" : "path", - "description" : "This path parameter is used to specify the JNDI id for which JNDI configuration needs to deleted.", - "required" : true, - "type" : "string", - "x-example" : "sampleJNDI" - } ], - "responses" : { - "204" : { - "description" : "This status code indicates that the specified JNDI configuration is successfully deleted" - }, - "401" : { - "description" : "This status code indicates either user didn't provide any user credential or user doesn't have API Gateway Administrator or API Gateway provider access to delete the assertion." - }, - "404" : { - "description" : "This status code indicates that the corresponding JNDI id does not exist", - "examples" : { - "application/json" : "{\r\n \"errorDetails\": \" Unable to find the resource: 685e99ee-0e1b-4afa-8ff3-4322cf2965661\"\r\n}" - } - } - }, - "security" : [ { - "Basic" : [ ] - } ] - } - }, - "/is/jndi/{jndiId}/test" : { - "get" : { - "description" : "The method is to test the given JNDI configuration in API Gateway.", - "operationId" : "testJNDI", - "consumes" : [ "application/json" ], - "produces" : [ "application/json" ], - "parameters" : [ { - "name" : "jndiId", - "in" : "path", - "required" : true, - "type" : "string", - "x-example" : "sampleJNDI" - } ], - "responses" : { - "200" : { - "description" : "This status code indicates that test result of the given JNDI configuration is successfully returned.", - "examples" : { - "application/json" : "{\r\n \"jndiTest\": {\r\n \"jndiAliasName\": \"JNDI_AMQP\",\r\n \"messages\": \"Test lookup successful\",\r\n \"test\": \"success\",\r\n \"jndiLookupData\": [\r\n \"dynamicQueues: org.apache.qpid.jms.jndi.JmsInitialContextFactory$1\",\r\n \"dynamicTopics: org.apache.qpid.jms.jndi.JmsInitialContextFactory$2\",\r\n \"qpidConnectionFactory: org.apache.qpid.jms.JmsConnectionFactory\"\r\n ]\r\n }\r\n}" - } - }, - "401" : { - "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." - } - }, - "security" : [ { - "Basic" : [ ] - } ] - } - }, - "/is/jndi/template" : { - "get" : { - "description" : "The method retrieves list of all JNDI templates in API Gateway.", - "operationId" : "fetchJNDITemplates", - "consumes" : [ "application/json" ], - "produces" : [ "application/json" ], - "parameters" : [ { - "name" : "jndiId", - "in" : "path", - "required" : true, - "type" : "string", - "x-example" : "sampleJNDI" - } ], - "responses" : { - "200" : { - "description" : "This status code indicates that the list of JNDI templates is successfully retrieved.", - "examples" : { - "application/json" : "{\r\n \"jndiTemplates\": [\r\n {\r\n \"name\": \"Broker\",\r\n \"context\": \"com.webmethods.jms.naming.WmJmsNamingCtxFactory\",\r\n \"url\": \"wmjmsnaming://@:6849\",\r\n \"otherProps\": \"com.webmethods.jms.naming.clientgroup=admin\"\r\n },\r\n {\r\n \"name\": \"UM\",\r\n \"context\": \"com.pcbsys.nirvana.nSpace.NirvanaContextFactory\",\r\n \"url\": \"nsp://:9000/\",\r\n \"otherProps\": \"\"\r\n },\r\n {\r\n \"name\": \"file system\",\r\n \"context\": \"com.sun.jndi.fscontext.RefFSContextFactory\",\r\n \"url\": \"file:/\",\r\n \"otherProps\": \"\"\r\n },\r\n {\r\n \"name\": \"LDAP\",\r\n \"context\": \"com.sun.jndi.ldap.LdapCtxFactory\",\r\n \"url\": \"ldap://:389\",\r\n \"otherProps\": \"\"\r\n },\r\n {\r\n \"name\": \"JBoss\",\r\n \"context\": \"org.jnp.interfaces.NamingContextFactory\",\r\n \"url\": \"jnp://:1099\",\r\n \"otherProps\": \"java.naming.factory.url.pkgs=org.jboss.naming:org.jnp.interfaces\"\r\n },\r\n {\r\n \"name\": \"WebLogic\",\r\n \"context\": \"weblogic.jndi.WLInitialContextFactory\",\r\n \"url\": \"t3://:7001\",\r\n \"otherProps\": \"\"\r\n }\r\n ]\r\n}" - } - }, - "401" : { - "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." - } - }, - "security" : [ { - "Basic" : [ ] - } ] - } - }, - "/is/truststore" : { - "get" : { - "description" : "Retrieves all available truststores from API Gateway.", - "operationId" : "getTruststores", - "produces" : [ "application/json" ], - "parameters" : [ ], - "responses" : { - "200" : { - "description" : "This status code indicates that all trust stores have been successfully fetched from API Gateway.", - "examples" : { - "application/json" : "{\r\n\t\"truststores\": [{\r\n\t\t\"id\": \"Truststore2\",\r\n\t\t\"keyStoreName\": \"Truststore2\",\r\n\t\t\"keyStoreDescription\": \"Some sample description for truststore.\",\r\n\t\t\"keyStoreType\": \"JKS\",\r\n\t\t\"keyStoreProvider\": \"SUN\",\r\n\t\t\"keyStorePassword\": \"wm.security.keystore.Truststore2\",\r\n\t\t\"keyStoreLocation\": null,\r\n\t\t\"certficateAliases\": [\"10.21.38.112\", \"10.60.33.18\", \"10.60.37.86\"],\r\n\t\t\"isLoaded\": true,\r\n\t\t\"fileContent\": \"/u3+7QAAAAIAAAAEAAAAAgAIbWNkc2FuMDIAAAFdsV3/PwAFWC41MDkAAAOlMIIDoTCCAomgAwIBAgIEVRJWFTANBgkqhkiG9w0BAQQFADCBgDELMAkGA1UEBhMCREUxEDAOBgNVBAgTB0dlcm1hbnkxEjAQBgNVBAcTCURlRxqzR24p9unbAbjpEAlgBgiJvUAB2KKnpkRJRhS8Ae2cOC7vgMcc6r9S/cfWNnaHYcU6wqWlat+8BWh15ZyETKCnHPwOEsBZ181YLjSznzWE7Sjl887cenULQDK55HMtyF/BEwPqQH6SGGMw4WnhbEPeyNzhMrsOpM/Y6Nbx4AJ0YjbU5jA4Igw4OPRDw4z9kXgWNrjd+nwnuQmMPwaRgwmJXQQ52NC2ccTOeZ1NeXNAsqdGNXnJ6Jzb0Ge1HYRlvQ4SDj40ZRhfLOuCdbk=\",\r\n\t\t\"uploadFileName\": \"truststore2.jks\",\r\n\t\t\"isWarning\": false,\r\n\t\t\"message\": null\r\n\t}]\r\n}" - }, - "schema" : { - "type" : "array", - "items" : { - "$ref" : "#/definitions/TrustStore" - } - } - }, - "400" : { - "description" : "This status code indicates invalid request or bad input." - }, - "401" : { - "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." - }, - "404" : { - "description" : "This status code indicates that the requested resource is not found." - }, - "405" : { - "description" : "This status code indicates that the requested HTTP method is not supported for the resource." - }, - "500" : { - "description" : "This status code indicates an error occurred while retrieving the available truststores from API Gateway." - } - }, - "security" : [ { - "Basic" : [ ] - } ] - }, - "post" : { - "description" : "Creates a truststore in API Gateway.", - "operationId" : "createTruststore", - "consumes" : [ "multipart/form-data" ], - "produces" : [ "application/json" ], - "parameters" : [ { - "name" : "keyStoreName", - "in" : "formData", - "description" : "The name of the truststore. It cannot contain spaces or special characters. The name of the trust store must be unique across all the truststores created in API Gateway.", - "required" : true, - "type" : "string", - "x-example" : "TruststoreSampleName" - }, { - "name" : "keyStoreDescription", - "in" : "formData", - "description" : "The description for the truststore.", - "required" : false, - "type" : "string", - "x-example" : "Sample description for the truststore." - }, { - "name" : "keyStoreType", - "in" : "formData", - "description" : "The certificate file format of the truststore.", - "required" : true, - "type" : "string", - "default" : "JKS", - "x-example" : "JKS", - "enum" : [ "JKS" ] - }, { - "name" : "keyStoreProvider", - "in" : "formData", - "description" : "The provider that is used for the truststore type.", - "required" : true, - "type" : "string", - "default" : "SUN", - "x-example" : "SUN", - "enum" : [ "SUN" ] - }, { - "name" : "keyStorePassword", - "in" : "formData", - "description" : "The truststore password that is defined at the time of truststore creation using a keystore utility.", - "required" : true, - "type" : "string", - "x-example" : "truststore_password" - }, { - "name" : "uploadFileName", - "in" : "formData", - "description" : "The name of the truststore file that will be used to save the truststore internally in API Gateway.", - "required" : true, - "type" : "string", - "x-example" : "truststore_file.jks" - }, { - "name" : "fileContent", - "in" : "formData", - "description" : "The contents of the truststore file.", - "required" : true, - "type" : "file" - } ], - "responses" : { - "200" : { - "description" : "This status code indicates that the truststore has been successfully created in API Gateway.", - "examples" : { - "application/json" : "{\r\n\t\"id\": \"Truststore2\",\r\n\t\"keyStoreName\": \"Truststore2\",\r\n\t\"keyStoreDescription\": null,\r\n\t\"keyStoreType\": \"JKS\",\r\n\t\"keyStoreProvider\": \"SUN\",\r\n\t\"keyStorePassword\": \"wm.security.keystore.Truststore2\",\r\n\t\"keyStoreLocation\": null,\r\n\t\"certficateAliases\": [\"10.21.38.112\", \"10.60.33.18\", \"10.60.37.86\"],\r\n\t\"isLoaded\": true,\r\n\t\"fileContent\": \"/u3+7QAAAAIAAAAEAAAAAgAIbWNkc2FuMDIAAAFdsV3/PwAFWC41MDkAAAOlMIIDoTCCAomgAwIBAgIEVRJWFTANBgkqhkiG9w0BAQQFADCBgDELMAkGA1UEBhMCREUxEDAOBgNVBAgTB0dlcm1hbnkxEjAQBgNVBAcTCURlRxqzR24p9unbAbjpEAlgBgiJvUAB2KKnpkRJRhS8Ae2cOC7vgMcc6r9S/cfWNnaHYcU6wqWlat+8BWh15ZyETKCnHPwOEsBZ181YLjSznzWE7Sjl887cenULQDK55HMtyF/BEwPqQH6SGGMw4WnhbEPeyNzhMrsOpM/Y6Nbx4AJ0YjbU5jA4Igw4OPRDw4z9kXgWNrjd+nwnuQmMPwaRgwmJXQQ52NC2ccTOeZ1NeXNAsqdGNXnJ6Jzb0Ge1HYRlvQ4SDj40ZRhfLOuCdbk=\",\r\n\t\"uploadFileName\": \"truststore2.jks\",\r\n\t\"isWarning\": false,\r\n\t\"message\": null\r\n}" - }, - "schema" : { - "$ref" : "#/definitions/TrustStore" - } - }, - "400" : { - "description" : "This status code indicates invalid request or bad input." - }, - "401" : { - "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." - }, - "404" : { - "description" : "This status code indicates that the requested resource is not found." - }, - "405" : { - "description" : "This status code indicates that the requested HTTP method is not supported for the resource." - }, - "500" : { - "description" : "This status code indicates an error occurred while persisting the truststore in API Gateway." - } - }, - "security" : [ { - "Basic" : [ ] - } ] - } - }, - "/is/truststore/{trustStoreName}" : { - "get" : { - "description" : "Retrieves an existing truststore matching the given name from API Gateway.", - "operationId" : "getTruststore", - "produces" : [ "application/json" ], - "parameters" : [ { - "name" : "trustStoreName", - "in" : "path", - "description" : "Truststore name to identify the corresponding trust store in API Gateway", - "required" : true, - "type" : "string", - "x-example" : "DEFAULT_IS_TRUSTSTORE" - } ], - "responses" : { - "200" : { - "description" : "This status code indicates that the truststore has been successfully retrieved from API Gateway.", - "examples" : { - "application/json" : "{\r\n\t\"truststores\": [{\r\n\t\t\"id\": \"Truststore2\",\r\n\t\t\"keyStoreName\": \"Truststore2\",\r\n\t\t\"keyStoreDescription\": \"Some sample description for truststore.\",\r\n\t\t\"keyStoreType\": \"JKS\",\r\n\t\t\"keyStoreProvider\": \"SUN\",\r\n\t\t\"keyStorePassword\": \"wm.security.keystore.Truststore2\",\r\n\t\t\"keyStoreLocation\": null,\r\n\t\t\"certficateAliases\": [\"10.21.38.112\", \"10.60.33.18\", \"10.60.37.86\"],\r\n\t\t\"isLoaded\": true,\r\n\t\t\"fileContent\": \"/u3+7QAAAAIAAAAEAAAAAgAIbWNkc2FuMDIAAAFdsV3/PwAFWC41MDkAAAOlMIIDoTCCAomgAwIBAgIEVRJWFTANBgkqhkiG9w0BAQQFADCBgDELMAkGA1UEBhMCREUxEDAOBgNVBAgTB0dlcm1hbnkxEjAQBgNVBAcTCURlRxqzR24p9unbAbjpEAlgBgiJvUAB2KKnpkRJRhS8Ae2cOC7vgMcc6r9S/cfWNnaHYcU6wqWlat+8BWh15ZyETKCnHPwOEsBZ181YLjSznzWE7Sjl887cenULQDK55HMtyF/BEwPqQH6SGGMw4WnhbEPeyNzhMrsOpM/Y6Nbx4AJ0YjbU5jA4Igw4OPRDw4z9kXgWNrjd+nwnuQmMPwaRgwmJXQQ52NC2ccTOeZ1NeXNAsqdGNXnJ6Jzb0Ge1HYRlvQ4SDj40ZRhfLOuCdbk=\",\r\n\t\t\"uploadFileName\": \"truststore2.jks\",\r\n\t\t\"isWarning\": false,\r\n\t\t\"message\": null\r\n\t}]\r\n}" - }, - "schema" : { - "type" : "array", - "items" : { - "$ref" : "#/definitions/TrustStore" - } - } - }, - "400" : { - "description" : "This status code indicates invalid request or bad input." - }, - "401" : { - "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." - }, - "404" : { - "description" : "This status code indicates that the requested resource is not found." - }, - "405" : { - "description" : "This status code indicates that the requested HTTP method is not supported for the resource." - }, - "500" : { - "description" : "This status code indicates an error occurred while retrieving the truststore from API Gateway." - } - }, - "security" : [ { - "Basic" : [ ] - } ] - }, - "post" : { - "description" : "Updates an already existing truststore in API Gateway.", - "operationId" : "updateTruststore", - "consumes" : [ "multipart/form-data" ], - "produces" : [ "application/json" ], - "parameters" : [ { - "name" : "trustStoreName", - "in" : "path", - "description" : "The name of the truststore. It cannot contain spaces or special characters. The name of the trust store must be unique across all the truststores created in API Gateway.", - "required" : true, - "type" : "string", - "x-example" : "TruststoreSampleName" - }, { - "name" : "keyStoreDescription", - "in" : "formData", - "description" : "The description for the truststore.", - "required" : false, - "type" : "string", - "x-example" : "Sample description for the truststore." - }, { - "name" : "keyStoreType", - "in" : "formData", - "description" : "The certificate file format of the truststore.", - "required" : true, - "type" : "string", - "default" : "JKS", - "x-example" : "JKS", - "enum" : [ "JKS" ] - }, { - "name" : "keyStoreProvider", - "in" : "formData", - "description" : "The provider that is used for the truststore type.", - "required" : true, - "type" : "string", - "default" : "SUN", - "x-example" : "SUN", - "enum" : [ "SUN" ] - }, { - "name" : "keyStorePassword", - "in" : "formData", - "description" : "The truststore password that is defined at the time of truststore creation using a keystore utility.", - "required" : true, - "type" : "string", - "x-example" : "truststore_password" - }, { - "name" : "uploadFileName", - "in" : "formData", - "description" : "The name of the truststore file that will be used to save the truststore internally in API Gateway.", - "required" : true, - "type" : "string", - "x-example" : "truststore_file.jks" - }, { - "name" : "fileContent", - "in" : "formData", - "description" : "The contents of the truststore file.", - "required" : true, - "type" : "file" - } ], - "responses" : { - "200" : { - "description" : "This status code indicates that the truststore has been successfully updated in API Gateway.", - "examples" : { - "application/json" : "{\r\n\t\"id\": \"Truststore2\",\r\n\t\"keyStoreName\": \"Truststore2\",\r\n\t\"keyStoreDescription\": null,\r\n\t\"keyStoreType\": \"JKS\",\r\n\t\"keyStoreProvider\": \"SUN\",\r\n\t\"keyStorePassword\": \"wm.security.keystore.Truststore2\",\r\n\t\"keyStoreLocation\": null,\r\n\t\"certficateAliases\": [\"10.21.38.112\", \"10.60.33.18\", \"10.60.37.86\"],\r\n\t\"isLoaded\": true,\r\n\t\"fileContent\": \"/u3+7QAAAAIAAAAEAAAAAgAIbWNkc2FuMDIAAAFdsV3/PwAFWC41MDkAAAOlMIIDoTCCAomgAwIBAgIEVRJWFTANBgkqhkiG9w0BAQQFADCBgDELMAkGA1UEBhMCREUxEDAOBgNVBAgTB0dlcm1hbnkxEjAQBgNVBAcTCURlRxqzR24p9unbAbjpEAlgBgiJvUAB2KKnpkRJRhS8Ae2cOC7vgMcc6r9S/cfWNnaHYcU6wqWlat+8BWh15ZyETKCnHPwOEsBZ181YLjSznzWE7Sjl887cenULQDK55HMtyF/BEwPqQH6SGGMw4WnhbEPeyNzhMrsOpM/Y6Nbx4AJ0YjbU5jA4Igw4OPRDw4z9kXgWNrjd+nwnuQmMPwaRgwmJXQQ52NC2ccTOeZ1NeXNAsqdGNXnJ6Jzb0Ge1HYRlvQ4SDj40ZRhfLOuCdbk=\",\r\n\t\"uploadFileName\": \"truststore2.jks\",\r\n\t\"isWarning\": false,\r\n\t\"message\": null\r\n}" - }, - "schema" : { - "$ref" : "#/definitions/TrustStore" - } - }, - "400" : { - "description" : "This status code indicates invalid request or bad input." - }, - "401" : { - "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." - }, - "404" : { - "description" : "This status code indicates that the requested resource is not found." - }, - "405" : { - "description" : "This status code indicates that the requested HTTP method is not supported for the resource." - }, - "500" : { - "description" : "This status code indicates an error occurred while persisting the truststore in API Gateway." - } - }, - "security" : [ { - "Basic" : [ ] - } ] - }, - "delete" : { - "description" : "Deletes an already existing truststore matching the name in API Gateway.", - "operationId" : "deleteTruststore", - "parameters" : [ { - "name" : "trustStoreName", - "in" : "path", - "description" : "Truststore name to identify the corresponding trust store to delete in API Gateway", - "required" : true, - "type" : "string", - "x-example" : "DEFAULT_IS_TRUSTSTORE" - } ], - "responses" : { - "200" : { - "description" : "This status code indicates that the trust store has been successfully deleted from API Gateway." - }, - "400" : { - "description" : "This status code indicates invalid request or bad input." - }, - "401" : { - "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." - }, - "404" : { - "description" : "This status code indicates that the requested resource is not found." - }, - "405" : { - "description" : "This status code indicates that the requested HTTP method is not supported for the resource." - }, - "500" : { - "description" : "This status code indicates an error occurred while retrieving the truststore from API Gateway." - } - }, - "security" : [ { - "Basic" : [ ] - } ] - } - }, - "/licenseNotificationCriteria" : { - "get" : { - "description" : "Transaction based license notification criteria are like a usage checkpoint and whenever usage reaches to that checkpoint, a notification will be generated. This GET method returns the existing transaction based license notification criteria's as a response.The user should be part of API-Gateway-Administrators group or else should have 'manage administration configurations' privilege to add notification criteria.", - "operationId" : "getAllNotificationCriteria", - "consumes" : [ "application/json" ], - "produces" : [ "application/json" ], - "parameters" : [ ], - "responses" : { - "200" : { - "description" : "This response indicates that the list of notification criteria's has been returned successfully. The response body is the list of notification criteria's.", - "examples" : { - "application/json" : "{\r\n \"notificationCriteriaList\": [\r\n {\r\n \"id\": \"1503882085022\",\r\n \"user\": \"admin\",\r\n \"notifyAt\": 100,\r\n \"notificationType\": \"UI-notification\",\r\n \"creationDate\": \"1503560319396\",\r\n \"defaultNotificationCriteria\": true\r\n },\r\n {\r\n \"id\": \"1503882084702\",\r\n \"user\": \"admin\",\r\n \"notifyAt\": 90,\r\n \"notificationType\": \"UI-notification\",\r\n \"creationDate\": \"1503560319260\",\r\n \"defaultNotificationCriteria\": true\r\n }\r\n ],\r\n \"result\": \"success\"\r\n}" - } - }, - "401" : { - "description" : "This response indicates that invalid credentials have been provided for the request." - }, - "500" : { - "description" : "This response indicates that the server has encountered an error while fetching the list of notification criteria's" - } - }, - "security" : [ { - "Basic" : [ ] - } ] - }, - "post" : { - "description" : "Transaction based license(TBL) notification criteria is used to monitor the API Gateway usage. API Gateway TBL will have the the permitted invocations per month defined in the license file and if user want to get notified when usage reaches to some point before it breaches the license limit, then user has to add a notification criteria by mentioning the usage point and notification will be generated when usage reaches to that point. This POST method is used to create transaction based license notification criteria in API Gateway. The user should be part of API-Gateway-Administrators group or else should have 'manage administration configurations' privilege to add notification criteria.", - "operationId" : "saveNotificationCriteria", - "consumes" : [ "application/json" ], - "produces" : [ "application/json" ], - "parameters" : [ { - "in" : "body", - "name" : "body", - "description" : "", - "required" : true, - "schema" : { - "$ref" : "#/definitions/NotificationCriteria" - }, - "x-examples" : { - "application/json" : "{\"notificationCriteria\":{\"user\":\"admin\",\"notifyAt\":\"70\",\"email\":\"sss@sag.com\",\"notificationType\":\"both\"}}" - } - } ], - "responses" : { - "201" : { - "description" : "This response indicates that the notification criteria has been created successfully.", - "examples" : { - "application/json" : "{\r\n \"notificationCriteriaResponse\": \"license notificationCriteria created successfully\"\r\n}" - } - }, - "401" : { - "description" : "This response indicates that invalid credentials have been provided for the request." - }, - "500" : { - "description" : "This response indicates that the server has encountered an error while creating the notification criteria" - } - }, - "security" : [ { - "Basic" : [ ] - } ] - }, - "put" : { - "description" : "This PUT method is used to update the existing transaction based license notification criteria in API Gateway.The user should be part of API-Gateway-Administrators group or else should have 'manage administration configurations' privilege to add notification criteria.", - "operationId" : "updateNotificationCriteria", - "consumes" : [ "application/json" ], - "produces" : [ "application/json" ], - "parameters" : [ { - "in" : "body", - "name" : "body", - "description" : "", - "required" : true, - "schema" : { - "$ref" : "#/definitions/NotificationCriteria" - }, - "x-examples" : { - "application/json" : "{\"notificationCriteria\":{\"id\":\"123\",\"notifyAt\":\"70\",\"email\":\"sss@sag.com\",\"notificationType\":\"both\"}}" - } - } ], - "responses" : { - "200" : { - "description" : "This response indicates that the notification criteria has been updated successfully.", - "examples" : { - "application/json" : "{\r\n \"notificationCriteriaResponse\": \"license notificationCriteria updated sucessfully\"\r\n}" - } - }, - "401" : { - "description" : "This response indicates that invalid credentials have been provided for the request." - }, - "500" : { - "description" : "This response indicates that the server has encountered an error while updating the notification criteria" - } - }, - "security" : [ { - "Basic" : [ ] - } ] - } - }, - "/licenseNotificationCriteria/{notificationCriteriaId}" : { - "get" : { - "description" : "The GET method returns the transaction based license notification criteria based on the id. \n\nTransaction based license notification criteria is like a usage check point whenever usage reaches to that check point user will get notified by the notification.The user should be part of API-Gateway-Administrators group or else should have 'manage administration configurations' privilege to add notification criteria.", - "operationId" : "getNotificationCriteria", - "consumes" : [ "application/json" ], - "produces" : [ "application/json" ], - "parameters" : [ { - "name" : "notificationCriteriaId", - "in" : "path", - "description" : "This parameter indicates the notification criteria id to fetch the notification criteria", - "required" : true, - "type" : "string", - "x-example" : "12334" - } ], - "responses" : { - "200" : { - "description" : "This response indicates that the notification criteria has been returned successfully. The response body is the notification criteria.", - "examples" : { - "application/json" : "{\"notificationCriteria\":{\"id\":\"2423422\",\"user\":\"admin\",\"notifyAt\":\"70\",\"email\":\"sss@sag.com\",\"notificationType\":\"both\"}}" - } - }, - "401" : { - "description" : "This response indicates that invalid credentials have been provided for the request." - }, - "500" : { - "description" : "This response indicates that the server has encountered an error while fetching the the notification criteria" - } - }, - "security" : [ { - "Basic" : [ ] - } ] - }, - "delete" : { - "description" : "This method deletes the transaction based license notification criteria based on the id. The user should be part of API-Gateway-Administrators group or else should have 'manage administration configurations' privilege to add notification criteria.", - "operationId" : "deleteNotificationCriteria", - "consumes" : [ "application/json" ], - "produces" : [ "application/json" ], - "parameters" : [ { - "name" : "notificationCriteriaId", - "in" : "path", - "description" : "This parameter indicates the notification criteria id to purge the notification criteria", - "required" : true, - "type" : "string", - "x-example" : "12334" - } ], - "responses" : { - "204" : { - "description" : "This response indicates that the transaction based license notification criteria deleted successfully." - }, - "401" : { - "description" : "This response indicates that invalid credentials have been provided for the request." - }, - "400" : { - "description" : "This status code indicates that the request URL is not valid." - }, - "500" : { - "description" : "This response indicates that the server has encountered an error while purging the notification criteria. " - } - }, - "security" : [ { - "Basic" : [ ] - } ] - } - }, - "/urlaliases" : { - "get" : { - "description" : "Retrieves all URL Aliases or a URL Alias with a particular ID in API Gateway (if the query parameter alias is provided).", - "operationId" : "getURLALias", - "produces" : [ "application/json" ], - "parameters" : [ { - "name" : "alias", - "in" : "query", - "description" : "The name of the URL alias to be retrieved. If this query parameter is provided, then it retrieves the URL Aliases identified by the given alias.", - "required" : false, - "type" : "string", - "x-example" : "SampleAlias" - } ], - "responses" : { - "200" : { - "description" : "This status code indicates that the fetching of the requested URL alias(es) from API Gateway have been successful.", - "schema" : { - "$ref" : "#/definitions/URLAliasesGetResponse" - } - }, - "400" : { - "description" : "This status code indicates invalid request or bad input." - }, - "401" : { - "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." - }, - "404" : { - "description" : "This status code indicates that the requested resource is not found." - }, - "405" : { - "description" : "This status code indicates that the requested HTTP method is not supported for the resource." - }, - "500" : { - "description" : "This status code indicates an error occurred while retrieving the URL Alias from API Gateway." - } - }, - "security" : [ { - "Basic" : [ ] - } ] - }, - "post" : { - "description" : "Creates a new URL Alias in API Gateway.", - "operationId" : "createURLALias", - "consumes" : [ "application/json" ], - "produces" : [ "application/json" ], - "parameters" : [ { - "in" : "body", - "name" : "body", - "description" : "The request body for creating a new URL Alias in API Gateway.", - "required" : true, - "schema" : { - "$ref" : "#/definitions/URLAliasSettings" - } - } ], - "responses" : { - "200" : { - "description" : "This status code indicates that the URL alias has been successfully created in API Gateway.", - "schema" : { - "$ref" : "#/definitions/URLAliasSettings" - } - }, - "400" : { - "description" : "This status code indicates invalid request or bad input." - }, - "401" : { - "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." - }, - "404" : { - "description" : "This status code indicates that the requested resource is not found." - }, - "405" : { - "description" : "This status code indicates that the requested HTTP method is not supported for the resource." - }, - "500" : { - "description" : "This status code indicates an error occurred while persisting the URL Alias in the API Gateway." - } - }, - "security" : [ { - "Basic" : [ ] - } ] - }, - "put" : { - "description" : "Updates an existing URL Alias in API Gateway.", - "operationId" : "updateURLALias", - "consumes" : [ "application/json" ], - "produces" : [ "application/json" ], - "parameters" : [ { - "in" : "body", - "name" : "body", - "description" : "The request body for updating an existing URL Alias in API Gateway.", - "required" : true, - "schema" : { - "$ref" : "#/definitions/URLAliasSettings" - } - } ], - "responses" : { - "200" : { - "description" : "This status code indicates that the URL alias has been successfully updated in API Gateway.", - "schema" : { - "$ref" : "#/definitions/URLAliasSettings" - } - }, - "400" : { - "description" : "This status code indicates invalid request or bad input." - }, - "401" : { - "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." - }, - "404" : { - "description" : "This status code indicates that the requested resource is not found." - }, - "405" : { - "description" : "This status code indicates that the requested HTTP method is not supported for the resource." - }, - "500" : { - "description" : "This status code indicates an error occurred while persisting the URL Alias in the API Gateway." - } - }, - "security" : [ { - "Basic" : [ ] - } ] - }, - "delete" : { - "description" : "The method deletes an URL alias in API Gateway.", - "operationId" : "deleteURLAlias", - "parameters" : [ { - "name" : "alias", - "in" : "query", - "description" : "The name of the URL alias to be deleted.", - "required" : true, - "type" : "string", - "x-example" : "SampleAlias" - } ], - "responses" : { - "200" : { - "description" : "This status code indicates that the URL alias has been successfully deleted in API Gateway." - }, - "400" : { - "description" : "This status code indicates invalid request or bad input." - }, - "401" : { - "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." - }, - "404" : { - "description" : "This status code indicates that the requested resource is not found." - }, - "405" : { - "description" : "This status code indicates that the requested HTTP method is not supported for the resource." - }, - "500" : { - "description" : "This status code indicates an error occurred while persisting the URL Alias in the API Gateway." - } - }, - "security" : [ { - "Basic" : [ ] - } ] - } - }, - "/apitransactions/archives" : { - "get" : { - "description" : "This GET method is used to fetch the details of existing archive files and response of this method would be the list of archive file names. Select one from the list of archive file names returned by this method and use the POST /apitransactions/archives/{fileName} method to restore.The user should be part of API-Gateway-Administrators group or else should have 'Manage purge and restore runtime events' privilege to perform this operation.", - "operationId" : "listAllArchives", - "consumes" : [ "application/json" ], - "produces" : [ "application/json" ], - "parameters" : [ ], - "responses" : { - "200" : { - "description" : "This response indicates that the list of archive file names returned successfully. The response body is the list of archive file names.", - "examples" : { - "application/json" : "{\r\n \"archiveFiles\": [\r\n \"default-2017-08-29-1504011306456\",\r\n \"default-2017-08-29-1504012415981\"\r\n ]\r\n}" - } - }, - "401" : { - "description" : "This response indicates that invalid credentials have been provided for the request." - }, - "500" : { - "description" : "This response indicates that the server has encountered an error while returning the list of archive file names" - } - }, - "security" : [ { - "Basic" : [ ] - } ] - }, - "post" : { - "description" : "This method is used to archive the runtime events and metrics. You can additionally scope the archive data using input parameter filters. This method returns the job id as the response which will be used to know the status of the job. \n\nUse the GET /apitransactions/jobs/{jobId} to know the status, file name and use POST /apitransactions/archives/{fileName} method to restore. The user should be part of API-Gateway-Administrators group or else should have 'Manage purge and restore runtime events' privilege to perform this operation.", - "operationId" : "apiTransactionsArchiveBasedOnDuration", - "consumes" : [ "application/json" ], - "produces" : [ "application/json" ], - "parameters" : [ { - "name" : "until", - "in" : "query", - "description" : "This is a date parameter. All the specified api transactions until the given date will be purged. Example value: until=2017-12-18 00:00:00. Either one of until or duration is a mandatory parameter", - "required" : true, - "type" : "string", - "x-example" : "until=2017-10-10 00:00:00" - }, { - "name" : "olderThan", - "in" : "query", - "description" : "All the api transactions that are older than the value specified will be purged. Ex: olderThan='2d'. Possible values are d(days),M(months),y(years), lets say a. 2d means 2days b. 1M means 1 month c. 1y means 1 year", - "required" : false, - "type" : "string", - "x-example" : "olderThan=2d" - }, { - "name" : "eventType", - "in" : "query", - "description" : "This parameter is used to specify the api transaction type. Specify eventType=ALL to archive all the events and specify any specific type to archive that particular event type alone. Ex: eventType=transactionalEvents. The available event types are as follows 1.transactionalEvents 2.monitorEvents 3.errorEvents 4.performanceMetrics 5.threatProtectionEvents 6.lifecycleEvents 7.policyViolationEvents 8.auditLogs 9.applicationlogs", - "required" : true, - "type" : "string", - "x-example" : "eventType=ALL" - } ], - "responses" : { - "202" : { - "description" : "This response indicates that the archiving process has been started and returned the jobId to track it further.", - "examples" : { - "application/json" : "{\r\n \"jobId\": \"1504177213671\"\r\n}" - } - }, - "401" : { - "description" : "This response indicates that invalid credentials have been provided for the request." - }, - "400" : { - "description" : "This status code indicates that the request URL is not valid." - }, - "500" : { - "description" : "This response indicates that the server has encountered an error while archiving the api transactions. " - } - }, - "security" : [ { - "Basic" : [ ] - } ] - } - }, - "/apitransactions/archives/{fileName}" : { - "post" : { - "description" : "This method is used to restore the runtime data by specifying the archive file name. See GET /apitransactions/archives/ to know how to get the existing archive file names for more details. This method returns the job id as a response to track the status further. The user should be part of API-Gateway-Administrators group or else should have 'Manage purge and restore runtime events' privilege to perform this operation.", - "operationId" : "restoreData", - "consumes" : [ "application/json" ], - "produces" : [ "application/json" ], - "parameters" : [ { - "name" : "fileName", - "in" : "path", - "description" : "This parameter indicates the file name to restore. Ex: fileName=default-2017-08-29-1504011306456.", - "required" : true, - "type" : "string", - "x-example" : "default-2017-02-09-1486644396751" - } ], - "responses" : { - "202" : { - "description" : "This response indicates that the restore process has been started and returned the jobId to track it further.", - "examples" : { - "application/json" : "{\r\n \"jobId\": \"1504177213671\"\r\n}" - } - }, - "401" : { - "description" : "This response indicates that invalid credentials have been provided for the request." - }, - "500" : { - "description" : "This response indicates that the server has encountered an error while restoring the archive file. " - } - }, - "security" : [ { - "Basic" : [ ] - } ] - } - }, - "/rule/{ruleId}" : { - "get" : { - "description" : "The method retrieves the details of a rule in API Gateway.", - "operationId" : "getRule", - "produces" : [ "application/json" ], - "parameters" : [ { - "name" : "ruleId", - "in" : "path", - "description" : "The path parameter specifies the id of a rule that is to be retrieved.", - "required" : true, - "type" : "string", - "x-example" : "732c4526-db9a-4ef9-9782-edda1a6aa9bc" - } ], - "responses" : { - "200" : { - "description" : "This status code indicates that the details of the rule is successfully retrieved.", - "examples" : { - "application/json" : "{\r\n \"rule\": {\r\n \"id\": \"69dbb4aa-2c8e-431d-8a72-3af171c2ca44\",\r\n \"ruleType\": \"teamAssignmentRule\",\r\n \"name\": \"pet2rule\",\r\n \"attributeContexts\": [\r\n \"api\",\r\n \"application\",\r\n \"package\",\r\n \"plan\"\r\n ],\r\n \"ruleLogicalOperator\": \"AND\",\r\n \"ruleExpressions\": [\r\n {\r\n \"attributeName\": \"name\",\r\n \"operator\": \"startsWith\",\r\n \"attributeValue\": \"pet2\"\r\n }\r\n ],\r\n \"owner\": \"Administrator\",\r\n \"active\": false,\r\n \"teamsAssigned\": [\r\n \"55fd3eb7-668b-4aba-b3ad-6136448e2bed\"\r\n ]\r\n }\r\n}" - }, - "schema" : { - "$ref" : "#/definitions/Rule" - } - }, - "404" : { - "description" : "This status code indicates that a rule with the given id could not be found in API Gateway." - }, - "401" : { - "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." - } - }, - "security" : [ { - "Basic" : [ ] - } ] - }, - "put" : { - "description" : "The method updates the details of a specified rule in API Gateway. The API request body must contain the payload for the updated rule.", - "operationId" : "updateRule", - "consumes" : [ "application/json" ], - "produces" : [ "application/json" ], - "parameters" : [ { - "name" : "ruleId", - "in" : "path", - "description" : "The path parameter specifies the id of the rule that is to be updated in API Gateway.", - "required" : true, - "type" : "string", - "x-example" : "732c4526-db9a-4ef9-9782-edda1a6aa9bc" - }, { - "in" : "body", - "name" : "body", - "description" : "This parameter describes the request payload of an rule that is to be updated in API Gateway.", - "required" : true, - "schema" : { - "$ref" : "#/definitions/Rule" - }, - "x-examples" : { - "application/json" : "{\r\n \"attributeContexts\": [\r\n \"api\",\r\n \"application\",\r\n \"package\",\r\n \"plan\"\r\n ],\r\n \"name\": \"pet2rule\",\r\n \"ruleExpressions\": [\r\n {\r\n \"attributeName\": \"name\",\r\n \"attributeValue\": \"pet2\",\r\n \"operator\": \"startsWith\"\r\n }\r\n ],\r\n \"ruleLogicalOperator\": \"AND\",\r\n \"ruleType\": \"teamAssignmentRule\",\r\n \"teamsAssigned\": [\r\n \"55fd3eb7-668b-4aba-b3ad-6136448e2bed\"\r\n ]\r\n}" - } - } ], - "responses" : { - "200" : { - "description" : "This status code indicates that the rule has been successfully updated in API Gateway, and the updated rule is available in the response body.", - "examples" : { - "application/json" : "{\r\n \"rule\": {\r\n \"id\": \"69dbb4aa-2c8e-431d-8a72-3af171c2ca44\",\r\n \"ruleType\": \"teamAssignmentRule\",\r\n \"name\": \"pet2rule\",\r\n \"attributeContexts\": [\r\n \"api\",\r\n \"application\",\r\n \"package\",\r\n \"plan\"\r\n ],\r\n \"ruleLogicalOperator\": \"AND\",\r\n \"ruleExpressions\": [\r\n {\r\n \"attributeName\": \"name\",\r\n \"operator\": \"startsWith\",\r\n \"attributeValue\": \"pet2\"\r\n }\r\n ],\r\n \"owner\": \"Administrator\",\r\n \"active\": false,\r\n \"teamsAssigned\": [\r\n \"55fd3eb7-668b-4aba-b3ad-6136448e2bed\"\r\n ]\r\n }\r\n}" - }, - "schema" : { - "$ref" : "#/definitions/Rule" - } - }, - "404" : { - "description" : "This status code indicates that an rule with the specified id could not be found in API Gateway.", - "examples" : { - "application/json" : "{}" - } - }, - "405" : { - "description" : "Method is not allowed" - }, - "400" : { - "description" : "This status code indicates that the request body is invalid." - }, - "401" : { - "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." - } - }, - "security" : [ { - "Basic" : [ ] - } ] - }, - "delete" : { - "description" : "The method deletes a rule from API Gateway.", - "operationId" : "deleteRule", - "parameters" : [ { - "name" : "ruleId", - "in" : "path", - "description" : "The path parameter specifies the id of a rule that is to be deleted from API Gateway.", - "required" : true, - "type" : "string", - "x-example" : "732c4526-db9a-4ef9-9782-edda1a6aa9bc" - } ], - "responses" : { - "204" : { - "description" : "This status code indicates that the specified rule has been successfully deleted from API Gateway." - }, - "404" : { - "description" : "This status code indicates that an rule with the given id could not be found in API Gateway." - }, - "405" : { - "description" : "This status code indicates that the specified HTTP method is not allowed for the requested rule in API Gateway." - }, - "401" : { - "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." - } - }, - "security" : [ { - "Basic" : [ ] - } ] - } - }, - "/rule/{ruleId}/activate" : { - "put" : { - "description" : "This REST request is used to activate a rule and this request doesn't require any request body.", - "operationId" : "activateRule", - "consumes" : [ "application/json" ], - "produces" : [ "application/json" ], - "parameters" : [ { - "name" : "ruleId", - "in" : "path", - "description" : "The path parameter should be the id of rule that needs to be activated.", - "required" : true, - "type" : "string", - "x-example" : "732c4526-db9a-4ef9-9782-edda1a6aa9bc" - } ], - "responses" : { - "200" : { - "description" : "This status code indicates that the rule specified is activated successfully", - "examples" : { - "application/json" : "{\r\n \"rule\": {\r\n \"id\": \"a58ba6e4-47fd-4d24-9d11-8a72d31bd805\",\r\n \"ruleType\": \"teamAssignmentRule\",\r\n \"name\": \"pet2rule\",\r\n \"attributeContexts\": [\r\n \"api\",\r\n \"application\",\r\n \"package\",\r\n \"plan\"\r\n ],\r\n \"ruleLogicalOperator\": \"AND\",\r\n \"ruleExpressions\": [\r\n {\r\n \"attributeName\": \"name\",\r\n \"operator\": \"startsWith\",\r\n \"attributeValue\": \"pet2\"\r\n }\r\n ],\r\n \"owner\": \"Administrator\",\r\n \"active\": true,\r\n \"teamsAssigned\": [\r\n \"55fd3eb7-668b-4aba-b3ad-6136448e2bed\"\r\n ]\r\n }\r\n}" - }, - "schema" : { - "$ref" : "#/definitions/Rule" - } - }, - "404" : { - "description" : "This status code indicates that the rule id specified is not found in API Gateway" - }, - "405" : { - "description" : "Method is not allowed" - }, - "400" : { - "description" : "Request body is not valid" - }, - "401" : { - "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." - } - }, - "security" : [ { - "Basic" : [ ] - } ] - } - }, - "/rule/{ruleId}/deactivate" : { - "put" : { - "description" : "This REST request is used to deactivate a rule and it doesn't require any request body.", - "operationId" : "deactivateRule", - "consumes" : [ "application/json" ], - "produces" : [ "application/json" ], - "parameters" : [ { - "name" : "ruleId", - "in" : "path", - "description" : "The path parameter should be the id of rule that needs to be deactivated.", - "required" : true, - "type" : "string", - "x-example" : "732c4526-db9a-4ef9-9782-edda1a6aa9bc" - } ], - "responses" : { - "200" : { - "description" : "This status code indicates that the rule id specified is deactivated successfully", - "examples" : { - "application/json" : "{\r\n \"rule\": {\r\n \"id\": \"a58ba6e4-47fd-4d24-9d11-8a72d31bd805\",\r\n \"ruleType\": \"teamAssignmentRule\",\r\n \"name\": \"pet2rule\",\r\n \"attributeContexts\": [\r\n \"api\",\r\n \"application\",\r\n \"package\",\r\n \"plan\"\r\n ],\r\n \"ruleLogicalOperator\": \"AND\",\r\n \"ruleExpressions\": [\r\n {\r\n \"attributeName\": \"name\",\r\n \"operator\": \"startsWith\",\r\n \"attributeValue\": \"pet2\"\r\n }\r\n ],\r\n \"owner\": \"Administrator\",\r\n \"active\": false,\r\n \"teamsAssigned\": [\r\n \"55fd3eb7-668b-4aba-b3ad-6136448e2bed\"\r\n ]\r\n }\r\n}" - }, - "schema" : { - "$ref" : "#/definitions/Rule" - } - }, - "404" : { - "description" : "This status code indicates that the rule id specified is not found in API Gateway" - }, - "405" : { - "description" : "Method is not allowed" - }, - "400" : { - "description" : "Request body is not valid" - }, - "401" : { - "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." - } - }, - "security" : [ { - "Basic" : [ ] - } ] - } - }, - "/rule" : { - "get" : { - "description" : "The method retrieves list of all rules in API Gateway.", - "operationId" : "getAllRule", - "produces" : [ "application/json" ], - "parameters" : [ { - "name" : "ruleType", - "in" : "query", - "description" : "ruleType : if supplied, returns the rules of this particular ruleType only", - "required" : false, - "type" : "string", - "x-example" : "teamAssignmentRule" - }, { - "name" : "active", - "in" : "query", - "description" : "active : if supplied, returns the active rules only", - "required" : false, - "type" : "string", - "x-example" : "true" - } ], - "responses" : { - "200" : { - "description" : "This status code indicates that the list of rules is successfully retrieved.", - "examples" : { - "application/json" : "{\r\n \"rule\": [\r\n {\r\n \"id\": \"69dbb4aa-2c8e-431d-8a72-3af171c2ca44\",\r\n \"ruleType\": \"teamAssignmentRule\",\r\n \"name\": \"pet1rule\",\r\n \"attributeContexts\": [\r\n \"api\",\r\n \"application\",\r\n \"package\",\r\n \"plan\"\r\n ],\r\n \"ruleLogicalOperator\": \"AND\",\r\n \"ruleExpressions\": [\r\n {\r\n \"attributeName\": \"name\",\r\n \"operator\": \"startsWith\",\r\n \"attributeValue\": \"pet1\"\r\n }\r\n ],\r\n \"owner\": \"Administrator\",\r\n \"active\": false,\r\n \"teamsAssigned\": [\r\n \"55fd3eb7-668b-4aba-b3ad-6136448e2bed\"\r\n ]\r\n }\r\n ]\r\n}" - }, - "schema" : { - "type" : "array", - "items" : { - "$ref" : "#/definitions/Rule" - } - } - }, - "401" : { - "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." - } - }, - "security" : [ { - "Basic" : [ ] - } ] - }, - "post" : { - "description" : "The method creates a conditional rule in API Gateway. The API request body must contain the payload for the rule.", - "operationId" : "createRule", - "consumes" : [ "application/json" ], - "produces" : [ "application/json" ], - "parameters" : [ { - "in" : "body", - "name" : "body", - "description" : "", - "required" : true, - "schema" : { - "$ref" : "#/definitions/Rule" - }, - "x-examples" : { - "application/json" : "{\r\n \"attributeContexts\": [\r\n \"api\",\r\n \"application\",\r\n \"package\",\r\n \"plan\"\r\n ],\r\n \"name\": \"pet1rule\",\r\n \"ruleExpressions\": [\r\n {\r\n \"attributeName\": \"name\",\r\n \"attributeValue\": \"pet1\",\r\n \"operator\": \"startsWith\"\r\n }\r\n ],\r\n \"ruleLogicalOperator\": \"AND\",\r\n \"ruleType\": \"teamAssignmentRule\",\r\n \"teamsAssigned\": [\r\n \"55fd3eb7-668b-4aba-b3ad-6136448e2bed\"\r\n ]\r\n}" - } - } ], - "responses" : { - "201" : { - "description" : "This status code indicates that the rule has been successfully created in API Gateway, and the newly created rule is available in the response body.", - "examples" : { - "application/json" : "{\r\n \"rule\": {\r\n \"id\": \"69dbb4aa-2c8e-431d-8a72-3af171c2ca44\",\r\n \"ruleType\": \"teamAssignmentRule\",\r\n \"name\": \"pet1rule\",\r\n \"attributeContexts\": [\r\n \"api\",\r\n \"application\",\r\n \"package\",\r\n \"plan\"\r\n ],\r\n \"ruleLogicalOperator\": \"AND\",\r\n \"ruleExpressions\": [\r\n {\r\n \"attributeName\": \"name\",\r\n \"operator\": \"startsWith\",\r\n \"attributeValue\": \"pet1\"\r\n }\r\n ],\r\n \"owner\": \"Administrator\",\r\n \"active\": false,\r\n \"teamsAssigned\": [\r\n \"55fd3eb7-668b-4aba-b3ad-6136448e2bed\"\r\n ]\r\n }\r\n}" - }, - "schema" : { - "$ref" : "#/definitions/Rule" - } - }, - "400" : { - "description" : "This status code indicates that the request body is not correct." - }, - "401" : { - "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." - } - }, - "security" : [ { - "Basic" : [ ] - } ] - } - }, - "/is/cluster" : { - "get" : { - "description" : "Retrieves the configured cluster settings from API Gateway.", - "operationId" : "getClusterSetting", - "produces" : [ "application/json" ], - "parameters" : [ ], - "responses" : { - "200" : { - "description" : "This status code indicates that the cluster setting has been successfully retrieved from API Gateway.", - "examples" : { - "application/json" : "{\r\n\t\"clusterAware\":true,\r\n\t\"pendingRestart\":false,\r\n\t\"currentlyClustered\":false,\r\n\t\"clusterSessTimeout\":\"60\",\r\n\t\"clusterName\":\"devCluster\",\r\n\t\"actionOnStartupError\":\"standalone\",\r\n\t\"tsaURLs\":\"bluebird:9510\"\r\n}" - }, - "schema" : { - "$ref" : "#/definitions/ClusterInfo" - } - }, - "400" : { - "description" : "This status code indicates invalid request or bad input." - }, - "401" : { - "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." - }, - "404" : { - "description" : "This status code indicates that the requested resource is not found." - }, - "405" : { - "description" : "This status code indicates that the requested HTTP method is not supported for the resource." - }, - "500" : { - "description" : "This status code indicates an error occurred while fetching the configured cluster settings from API Gateway." - } - }, - "security" : [ { - "Basic" : [ ] - } ] - }, - "put" : { - "description" : "Updates the cluster settings in API Gateway.", - "operationId" : "updateCluster", - "consumes" : [ "application/json" ], - "produces" : [ "application/json" ], - "parameters" : [ { - "in" : "body", - "name" : "body", - "description" : "The request payload for cluster settings in API Gateway.", - "required" : true, - "schema" : { - "$ref" : "#/definitions/ClusterInfo" - }, - "x-examples" : { - "application/json" : "{\r\n\t\"clusterAware\":true,\r\n\t\"pendingRestart\":false,\r\n\t\"currentlyClustered\":false,\r\n\t\"clusterSessTimeout\":\"60\",\r\n\t\"clusterName\":\"devCluster\",\r\n\t\"actionOnStartupError\":\"standalone\",\r\n\t\"tsaURLs\":\"bluebird:9510\"\r\n}" - } - } ], - "responses" : { - "200" : { - "description" : "This status code indicates that the configured cluster settings have been successfully persisted in API Gateway.", - "examples" : { - "application/json" : "{\r\n\t\"clusterAware\":true,\r\n\t\"pendingRestart\":false,\r\n\t\"currentlyClustered\":false,\r\n\t\"clusterSessTimeout\":\"60\",\r\n\t\"clusterName\":\"devCluster\",\r\n\t\"actionOnStartupError\":\"standalone\",\r\n\t\"tsaURLs\":\"bluebird:9510\"\r\n}" - }, - "schema" : { - "$ref" : "#/definitions/ClusterInfo" - } - }, - "400" : { - "description" : "This status code indicates that the the user sends an empty or invalid JSON payload." - }, - "401" : { - "description" : "This status code indicates that the user did not provide any user credential or the user is not authorized to update extended and watt settings." - }, - "404" : { - "description" : "This status code indicates that the requested resource is not found." - }, - "405" : { - "description" : "This status code indicates that the requested HTTP method is not supported for the resource." - }, - "500" : { - "description" : "This status code indicates an error occurred while persisting the cluster settings in API Gateway." - } - }, - "security" : [ { - "Basic" : [ ] - } ] - } - }, - "/is/keystore" : { - "get" : { - "description" : "The method gets all keystores available in API Gateway.", - "operationId" : "getKeystores", - "produces" : [ "application/json" ], - "parameters" : [ ], - "responses" : { - "200" : { - "description" : "This status code indicates that all keystores have been successfully fetched from API Gateway.", - "examples" : { - "application/json" : "{\r\n\t\"keystores\": [{\r\n\t\t\"keyStoreName\": \"DEFAULT_IS_KEYSTORE\",\r\n\t\t\"keyStoreDescription\": \"Default keystore alias for Integration Server.\",\r\n\t\t\"keyStoreType\": \"JKS\",\r\n\t\t\"keyStoreProvider\": \"SUN\",\r\n\t\t\"keyStorePassword\": \"wm.security.keystore.DEFAULT_IS_KEYSTORE\",\r\n\t\t\"pkAliasesList\": \"ssos\",\r\n\t\t\"pkPasswordsList\": \"wm.security.keystore.DEFAULT_IS_KEYSTORE.ssos\",\r\n\t\t\"nullPKpasswds\": \"false\",\r\n\t\t\"bitarray\": \"1\",\r\n\t\t\"isWarning\": false,\r\n\t\t\"isLoaded\": true,\r\n\t\t\"message\": null,\r\n\t\t\"fileContent\": \"/u3+7QAAAAIAAAABAAAAAQAEc3NvcwAAAU3jFrE/AAAFAzCCBP8wDgYKKwYBBAEqAhEBAQUABIIE6/2CimpqOXAELQb47VWbZx5vQionU7882vDKQywXT2726dYXQK/YBtK3ufezdzTg82EEWyqw75YuqMcaa5zS8FiGEovvf2DsdCcHWkAso24Ya1l56j+FgF5TsaOrFcKu3HjuyzhqgDiD/U7NfIcFud4kaBxNI23/ouvB7O7+JOww8xzE2pyxtvGyyvzqMDHFE8+h0X+dSgVVCioL794mP7gj2ujg2EKS9lI1KhFjrZfOn6kLnDAsd1QUfAdJxrooLXPP97auAApX2C5aD+lIdS+yPs0eC7h0R3QBYBiPuCEBPmna0C2iZtukqmCNH/W0VPbdIswz0KcCATFH8LuC3Mg3IbTqdXFj4bzUPACqutmyObyGwFKEzNdicTV2f6UJDBfUnl7ip1f4vb/a18PM+FuKsHigW6+PHWAo4hc85ntFjXoQBKgSpeneuiRIQbvmcWlp68FVuebJjMsmYKsvhIfCTUWYmf3iS6sQUILD3IKvbZJqFIZ8iwdiHljW7wN8Cbu1Wrv8vj1pV38I8C1bmsUv7mCwEmOtAcCfBoduxG+iy/LsgQW4vCj3gCm98Fv/AKD7pe+IhVkVEY8m37W6wNgdDgDKHg9txgrckBY1gOEm4Z1bhlBFFLkfJBUN1hdQu425HK9EgOO0EsjDTi1jqUPuCIZ+1XqlN7W/5pmD9NH7Oo2pji9rFoPMBibs6h5dWGkjxGft3aGBkCuhPOSHbgJbSM/yNowVMlj9PNutJvNiqkVBT9aw1f8ANN7r1+X4JusVZAshesN6R6K3v/UlgOxIB9C41M4P57LCq\",\r\n\t\t\"uploadFileName\": \"keystore.jks\"\r\n\t},\r\n\t{\r\n\t\t\"keyStoreName\": \"SampleCustomKeystore\",\r\n\t\t\"keyStoreDescription\": \"Sample description for the keystore.\",\r\n\t\t\"keyStoreType\": \"JKS\",\r\n\t\t\"keyStoreProvider\": \"SUN\",\r\n\t\t\"keyStorePassword\": \"wm.security.keystore.SampleCustomKeystore\",\r\n\t\t\"pkAliasesList\": \"alias1.example.com,alias2.example.com,alias3.example.com\",\r\n\t\t\"pkPasswordsList\": \"wm.security.keystore.SampleCustomKeystore.alias1.example.com, ,wm.security.keystore.SampleCustomKeystore.alias3.example.com\",\r\n\t\t\"nullPKpasswds\": \"false,true,false\",\r\n\t\t\"bitarray\": \"1,1,1\",\r\n\t\t\"isWarning\": true,\r\n\t\t\"isLoaded\": true,\r\n\t\t\"message\": \"Keystore alias 'SampleCustomKeystore' saved successfully.\",\r\n\t\t\"fileContent\": \"/u3+7QAAAAIAAAAJAAAAAgAKZGFlaW5tcmgzMQAAAV2xXQI0AAVYLjUwOQAAA6kwggOlMIICjaADAgECAgRtzQjDMA0GCSqGSIb3DQEBBAUAMIGCMQswCQYDVQQGEwJERTEQMA4GA1UECBMHR2VybWFueTESMBAGA1UEBxMJRGFybXN0YWR0MRQwEgYDVQQKEwtTb2Z0d2FyZSBBRzEXMBUGA1UECxMOU29mdHdhcmUgQUcgQ0ExHjAcBgNVBAMTFWRhZWlubXJoMzEuZXVyLmFkLnNhZzAeFw0xNzA3MjzdGFkdDEUMBIGA1UEChMLU29mdHdhcmUgQUcxFzAVBgNVBAsTDlNvZnR3YXJlIEFHIENBMRwwGgYDVQQDExNtY2RzYW4wMi5ldXIuYWQuc2FnMB4XDTE3MDcwNDExNDkwOFoXDTI3MDcwMjExNDkwOFowgYAxCzAJBgNVBAYTAkRFMRAwDgYDVQQIEwdHZXJtYW55MRIwEAYDVQQHEwlEYXJtc3RhZHQxFDASBgNVBAoTC1NvZnR3YXJlIEFHMRcwFQYDVQQLEw5Tb2Z0d2FyZSBBRyBDVR0OBBYEFBTbx0ge90nA8/f5nj0Q3vvDHKfQMA0GCSqGSIb3DQEBBAUAA4IBAQCSmYycBUW30RT6v5dUL7OuWF1uOnTqycEJTXTs0NXsW/bpuwI2sUX/rZrivvOlWejy4hIwtjWfVIAhhE1TOeSV6CNr9MnvMgs0u9jUJ8un8dKPujmBfxPI07kzgshkMzHk0L/hacprYHkYKASOG0pjvPNXMaMULIuOJ/bo4sAUSqg6gnIhR/0K/9HK5Q6wsYKEmCefT4AbCaqo6ns74f0r7n459hh4Ur0hmWy3aEdUZ6NXJU6RngoXo2JFdjV711nmK3+vjzQfmCc+SCIe3M9gynWDt1kTamUweQH+OVBTPlEhBzUh+b0qQznvSvxRQYJd/veFAg4xbU4iTXV5O5Zi0aX/9Us0at03ku9iQ7iWupy88+w=\",\r\n\t\t\"uploadFileName\": \"keystore_file.jks\"\r\n\t}]\r\n}" - }, - "schema" : { - "type" : "array", - "items" : { - "$ref" : "#/definitions/KeyStore" - } - } - }, - "400" : { - "description" : "This status code indicates invalid request or bad input." - }, - "401" : { - "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." - }, - "404" : { - "description" : "This status code indicates that the requested resource is not found." - }, - "405" : { - "description" : "This status code indicates that the requested HTTP method is not supported for the resource." - }, - "500" : { - "description" : "This status code indicates an error occurred while retrieving the available keystores from API Gateway." - } - }, - "security" : [ { - "Basic" : [ ] - } ] - }, - "post" : { - "description" : "Creates a keystore in API Gateway.", - "operationId" : "createKeystore", - "consumes" : [ "multipart/form-data" ], - "produces" : [ "application/json" ], - "parameters" : [ { - "name" : "keyStoreName", - "in" : "formData", - "description" : "The name of the keystore. It cannot contain spaces or special characters. The name of the key store must be unique across all the keystores created in API Gateway.", - "required" : true, - "type" : "string", - "x-example" : "SampleCustomKeystore" - }, { - "name" : "keyStoreDescription", - "in" : "formData", - "description" : "The description for the keystore.", - "required" : false, - "type" : "string", - "x-example" : "Sample description for the keystore." - }, { - "name" : "keyStoreType", - "in" : "formData", - "description" : "The certificate file format of the keystore.", - "required" : true, - "type" : "string", - "default" : "JKS", - "x-example" : "JKS", - "enum" : [ "JKS", "PKCS12" ] - }, { - "name" : "keyStoreProvider", - "in" : "formData", - "description" : "The provider that is used for the keystore type. The default is SUN for JKS type and SunJSSE for PKCS12 type.", - "required" : true, - "type" : "string", - "default" : "SUN", - "x-example" : "SUN", - "enum" : [ "SUN", "SunJSSE" ] - }, { - "name" : "keyStorePassword", - "in" : "formData", - "description" : "The keystore password that is defined at the time of keystore creation using a keystore utility.", - "required" : true, - "type" : "string", - "x-example" : "keystore_password" - }, { - "name" : "uploadFileName", - "in" : "formData", - "description" : "The name of the keystore file that will be used to save the keystore internally in API Gateway.", - "required" : true, - "type" : "string", - "x-example" : "keystore_file.jks" - }, { - "name" : "fileContent", - "in" : "formData", - "description" : "The contents of the truststore file.", - "required" : true, - "type" : "file" - }, { - "name" : "pkAliasesList", - "in" : "formData", - "description" : "Comma separated list of alias names in the uploaded keystore file.", - "required" : false, - "type" : "string", - "x-example" : "alias1.example.com,alias2.example.com,alias3.example.com" - }, { - "name" : "pkPasswordsList", - "in" : "formData", - "description" : "Comma separated list of passwords in the same order as the aliases specified in pkAliasesList. If a particular key alias does not have a password, it is denoted by space.", - "required" : false, - "type" : "string", - "x-example" : "alias1_password, ,alias3_password" - }, { - "name" : "nullPKpasswds", - "in" : "formData", - "description" : "Comma separated list of boolean values (true/false) indicating whether the particular alias has a password or not in the same order as the aliases specified in pkAliasesList. For each key alias, true indicates that the key alias does not have a password and false indicates that it does have a password.", - "required" : false, - "type" : "string", - "x-example" : "false,true,false" - } ], - "responses" : { - "200" : { - "description" : "This status code indicates that the keystore has been successfully persisted in API Gateway.", - "examples" : { - "application/json" : "{\r\n\t\"keyStoreName\": \"SampleCustomKeystore\",\r\n\t\"keyStoreDescription\": \"Sample description for the keystore.\",\r\n\t\"keyStoreType\": \"JKS\",\r\n\t\"keyStoreProvider\": \"SUN\",\r\n\t\"keyStorePassword\": \"wm.security.keystore.SampleCustomKeystore\",\r\n\t\"pkAliasesList\": \"alias1.example.com,alias2.example.com,alias3.example.com\",\r\n\t\"pkPasswordsList\": \" , , \",\r\n\t\"nullPKpasswds\": \"false,false,false\",\r\n\t\"bitarray\": \"0,0,0\",\r\n\t\"isWarning\": true,\r\n\t\"isLoaded\": true,\r\n\t\"message\": \"Keystore alias 'SampleCustomKeystore' saved successfully. Warning: before using the keystore, you must create a password for at least one of its key aliases. Please edit the keystore alias configuration and add one or more valid key alias passwords.\",\r\n\t\"fileContent\": \"/u3+7QAAAAIAAAAJAAAAAgAKZGFlaW5tcmgzMQAAAV2xXQI0AAVYLjUwOQAAA6kwggOlMIICjaADAgECAgRtzQjDMA0GCSqGSIb3DQEBBAUAMIGCMQswCQYDVQQGEwJERTEQMA4GA1UECBMHR2VybWFueTESMBAGA1UEBxMJRGFybXN0YWR0MRQwEgYDVQQKEwtTb2Z0d2FyZSBBRzEXMBUGA1UECxMOU29mdHdhcmUgQUcgQ0ExHjAcBgNVBAMTFWRhZWlubXJoMzEuZXVyLmFkLnNhZzAeFw0xNzA3RFMRAwDgYDVQQIEwdHZXJtYW55MRIwEAYDVQQHEwlEYXJtc3RhZHQxFDASBgNVBAoTC1NvZnR3YXJlIEFHMRcwFQYDVQQLEw5Tb2Z0d2FyZSBBRyBDQTEcMBoGA1UEAxMTbWNkc2FuMDIuZXVyLmFkLnNhZzCCAS6RngoXo2JFdjV711nmK3+vjzQfmCc+SCIe3M9gynWDt1kTamUweQH+OVBTPlEhBzUh+b0qQznvSvxRQYJd/veFAg4xbU4iTXV5O5Zi0aX/9Us0at03ku9iQ7iWupy88+w=\",\r\n\t\"uploadFileName\": \"keystore_file.jks\"\r\n}" - }, - "schema" : { - "$ref" : "#/definitions/KeyStore" - } - }, - "400" : { - "description" : "This status code indicates invalid request or bad input." - }, - "401" : { - "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." - }, - "404" : { - "description" : "This status code indicates that the requested resource is not found." - }, - "405" : { - "description" : "This status code indicates that the requested HTTP method is not supported for the resource." - }, - "500" : { - "description" : "This status code indicates an error occurred while persisting the keystore in API Gateway." - } - }, - "security" : [ { - "Basic" : [ ] - } ] - } - }, - "/is/keystore/{keyStoreName}" : { - "get" : { - "description" : "The method gets keystore matching the name in API Gateway.", - "operationId" : "getKeystore", - "produces" : [ "application/json" ], - "parameters" : [ { - "name" : "keyStoreName", - "in" : "path", - "description" : "Keystore name to identify the corresponding Keystore", - "required" : true, - "type" : "string", - "x-example" : "DEFAULT_IS_KEYSTORE" - } ], - "responses" : { - "200" : { - "description" : "This status code indicates that the requested keystore has been successfully fetched from API Gateway.", - "examples" : { - "application/json" : "{\r\n\t\"keystores\": [{\r\n\t\t\"keyStoreName\": \"SampleCustomKeystore\",\r\n\t\t\"keyStoreDescription\": \"Sample description for the keystore.\",\r\n\t\t\"keyStoreType\": \"JKS\",\r\n\t\t\"keyStoreProvider\": \"SUN\",\r\n\t\t\"keyStorePassword\": \"wm.security.keystore.SampleCustomKeystore\",\r\n\t\t\"pkAliasesList\": \"alias1.example.com,alias2.example.com,alias3.example.com\",\r\n\t\t\"pkPasswordsList\": \"wm.security.keystore.SampleCustomKeystore.alias1.example.com, ,wm.security.keystore.SampleCustomKeystore.alias3.example.com\",\r\n\t\t\"nullPKpasswds\": \"false,true,false\",\r\n\t\t\"bitarray\": \"1,1,1\",\r\n\t\t\"isWarning\": true,\r\n\t\t\"isLoaded\": true,\r\n\t\t\"message\": \"Keystore alias 'SampleCustomKeystore' saved successfully.\",\r\n\t\t\"fileContent\": \"/u3+7QAAAAIAAAAJAAAAAgAKZGFlaW5tcmgzMQAAAV2xXQI0AAVYLjUwOQAAA6kwggOlMIICjaADAgECAgRtzQjDMA0GCSqGSIb3DQEBBAUAMIGCMQswCQYDVQQGEwJERTEQMA4GA1UECBMHR2VybWFueTESMBAGA1UEBxMJRGFybXN0YWR0MRQwEgYDVQQKEwtTb2Z0d2FyZSBBRzEXMBUGA1UECxMOU29mdHdhcmUgQUcgQ0ExHjAcBgNVBAMTFWRhZWlubXJoMzEuZXVyLmFkLnNhZzAeFw0xNzA3MjzdGFkdDEUMBIGA1UEChMLU29mdHdhcmUgQUcxFzAVBgNVBAsTDlNvZnR3YXJlIEFHIENBMRwwGgYDVQQDExNtY2RzYW4wMi5ldXIuYWQuc2FnMB4XDTE3MDcwNDExNDkwOFoXDTI3MDcwMjExNDkwOFowgYAxCzAJBgNVBAYTAkRFMRAwDgYDVQQIEwdHZXJtYW55MRIwEAYDVQQHEwlEYXJtc3RhZHQxFDASBgNVBAoTC1NvZnR3YXJlIEFHMRcwFQYDVQQLEw5Tb2Z0d2FyZSBBRyBDVR0OBBYEFBTbx0ge90nA8/f5nj0Q3vvDHKfQMA0GCSqGSIb3DQEBBAUAA4IBAQCSmYycBUW30RT6v5dUL7OuWF1uOnTqycEJTXTs0NXsW/bpuwI2sUX/rZrivvOlWejy4hIwtjWfVIAhhE1TOeSV6CNr9MnvMgs0u9jUJ8un8dKPujmBfxPI07kzgshkMzHk0L/hacprYHkYKASOG0pjvPNXMaMULIuOJ/bo4sAUSqg6gnIhR/0K/9HK5Q6wsYKEmCefT4AbCaqo6ns74f0r7n459hh4Ur0hmWy3aEdUZ6NXJU6RngoXo2JFdjV711nmK3+vjzQfmCc+SCIe3M9gynWDt1kTamUweQH+OVBTPlEhBzUh+b0qQznvSvxRQYJd/veFAg4xbU4iTXV5O5Zi0aX/9Us0at03ku9iQ7iWupy88+w=\",\r\n\t\t\"uploadFileName\": \"keystore_file.jks\"\r\n\t}]\r\n}" - }, - "schema" : { - "type" : "array", - "items" : { - "$ref" : "#/definitions/KeyStore" - } - } - }, - "400" : { - "description" : "This status code indicates invalid request or bad input." - }, - "401" : { - "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." - }, - "404" : { - "description" : "This status code indicates that the requested resource is not found." - }, - "405" : { - "description" : "This status code indicates that the requested HTTP method is not supported for the resource." - }, - "500" : { - "description" : "This status code indicates an error occurred while retrieving the specified keystore from API Gateway." - } - }, - "security" : [ { - "Basic" : [ ] - } ] - }, - "post" : { - "description" : "Updates an already existing keystore in API Gateway.", - "operationId" : "UpdateKeystoreAliases", - "consumes" : [ "multipart/form-data" ], - "produces" : [ "application/json" ], - "parameters" : [ { - "name" : "keyStoreName", - "in" : "path", - "description" : "The name of the keystore. It cannot contain spaces or special characters. The name of the key store must be unique across all the keystores created in API Gateway.", - "required" : true, - "type" : "string", - "x-example" : "SampleCustomKeystore" - }, { - "name" : "keyStoreDescription", - "in" : "formData", - "description" : "The description for the keystore.", - "required" : false, - "type" : "string", - "x-example" : "Sample description for the keystore." - }, { - "name" : "keyStoreType", - "in" : "formData", - "description" : "The certificate file format of the keystore.", - "required" : true, - "type" : "string", - "default" : "JKS", - "x-example" : "JKS", - "enum" : [ "JKS", "PKCS12" ] - }, { - "name" : "keyStoreProvider", - "in" : "formData", - "description" : "The provider that is used for the keystore type. The default is SUN for JKS type and SunJSSE for PKCS12 type.", - "required" : true, - "type" : "string", - "default" : "SUN", - "x-example" : "SUN", - "enum" : [ "SUN", "SunJSSE" ] - }, { - "name" : "keyStorePassword", - "in" : "formData", - "description" : "The keystore password that is defined at the time of keystore creation using a keystore utility.", - "required" : true, - "type" : "string", - "x-example" : "keystore_password" - }, { - "name" : "uploadFileName", - "in" : "formData", - "description" : "The name of the keystore file that will be used to save the keystore internally in API Gateway.", - "required" : true, - "type" : "string", - "x-example" : "keystore_file.jks" - }, { - "name" : "fileContent", - "in" : "formData", - "description" : "The contents of the keystore file.", - "required" : true, - "type" : "file" - }, { - "name" : "pkAliasesList", - "in" : "formData", - "description" : "Comma separated list of alias names in the uploaded keystore file.", - "required" : false, - "type" : "string", - "x-example" : "alias1.example.com,alias2.example.com,alias3.example.com" - }, { - "name" : "pkPasswordsList", - "in" : "formData", - "description" : "Comma separated list of passwords in the same order as the aliases specified in pkAliasesList. If a particular key alias does not have a password, it is denoted by space.", - "required" : false, - "type" : "string", - "x-example" : "alias1_password, ,alias3_password" - }, { - "name" : "nullPKpasswds", - "in" : "formData", - "description" : "Comma separated list of boolean values (true/false) indicating whether the particular alias has a password or not in the same order as the aliases specified in pkAliasesList. For each key alias, true indicates that the key alias does not have a password and false indicates that it does have a password.", - "required" : false, - "type" : "string", - "x-example" : "false,true,false" - } ], - "responses" : { - "200" : { - "description" : "This status code indicates that the keystore has been successfully persisted in API Gateway.", - "examples" : { - "application/json" : "{\r\n\t\"keyStoreName\": \"SampleCustomKeystore\",\r\n\t\"keyStoreDescription\": \"Sample description for the keystore.\",\r\n\t\"keyStoreType\": \"JKS\",\r\n\t\"keyStoreProvider\": \"SUN\",\r\n\t\"keyStorePassword\": \"wm.security.keystore.SampleCustomKeystore\",\r\n\t\"pkAliasesList\": \"alias1.example.com,alias2.example.com,alias3.example.com\",\r\n\t\"pkPasswordsList\": \"wm.security.keystore.SampleCustomKeystore.alias1.example.com, ,wm.security.keystore.SampleCustomKeystore.alias3.example.com\",\r\n\t\"nullPKpasswds\": \"false,true,false\",\r\n\t\"bitarray\": \"1,1,1\",\r\n\t\"isWarning\": true,\r\n\t\"isLoaded\": true,\r\n\t\"message\": \"Keystore alias 'SampleCustomKeystore' saved successfully.\",\r\n\t\"fileContent\": \"/u3+7QAAAAIAAAAJAAAAAgAKZGFlaW5tcmgzMQAAAV2xXQI0AAVYLjUwOQAAA6kwggOlMIICjaADAgECAgRtzQjDMA0GCSqGSIb3DQEBBAUAMIGCMQswCQYDVQQGEwJERTEQMA4GA1UECBMHR2VybWFueTESMBAGA1UEBxMJRGFybXN0YWR0MRQwEgYDVQQKEwtTb2Z0d2FyZSBBRzEXMBUGA1UECxMOU29mdHdhcmUgQUcgQ0ExHjAcBgNVBAMTFWRhZWlubXJoMzEuZXVyLmFkLnNhZzAeFw0xNzA3MjzdGFkdDEUMBIGA1UEChMLU29mdHdhcmUgQUcxFzAVBgNVBAsTDlNvZnR3YXJlIEFHIENBMRwwGgYDVQQDExNtY2RzYW4wMi5ldXIuYWQuc2FnMB4XDTE3MDcwNDExNDkwOFoXDTI3MDcwMjExNDkwOFowgYAxCzAJBgNVBAYTAkRFMRAwDgYDVQQIEwdHZXJtYW55MRIwEAYDVQQHEwlEYXJtc3RhZHQxFDASBgNVBAoTC1NvZnR3YXJlIEFHMRcwFQYDVQQLEw5Tb2Z0d2FyZSBBRyBDVR0OBBYEFBTbx0ge90nA8/f5nj0Q3vvDHKfQMA0GCSqGSIb3DQEBBAUAA4IBAQCSmYycBUW30RT6v5dUL7OuWF1uOnTqycEJTXTs0NXsW/bpuwI2sUX/rZrivvOlWejy4hIwtjWfVIAhhE1TOeSV6CNr9MnvMgs0u9jUJ8un8dKPujmBfxPI07kzgshkMzHk0L/hacprYHkYKASOG0pjvPNXMaMULIuOJ/bo4sAUSqg6gnIhR/0K/9HK5Q6wsYKEmCefT4AbCaqo6ns74f0r7n459hh4Ur0hmWy3aEdUZ6NXJU6RngoXo2JFdjV711nmK3+vjzQfmCc+SCIe3M9gynWDt1kTamUweQH+OVBTPlEhBzUh+b0qQznvSvxRQYJd/veFAg4xbU4iTXV5O5Zi0aX/9Us0at03ku9iQ7iWupy88+w=\",\r\n\t\"uploadFileName\": \"keystore_file.jks\"\r\n}" - }, - "schema" : { - "$ref" : "#/definitions/KeyStore" - } - }, - "400" : { - "description" : "This status code indicates invalid request or bad input." - }, - "401" : { - "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." - }, - "404" : { - "description" : "This status code indicates that the requested resource is not found." - }, - "405" : { - "description" : "This status code indicates that the requested HTTP method is not supported for the resource." - }, - "500" : { - "description" : "This status code indicates an error occurred while persisting the keystore in API Gateway." - } - }, - "security" : [ { - "Basic" : [ ] - } ] - }, - "delete" : { - "description" : "Deletes keystore matching the specified name in API Gateway.", - "operationId" : "deleteKeystore", - "parameters" : [ { - "name" : "keyStoreName", - "in" : "path", - "description" : "Keystore name to identify the corresponding Keystore", - "required" : true, - "type" : "string", - "x-example" : "DEFAULT_IS_KEYSTORE" - } ], - "responses" : { - "200" : { - "description" : "This status code indicates that the specified keystore has been deleted successfully from API Gateway.", - "schema" : { - "type" : "array", - "items" : { - "$ref" : "#/definitions/KeyStore" - } - } - }, - "400" : { - "description" : "This status code indicates invalid request or bad input." - }, - "401" : { - "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." - }, - "404" : { - "description" : "This status code indicates that the requested resource is not found." - }, - "405" : { - "description" : "This status code indicates that the requested HTTP method is not supported for the resource." - }, - "500" : { - "description" : "This status code indicates an error occurred while deleting the specified keystore from API Gateway." - } - }, - "security" : [ { - "Basic" : [ ] - } ] - } - }, - "/logAggregation/downloadLogs" : { - "get" : { - "description" : "This resource is used to download logs from different components used by APIGateway, server configurations and thread dumps.", - "operationId" : "downloadLogs", - "consumes" : [ "application/json" ], - "produces" : [ "multipart/form-data" ], - "parameters" : [ ], - "responses" : { - "200" : { - "description" : "This response indicates that the logs are downloaded successfully. The response body is the zipped archive." - }, - "400" : { - "description" : "This response indicates that the server has encountered an error while downloading the logs." - }, - "401" : { - "description" : "This status code indicates that the user did not provide any user credential or the user is not authorized to download the logs." - } - }, - "security" : [ { - "Basic" : [ ] - } ] - } - }, - "/configurations/loadBalancer" : { - "get" : { - "description" : "The method retrieves the details of the Load Balancer configuration in API Gateway.", - "operationId" : "getLoadBalancers", - "consumes" : [ "application/json" ], - "produces" : [ "application/json" ], - "parameters" : [ ], - "responses" : { - "200" : { - "description" : "This status code indicates that the Load Balancer configurations are retrieved successfully. ", - "examples" : { - "application/json" : "{\r\n \"webAppUrl\": \"\",\r\n \"httpUrls\": [\r\n \"http://localhost:8080\"\r\n ],\r\n \"httpsUrls\": [\r\n \"https://localhost:443\"\r\n ],\r\n \"websocketUrls\": []\r\n}" - }, - "schema" : { - "$ref" : "#/definitions/LoadBalancer" - } - }, - "400" : { - "description" : "This status code indicates that the loadBalancer not mentioned in API access uri path.", - "examples" : { - "application/json" : "{\r\n \"errorDetails\": \"Missing mandatory field configId in request.\"\r\n}" - } - }, - "401" : { - "description" : "This status code indicates that the user is not a valid API Gateway user for retrieving the Load Balancer configuration." - } - }, - "security" : [ { - "Basic" : [ ] - } ] - }, - "put" : { - "description" : "The method is used to update the details of the load Balancer configuration in API Gateway.", - "operationId" : "saveLoadBalancers", - "consumes" : [ "application/json" ], - "produces" : [ "application/json" ], - "parameters" : [ { - "in" : "body", - "name" : "body", - "description" : "", - "required" : true, - "schema" : { - "$ref" : "#/definitions/LoadBalancer" - }, - "x-examples" : { - "application/json" : "{\r\n \"webAppUrl\": \"\",\r\n \"httpUrls\": [\r\n \"http://localhost:8080\"\r\n ],\r\n \"httpsUrls\": [\r\n \"https://localhost:443\"\r\n ],\r\n \"websocketUrls\": []\r\n}" - } - } ], - "responses" : { - "200" : { - "description" : "This status code indicates that the Load Balancer configuration has been successfully updated in API Gateway, and the updated configuration is available in the response body.", - "examples" : { - "application/json" : "{\r\n \"webAppUrl\": \"\",\r\n \"httpUrls\": [\r\n \"http://localhost:8080\"\r\n ],\r\n \"httpsUrls\": [\r\n \"https://localhost:443\"\r\n ],\r\n \"websocketUrls\": []\r\n}" - }, - "schema" : { - "$ref" : "#/definitions/LoadBalancer" - } - }, - "401" : { - "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have \"Manage General Administration\" functional privilege to access this API." - }, - "400" : { - "description" : "This status code indicates that the request body is invalid.", - "examples" : { - "application/json" : "{\r\n\"errorDetails\": \" Invalid property key found in request payload.\"\r\n}" - } - } - }, - "security" : [ { - "Basic" : [ ] - } ] - } - }, - "/configurations/whiteListingIPs" : { - "get" : { - "description" : "The method retrieves the details of the whitelisting IPs configuration in API Gateway.", - "operationId" : "getWhiteListedIPs", - "consumes" : [ "application/json" ], - "produces" : [ "application/json" ], - "parameters" : [ ], - "responses" : { - "200" : { - "description" : "This status code indicates that the whitelistingIPs configurations are retrieved successfully.", - "examples" : { - "application/json" : "{\r\n \"privateIPs\": [\r\n \"127.0.0.1\",\r\n \"10.0.0.0-10.255.255.255\",\r\n \"172.16.0.0-172.31.255.255 \",\r\n \"192.168.0.0-192.168.255.255\"\r\n ]\r\n}" - }, - "schema" : { - "$ref" : "#/definitions/WhiteListedIPs" - } - }, - "401" : { - "description" : "This status code indicates that the user is not a valid API Gateway user for retrieving the whitelistingIPs configuration." - } - }, - "security" : [ { - "Basic" : [ ] - } ] - }, - "put" : { - "description" : "The method is used to update the details of the whitelisting IPs configuration in API Gateway.", - "operationId" : "saveWhitelistedIPs", - "consumes" : [ "application/json" ], - "produces" : [ "application/json" ], - "parameters" : [ { - "in" : "body", - "name" : "body", - "description" : "", - "required" : true, - "schema" : { - "$ref" : "#/definitions/WhiteListedIPs" - }, - "x-examples" : { - "application/json" : "{\r\n \"privateIPs\": [\r\n \"127.0.0.1\",\r\n \"10.0.0.0-10.255.255.255\",\r\n \"172.16.0.0-172.31.255.255 \",\r\n \"192.168.0.0-192.168.255.255\"\r\n ]\r\n}" - } - } ], - "responses" : { - "200" : { - "description" : "This status code indicates that the whitelisting IPs configuration has been successfully updated in API Gateway, and the updated configuration is available in the response body.", - "examples" : { - "application/json" : "{\r\n \"privateIPs\": [\r\n \"127.0.0.1\",\r\n \"10.0.0.0-10.255.255.255\",\r\n \"172.16.0.0-172.31.255.255 \",\r\n \"192.168.0.0-192.168.255.255\"\r\n ]\r\n}" - }, - "schema" : { - "$ref" : "#/definitions/WhiteListedIPs" - } - }, - "401" : { - "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have \"Manage General Administration\" functional privilege to access this API." - }, - "400" : { - "description" : "This status code indicates that the request body is invalid." - } - }, - "security" : [ { - "Basic" : [ ] - } ] - } - }, - "/configurations/apiCallBackSettings" : { - "get" : { - "description" : "This method retrieves the API callback processor settings from API Gateway.", - "operationId" : "getAPICallbackProcessorSettings", - "consumes" : [ "application/json" ], - "produces" : [ "application/json" ], - "parameters" : [ ], - "responses" : { - "200" : { - "description" : "This status code indicates that the API callback processor settings is successfully retrieved from API Gateway.", - "examples" : { - "application/json" : "{\r\n \"configuration\": {\r\n \"processCallbackRequests\": true,\r\n \"allowCallBackRequestsHTTPsAccessOnly\": true,\r\n \"allowCallbackRequestAccessToAllowedIPs\": false,\r\n \"allowedIPs\": []\r\n }\r\n}" - }, - "schema" : { - "$ref" : "#/definitions/CallbackProcessorSettings" - } - }, - "400" : { - "description" : "This status code indicates that the provided configuration id is invalid.", - "examples" : { - "application/json" : "{\r\n \"errorDetails\": \" Invalid configId value in request. configId: apiCallBackSettings.\"\r\n}" - } - }, - "401" : { - "description" : "This status code indicates that the user did not provide any user credential or the user is not authorized to retrieve API callback processor settings." - } - }, - "security" : [ { - "Basic" : [ ] - } ] - }, - "put" : { - "description" : "This method updates or creates API callback processor settings in API Gateway. The user should have Manage general administration configurations privilege to update the API callback processor settings.", - "operationId" : "saveAPICallbackProcessorSettings", - "consumes" : [ "application/json" ], - "produces" : [ "application/json" ], - "parameters" : [ { - "in" : "body", - "name" : "body", - "description" : "", - "required" : true, - "schema" : { - "$ref" : "#/definitions/CallbackProcessorSettings" - }, - "x-examples" : { - "application/json" : "{\r\n \"configuration\": {\r\n \"processCallbackRequests\": true,\r\n \"allowCallBackRequestsHTTPsAccessOnly\": true,\r\n \"allowCallbackRequestAccessToAllowedIPs\": false,\r\n \"allowedIPs\": []\r\n }\r\n}" - } - } ], - "responses" : { - "200" : { - "description" : "This status code indicates that the API callback processor settings has been successfully updated in API Gateway, and the updated list of API callback processor settings is available in the response body.", - "examples" : { - "application/json" : "{\r\n \"configuration\": {\r\n \"processCallbackRequests\": true,\r\n \"allowCallBackRequestsHTTPsAccessOnly\": true,\r\n \"allowCallbackRequestAccessToAllowedIPs\": false,\r\n \"allowedIPs\": []\r\n }\r\n}" - }, - "schema" : { - "$ref" : "#/definitions/CallbackProcessorSettings" - } - }, - "401" : { - "description" : "This status code indicates that the user did not provide any user credential or the user is not authorized to update API callback processor settings." - }, - "400" : { - "description" : "This status code indicates that the the user sends an empty or invalid JSON payload." - } - }, - "security" : [ { - "Basic" : [ ] - } ] - } - }, - "/configurations/settings" : { - "get" : { - "description" : "This method retrieves the list of extended settings and watt properties from API Gateway.", - "operationId" : "getSettings", - "consumes" : [ "application/json" ], - "produces" : [ "application/json" ], - "parameters" : [ ], - "responses" : { - "200" : { - "description" : "This status code indicates that the list of extended settings and watt properties are successfully retrieved from API Gateway.", - "examples" : { - "application/json" : "{\r\n \"preferredSettings\": {\r\n \"wattKeys\": {},\r\n \"extendedKeys\": {\r\n \"allowExceedMaxWindowSize\": \"true\"\r\n }\r\n },\r\n \"allSettings\": {\r\n \"wattKeys\": {\r\n \"watt.server.http.allowOptions\": \"true\",\r\n \"watt.server.coder.responseAsXML\": \"false\",\r\n \"watt.server.SoapRPC.checkHeaders\": \"true\",\r\n \"watt.server.ws.responseTNS.from.request\": \"false\",\r\n \"watt.server.brokerTransport.dur\": \"60\"\r\n },\r\n \"extendedKeys\": {\r\n \"allowExceedMaxWindowSize\": \"true\",\r\n \"saveAuditlogsWithPayload\": \"true\",\r\n \"apig_schemaValidationPoolSize\": \"10\",\r\n \"apig_MENConfiguration_tickInterval\": \"60\",\r\n \"pg_JWT_isHTTPS\": \"true\"\r\n\t}\r\n }\r\n}" - }, - "schema" : { - "$ref" : "#/definitions/ExtendedSettingsOutput" - } - }, - "400" : { - "description" : "This status code indicates that the provided configuration id is invalid." - }, - "401" : { - "description" : "This status code indicates that the user did not provide any user credential or the user is not authorized to retrieve extended and watt settings." - } - }, - "security" : [ { - "Basic" : [ ] - } ] - }, - "put" : { - "description" : "This method updates or creates a list of extended settings and watt properties in API Gateway. The user should have an API Gateway administrator access to update thse settings. The user needs to send only the modified settings i.e, 'preferredSettings', in the payload.", - "operationId" : "saveSettings", - "consumes" : [ "application/json" ], - "produces" : [ "application/json" ], - "parameters" : [ { - "in" : "body", - "name" : "body", - "description" : "", - "required" : true, - "schema" : { - "$ref" : "#/definitions/ExtendedSettingsInput" - }, - "x-examples" : { - "application/json" : "{\r\n\t\"preferredSettings\": {\r\n\t\t\"wattKeys\": {\r\n\t\t\"watt.net.timeout\": \"300\",\r\n\t\t\"watt.server.oauth.authCode.expirySeconds\": \"600\"\r\n\t},\r\n\t\"extendedKeys\": {\r\n\t\t\"pg_oauth2_isHTTPS\": \"false\"\r\n\t}\r\n\t}}" - } - } ], - "responses" : { - "200" : { - "description" : "This status code indicates that the list of extended settings and watt properties has been successfully updated in API Gateway.", - "examples" : { - "application/json" : "{\r\n \"preferredSettings\": {\r\n \"wattKeys\": {},\r\n \"extendedKeys\": {\r\n \"allowExceedMaxWindowSize\": \"true\"\r\n }\r\n },\r\n \"allSettings\": {\r\n \"wattKeys\": {\r\n \"watt.server.http.allowOptions\": \"true\",\r\n \"watt.server.coder.responseAsXML\": \"false\",\r\n \"watt.server.SoapRPC.checkHeaders\": \"true\",\r\n \"watt.server.ws.responseTNS.from.request\": \"false\",\r\n \"watt.server.brokerTransport.dur\": \"60\"\r\n },\r\n \"extendedKeys\": {\r\n \"allowExceedMaxWindowSize\": \"true\",\r\n \"saveAuditlogsWithPayload\": \"true\",\r\n \"apig_schemaValidationPoolSize\": \"10\",\r\n \"apig_MENConfiguration_tickInterval\": \"60\",\r\n \"pg_JWT_isHTTPS\": \"true\"\r\n\t}\r\n }\r\n}" - }, - "schema" : { - "$ref" : "#/definitions/ExtendedSettingsOutput" - } - }, - "401" : { - "description" : "This status code indicates that the user did not provide any user credential or the user is not authorized to update extended and watt settings." - }, - "400" : { - "description" : "This status code indicates that the the user sends an empty or invalid JSON payload." - } - }, - "security" : [ { - "Basic" : [ ] - } ] - } - }, - "/configurations/errorProcessing" : { - "get" : { - "description" : "This REST method is used to get the configured error template and the value of the property - sendNativeProviderFault,which enables the server to forward the native error as it is.", - "operationId" : "getErrorProcessingDetails", - "consumes" : [ "application/json" ], - "produces" : [ "application/json" ], - "parameters" : [ ], - "responses" : { - "200" : { - "description" : "This response returns the current fault message templates and the native fault configuration", - "examples" : { - "application/json" : "{\r\n \"sendNativeProviderFault\": \"false\",\r\n \"defaultErrorMessage\": \"API Gateway encountered an error. Error Message: $ERROR_MESSAGE. Request Details: Service - $SERVICE, Operation - $OPERATION, Invocation Time:$TIME, Date:$DATE, Client IP - $CLIENT_IP, User - $USER and Application:$CONSUMER_APPLICATION.\",\r\n \"fallbackErrorMessage\": \"API Gateway encountered an error. Error Message: $ERROR_MESSAGE. Request Details: Service - $SERVICE, Operation - $OPERATION, Invocation Time:$TIME, Date:$DATE, Client IP - $CLIENT_IP, User - $USER and Application:$CONSUMER_APPLICATION\"\r\n}" - }, - "schema" : { - "$ref" : "#/definitions/ErrorProcessing" - } - }, - "400" : { - "description" : "This status code indicates the request payload is not correct and corresponding error details can be seen in the response body" - }, - "401" : { - "description" : "This response indicates that invalid credentials have been provided for the request." - } - }, - "security" : [ { - "Basic" : [ ] - } ] - }, - "put" : { - "description" : "This REST method is used to update the default error template with any custom templates and the value of the property - sendNativeProviderFault.", - "operationId" : "saveErrorProcessingDetails", - "consumes" : [ "application/json" ], - "produces" : [ "application/json" ], - "parameters" : [ { - "in" : "body", - "name" : "body", - "description" : "", - "required" : true, - "schema" : { - "$ref" : "#/definitions/ErrorProcessing" - }, - "x-examples" : { - "application/json" : "{\r\n \"sendNativeProviderFault\": \"false\",\r\n \"defaultErrorMessage\": \"API Gateway encountered an error. Error Message: $ERROR_MESSAGE. Request Details: Service - $SERVICE, Operation - $OPERATION, Invocation Time:$TIME, Date:$DATE, Client IP - $CLIENT_IP, User - $USER and Application:$CONSUMER_APPLICATION.\",\r\n \"fallbackErrorMessage\": \"API Gateway encountered an error. Error Message: $ERROR_MESSAGE. Request Details: Service - $SERVICE, Operation - $OPERATION, Invocation Time:$TIME, Date:$DATE, Client IP - $CLIENT_IP, User - $USER and Application:$CONSUMER_APPLICATION\"\r\n}" - } - } ], - "responses" : { - "200" : { - "description" : "This status code indicates that API Gateway has successfully updated the API Fault template and the updated template can be found in the response body", - "examples" : { - "application/json" : "{\r\n \"sendNativeProviderFault\": \"false\",\r\n \"defaultErrorMessage\": \"API Gateway encountered an error. Error Message: $ERROR_MESSAGE. Request Details: Service - $SERVICE, Operation - $OPERATION, Invocation Time:$TIME, Date:$DATE, Client IP - $CLIENT_IP, User - $USER and Application:$CONSUMER_APPLICATION.\",\r\n \"fallbackErrorMessage\": \"API Gateway encountered an error. Error Message: $ERROR_MESSAGE. Request Details: Service - $SERVICE, Operation - $OPERATION, Invocation Time:$TIME, Date:$DATE, Client IP - $CLIENT_IP, User - $USER and Application:$CONSUMER_APPLICATION\"\r\n}" - }, - "schema" : { - "$ref" : "#/definitions/ErrorProcessing" - } - }, - "401" : { - "description" : "This response indicates that invalid credentials have been provided for the request." - }, - "400" : { - "description" : "This status code indicates the request payload is not correct and corresponding error details can be seen in the response body" - } - }, - "security" : [ { - "Basic" : [ ] - } ] - } - }, - "/configurations/keystore" : { - "get" : { - "description" : "The method retrieves the details of the default keystore, truststore and alias settings in API Gateway. You might want to configure API Gateway to refer to a default keystore, truststore, or both, before deploying any SOAP message flows that require signature, encryption, X.509 authentication, and so on, as configured in the Inbound Authentication - Message policy. The default keystore and truststore are that you want API Gateway to use for the incoming secured messages", - "operationId" : "getKeyStoreTrustore", - "consumes" : [ "application/json" ], - "produces" : [ "application/json" ], - "parameters" : [ ], - "responses" : { - "200" : { - "description" : "This status code indicates that the default keystore, truststore and alias configurations are retrieved successfully. ", - "examples" : { - "application/json" : "{\r\n\t\"keystoreName\": \"DEFAULT_IS_KEYSTORE\",\r\n\t\"signingAlias\": \"ssos\",\r\n\t\"truststoreName\": \"DEFAULT_IS_TRUSTSTORE\"\r\n}" - }, - "schema" : { - "$ref" : "#/definitions/KeystoreTruststore" - } - }, - "400" : { - "description" : "This status code indicates that the keystore not mentioned in API access uri path.", - "examples" : { - "application/json" : "{\r\n \"errorDetails\": \"Missing mandatory field configId in request.\"\r\n}" - } - }, - "401" : { - "description" : "This status code indicates that the user is not a valid API Gateway user for retrieving this configuration." - } - }, - "security" : [ { - "Basic" : [ ] - } ] - }, - "put" : { - "description" : "The method is used to update the details of the default keystore, truststore and alias configuration in API Gateway.", - "operationId" : "saveKeystoreTruststore", - "consumes" : [ "application/json" ], - "produces" : [ "application/json" ], - "parameters" : [ { - "in" : "body", - "name" : "body", - "description" : "", - "required" : true, - "schema" : { - "$ref" : "#/definitions/KeystoreTruststore" - }, - "x-examples" : { - "application/json" : "{\r\n\t\"keystoreName\": \"DEFAULT_IS_KEYSTORE\",\r\n\t\"signingAlias\": \"ssos\",\r\n\t\"truststoreName\": \"DEFAULT_IS_TRUSTSTORE\"\r\n}" - } - } ], - "responses" : { - "200" : { - "description" : "This status code indicates that the default keystore, truststore and alias configuration has been successfully updated in API Gateway, and the updated configuration is available in the response body.", - "examples" : { - "application/json" : "{\r\n \"configId\": \"keystore\",\r\n \"keystoreName\": \"DEFAULT_IS_KEYSTORE\",\r\n \"signingAlias\": \"ssos\",\r\n \"truststoreName\": \"DEFAULT_IS_TRUSTSTORE\"\r\n}" - }, - "schema" : { - "$ref" : "#/definitions/KeystoreTruststore" - } - }, - "401" : { - "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have \"Manage security configurations\" functional privilege to access this API." - }, - "400" : { - "description" : "This status code indicates that the request body is invalid.", - "examples" : { - "application/json" : "{\r\n\"errorDetails\": \" Invalid property key found in request payload.\"\r\n}" - } - } - }, - "security" : [ { - "Basic" : [ ] - } ] - } - }, - "/configurations/gatewayDestinationConfig" : { - "get" : { - "description" : "The method retrieves the details of the API Gateway destination. API Gateway can publish runtime events(example: policy violation, log invocation, error events etc), design time events (example: audit log events) and metrics data. By default, error events, lifecycle events, policy violation event, audit logs and performance data are published to API Gateway.", - "operationId" : "getGatewayAsDestination", - "consumes" : [ "application/json" ], - "produces" : [ "application/json" ], - "parameters" : [ ], - "responses" : { - "200" : { - "description" : "This status code indicates that the API Gateway destination configurations are retrieved successfully. SendErrorEvent indicates whether API Gateway has to send error events to API Gateway destination. SendLifecycleEvent indicates whether API Gateway has to send lifecycle events to API Gateway destination. SendPolicyViolationEvent indicates whether API Gateway has to send policy violation events to API Gateway destination. SendPerformanceMetrics indicates whether API Gateway has to send performance metrics to API Gateway destination. MetricsPublishInterval indicates the interval at which the performance metrics will be published (value has to be between 1-60), default being 60. sendAuditlogAliasManagementEvent indicates whether API Gateway has to send Alias Management related audit logs to API Gateway destination. sendAuditlogPackageManagementEvent indicates whether API Gateway has to send Package Management related audit logs to API Gateway destination. sendAuditlogRuntimeDataManagementEvent indicates whether API Gateway has to send RuntimeData Management related audit logs to API Gateway destination. sendAuditlogPolicyManagementEvent indicates whether API Gateway has to send Policy Management related audit logs to API Gateway destination. sendAuditlogPlanManagementEvent indicates whether API Gateway has to send Plan Management related audit logs to API Gateway destination. sendAuditlogApprovalManagementEvent indicates whether API Gateway has to send Approval Management related audit logs to API Gateway destination. sendAuditlogUserManagementEvent indicates whether API Gateway has to send User Management related audit logs to API Gateway destination. sendAuditlogApplicationManagementEvent indicates whether API Gateway has to send Application Management related audit logs to API Gateway destination. sendAuditlogAdministrationEvent indicates whether API Gateway has to send Administration related audit logs to API Gateway destination. sendAuditlogGroupManagementEvent indicates whether API Gateway has to send Group Management related audit logs to API Gateway destination. sendAuditlogAccessProfileManagementEvent indicates whether API Gateway has to send Team Management related audit logs to API Gateway destination. sendAuditlogAPIManagementEvent indicates whether API Gateway has to send API Management related audit logs to API Gateway destination. sendAuditlogPromotionManagementEvent indicates whether API Gateway has to send Promotion Management related audit logs to API Gateway destination.", - "examples" : { - "application/json" : "{\r\n \"sendAuditlogAliasManagementEvent\": \"true\",\r\n \"sendLifecycleEvent\": \"true\",\r\n \"sendAuditlogPackageManagementEvent\": \"true\",\r\n \"sendAuditlogRuntimeDataManagementEvent\": \"true\",\r\n \"sendAuditlogPolicyManagementEvent\": \"true\",\r\n \"sendAuditlogPlanManagementEvent\": \"true\",\r\n \"sendAuditlogApprovalManagementEvent\": \"true\",\r\n \"sendAuditlogUserManagementEvent\": \"true\",\r\n \"sendPerformanceMetrics\": \"true\",\r\n \"sendAuditlogApplicationManagementEvent\": \"true\",\r\n \"sendAuditlogAdministrationEvent\": \"true\",\r\n \"sendPolicyViolationEvent\": \"true\",\r\n \"sendErrorEvent\": \"true\",\r\n \"sendAuditlogGroupManagementEvent\": \"true\",\r\n \"metricsPublishInterval\": \"60\",\r\n \"sendAuditlogAccessProfileManagementEvent\": \"true\",\r\n \"sendAuditlogAPIManagementEvent\": \"true\",\r\n \"sendAuditlogPromotionManagementEvent\": \"true\"\r\n}" - }, - "schema" : { - "$ref" : "#/definitions/Destination" - } - }, - "400" : { - "description" : "This status code indicates that the provided configuration id is invalid.", - "examples" : { - "application/json" : "{\r\n \"errorDetails\": \" Invalid configId value in request. configId: gatewayDestinationConfigg.\"\r\n}" - } - }, - "401" : { - "description" : "This status code indicates that the user is not a valid API Gateway user for retrieving the API Gateway destination configuration." - } - }, - "security" : [ { - "Basic" : [ ] - } ] - }, - "put" : { - "description" : "The method is used to update the details of the API Gateway destination in API Gateway.", - "operationId" : "saveGatewayAsDestination", - "consumes" : [ "application/json" ], - "produces" : [ "application/json" ], - "parameters" : [ { - "in" : "body", - "name" : "body", - "description" : "", - "required" : true, - "schema" : { - "$ref" : "#/definitions/Destination" - }, - "x-examples" : { - "application/json" : "{\r\n \"sendAuditlogAliasManagementEvent\": \"true\",\r\n \"sendLifecycleEvent\": \"true\",\r\n \"sendAuditlogPackageManagementEvent\": \"true\",\r\n \"sendAuditlogRuntimeDataManagementEvent\": \"true\",\r\n \"sendAuditlogPolicyManagementEvent\": \"true\",\r\n \"sendAuditlogPlanManagementEvent\": \"true\",\r\n \"sendAuditlogApprovalManagementEvent\": \"true\",\r\n \"sendAuditlogUserManagementEvent\": \"true\",\r\n \"sendPerformanceMetrics\": \"true\",\r\n \"sendAuditlogApplicationManagementEvent\": \"true\",\r\n \"sendAuditlogAdministrationEvent\": \"true\",\r\n \"sendPolicyViolationEvent\": \"true\",\r\n \"sendErrorEvent\": \"true\",\r\n \"sendAuditlogGroupManagementEvent\": \"true\",\r\n \"metricsPublishInterval\": \"60\",\r\n \"sendAuditlogAccessProfileManagementEvent\": \"true\",\r\n \"sendAuditlogAPIManagementEvent\": \"true\",\r\n \"sendAuditlogPromotionManagementEvent\": \"true\"\r\n}" - } - } ], - "responses" : { - "200" : { - "description" : "This status code indicates that the API Gateway destination configuration has been successfully updated in API Gateway, and the updated configuration is available in the response body.", - "examples" : { - "application/json" : "{\r\n \"sendAuditlogAliasManagementEvent\": \"true\",\r\n \"sendLifecycleEvent\": \"true\",\r\n \"sendAuditlogPackageManagementEvent\": \"true\",\r\n \"sendAuditlogRuntimeDataManagementEvent\": \"true\",\r\n \"sendAuditlogPolicyManagementEvent\": \"true\",\r\n \"sendAuditlogPlanManagementEvent\": \"true\",\r\n \"sendAuditlogApprovalManagementEvent\": \"true\",\r\n \"sendAuditlogUserManagementEvent\": \"true\",\r\n \"sendPerformanceMetrics\": \"true\",\r\n \"sendAuditlogApplicationManagementEvent\": \"true\",\r\n \"sendAuditlogAdministrationEvent\": \"true\",\r\n \"sendPolicyViolationEvent\": \"true\",\r\n \"sendErrorEvent\": \"true\",\r\n \"sendAuditlogGroupManagementEvent\": \"true\",\r\n \"metricsPublishInterval\": \"60\",\r\n \"sendAuditlogAccessProfileManagementEvent\": \"true\",\r\n \"sendAuditlogAPIManagementEvent\": \"true\",\r\n \"sendAuditlogPromotionManagementEvent\": \"true\"\r\n}" - }, - "schema" : { - "$ref" : "#/definitions/Destination" - } - }, - "405" : { - "description" : "This status code indicates that the specified HTTP method is not allowed for the requested destination configuration in API Gateway.", - "examples" : { - "application/json" : "{\r\n\t\"errorDetails\": \" Unable to process the PUT request for API Gateway destination configuration. Error occurred while processing the payload. Error Message: Method: PUT is not allowed on resource: gatewayDestinationConfig\"\r\n}" - } - }, - "401" : { - "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have \"Manage Destination Administration\" functional privilege to access this API." - }, - "400" : { - "description" : "This status code indicates that the request body is invalid.", - "examples" : { - "application/json" : "{\r\n\"errorDetails\": \" Invalid property key found in request payload.\"\r\n}" - } - } - }, - "security" : [ { - "Basic" : [ ] - } ] - } - }, - "/configurations/auditlogDestinationConfig" : { - "get" : { - "description" : "The method retrieves the details of the Transaction Logger destination in API Gateway. Transaction Logger captures the API runtime invocations performed in API Gateway. The transaction logger data is written to a file or a database based on the configurations. Transactions events are written to the transaction logger only when the Transaction Logger is selected as a destination in Log Invocation Policy.", - "operationId" : "getAuditLogAsDestination", - "consumes" : [ "application/json" ], - "produces" : [ "application/json" ], - "parameters" : [ ], - "responses" : { - "200" : { - "description" : "This status code indicates that the Transaction Logger destination configurations are retrieved successfully.", - "examples" : { - "application/json" : "{\r\n \"name\": \"API Gateway Transaction Logger\",\r\n \"enabled\": \"false\",\r\n \"mode\": \"synchronous\",\r\n \"guaranteed\": \"false\",\r\n \"destination\": \"file\",\r\n \"maximumQueueSize\": \"100000\",\r\n \"maximumRetries\": \"3\",\r\n \"waitBetweenRetries\": \"5\"\r\n}" - }, - "schema" : { - "$ref" : "#/definitions/AuditLogDestination" - } - }, - "400" : { - "description" : "This status code indicates that the provided configuration id is invalid.", - "examples" : { - "application/json" : "{\r\n \"errorDetails\": \" Invalid configId value in request. configId: auditlogDestinationConfigg.\"\r\n}" - } - }, - "401" : { - "description" : "This status code indicates that the user is not a valid API Gateway user for retrieving the Transaction Logger destination configuration." - } - }, - "security" : [ { - "Basic" : [ ] - } ] - }, - "put" : { - "description" : "The method is used to update the details of the Transaction Logger destination in API Gateway.", - "operationId" : "saveAuditLogAsDestination", - "consumes" : [ "application/json" ], - "produces" : [ "application/json" ], - "parameters" : [ { - "in" : "body", - "name" : "body", - "description" : "", - "required" : true, - "schema" : { - "$ref" : "#/definitions/AuditLogDestination" - }, - "x-examples" : { - "application/json" : "{\r\n \"name\": \"API Gateway Transaction Logger\",\r\n \"enabled\": \"false\",\r\n \"mode\": \"synchronous\",\r\n \"guaranteed\": \"false\",\r\n \"destination\": \"file\",\r\n \"maximumQueueSize\": \"100000\",\r\n \"maximumRetries\": \"3\",\r\n \"waitBetweenRetries\": \"5\"\r\n}" - } - } ], - "responses" : { - "200" : { - "description" : "This status code indicates that the Transaction Logger destination configuration has been successfully updated in API Gateway, and the updated configuration is available in the response body.", - "examples" : { - "application/json" : "{\r\n \"name\": \"API Gateway Transaction Logger\",\r\n \"enabled\": \"false\",\r\n \"mode\": \"synchronous\",\r\n \"guaranteed\": \"false\",\r\n \"destination\": \"file\",\r\n \"maximumQueueSize\": \"100000\",\r\n \"maximumRetries\": \"3\",\r\n \"waitBetweenRetries\": \"5\"\r\n}" - }, - "schema" : { - "$ref" : "#/definitions/AuditLogDestination" - } - }, - "401" : { - "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have \"Manage Destination Administration\" functional privilege to access this API." - }, - "405" : { - "description" : "This status code indicates that the specified HTTP method is not allowed for the requested destination configuration in API Gateway.", - "examples" : { - "application/json" : "{\r\n\t\"errorDetails\": \" Unable to process the PUT request for Audit Log destination configuration. Error occurred while processing the payload. Error Message: Method: PUT is not allowed on resource: auditlogDestinationConfig\"\r\n}" - } - }, - "400" : { - "description" : "This status code indicates that the request body is invalid.", - "examples" : { - "application/json" : "{\r\n\"errorDetails\": \" Invalid property key found in request payload.\"\r\n}" - } - } - }, - "security" : [ { - "Basic" : [ ] - } ] - } - }, - "/configurations/centraSiteDestinationCommunicationConfig" : { - "get" : { - "description" : "The method retrieves the communication details of the CentraSite destination in API Gateway. API Gateway can publish events and metrics to the configured CentraSite destination.", - "operationId" : "getCentraSiteCommunicationAsDestination", - "consumes" : [ "application/json" ], - "produces" : [ "application/json" ], - "parameters" : [ ], - "responses" : { - "200" : { - "description" : "This status code indicates that the Communication details for the CentraSite destination configurations are retrieved successfully.", - "examples" : { - "application/json" : "{\r\n \"protocol\": \"tcp\",\r\n \"hostName\": \"localhost\",\r\n \"targetName\": \"cstarget\",\r\n \"UDDIPort\": \"53307\",\r\n \"userName\": \"Admin\",\r\n \"password\": \"***\",\r\n \"gatewayAssetId\": \"334-3443-sd34\"\r\n}" - }, - "schema" : { - "$ref" : "#/definitions/CSCommunicationDestination" - } - }, - "400" : { - "description" : "This status code indicates that the provided configuration id is invalid.", - "examples" : { - "application/json" : "{\r\n \"errorDetails\": \" Invalid configId value in request. configId: centraSiteDestinationCommunicationConfigg.\"\r\n}" - } - }, - "401" : { - "description" : "This status code indicates that the user is not a valid API Gateway user for retrieving the Communication details for the CentraSite destination." - } - }, - "security" : [ { - "Basic" : [ ] - } ] - }, - "put" : { - "description" : "The method is used to update the Communication details of the CentraSite destination in API Gateway.", - "operationId" : "saveCentraSiteCommunicationAsDestination", - "consumes" : [ "application/json" ], - "produces" : [ "application/json" ], - "parameters" : [ { - "in" : "body", - "name" : "body", - "description" : "", - "required" : true, - "schema" : { - "$ref" : "#/definitions/CSCommunicationDestination" - }, - "x-examples" : { - "application/json" : "{\r\n \"protocol\": \"tcp\",\r\n \"hostName\": \"localhost\",\r\n \"targetName\": \"cstarget\",\r\n \"UDDIPort\": \"53307\",\r\n \"userName\": \"Admin\",\r\n \"password\": \"***\",\r\n \"gatewayAssetId\": \"334-3443-sd34\"\r\n}" - } - } ], - "responses" : { - "200" : { - "description" : "This status code indicates that the CentraSite Communication destination configuration has been successfully updated in API Gateway, and the updated configuration is available in the response body.", - "examples" : { - "application/json" : "{\r\n \"protocol\": \"tcp\",\r\n \"hostName\": \"localhost\",\r\n \"targetName\": \"cstarget\",\r\n \"UDDIPort\": \"53307\",\r\n \"userName\": \"Admin\",\r\n \"password\": \"***\",\r\n \"gatewayAssetId\": \"334-3443-sd34\"\r\n}" - }, - "schema" : { - "$ref" : "#/definitions/CSCommunicationDestination" - } - }, - "401" : { - "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have \"Manage Destination Administration\" functional privilege to access this API." - }, - "405" : { - "description" : "This status code indicates that the specified HTTP method is not allowed for the requested destination configuration in API Gateway.", - "examples" : { - "application/json" : "{\r\n\t\"errorDetails\": \" Unable to process the PUT request for Audit Log destination configuration. Error occurred while processing the payload. Error Message: Method: PUT is not allowed on resource: centraSiteDestinationCommunicationConfigg\"\r\n}" - } - }, - "400" : { - "description" : "This status code indicates that the request body is invalid.", - "examples" : { - "application/json" : "{\r\n\"errorDetails\": \" Invalid property key found in request payload.\"\r\n}" - } - } - }, - "security" : [ { - "Basic" : [ ] - } ] - } - }, - "/configurations/centraSiteDestinationSNMPConfig" : { - "get" : { - "description" : "The method retrieves the SNMP details of the CentraSite destination in API Gateway. API Gateway can publish events and metrics to the configured CentraSite destination.", - "operationId" : "getCentraSiteSNMPAsDestination", - "consumes" : [ "application/json" ], - "produces" : [ "application/json" ], - "parameters" : [ ], - "responses" : { - "200" : { - "description" : "This status code indicates that the CentraSite SNMP destination configurations are retrieved successfully.", - "examples" : { - "application/json" : "{\r\n \"sendTRAPsToCentrasite\": \"false\",\r\n \"hostName\": \"localhost\",\r\n \"port\": \"8181\",\r\n \"transport\": \"tcp\",\r\n \"userName\": \"Administrator\",\r\n \"authorizationPassword\": \"*****\",\r\n \"authorizationProtocol\": \"MD5\",\r\n \"privacyPassword\": \"*****\",\r\n \"privacyProtocol\": \"DES\"\r\n}" - }, - "schema" : { - "$ref" : "#/definitions/CSSNMPDestination" - } - }, - "400" : { - "description" : "This status code indicates that the provided configuration id is invalid.", - "examples" : { - "application/json" : "{\r\n \"errorDetails\": \" Invalid configId value in request. configId: centraSiteDestinationSNMPConfigg.\"\r\n}" - } - }, - "401" : { - "description" : "This status code indicates that the user is not a valid API Gateway user for retrieving the CentraSite SNMP destination configuration." - } - }, - "security" : [ { - "Basic" : [ ] - } ] - }, - "put" : { - "description" : "The method is used to update the details of the CentraSite SNMP destination in API Gateway.", - "operationId" : "saveCentraSiteSNMPAsDestination", - "consumes" : [ "application/json" ], - "produces" : [ "application/json" ], - "parameters" : [ { - "in" : "body", - "name" : "body", - "description" : "", - "required" : true, - "schema" : { - "$ref" : "#/definitions/CSSNMPDestination" - }, - "x-examples" : { - "application/json" : "{\r\n \"sendTRAPsToCentrasite\": \"false\",\r\n \"hostName\": \"localhost\",\r\n \"port\": \"8181\",\r\n \"transport\": \"tcp\",\r\n \"userName\": \"Administrator\",\r\n \"authorizationPassword\": \"*****\",\r\n \"authorizationProtocol\": \"MD5\",\r\n \"privacyPassword\": \"*****\",\r\n \"privacyProtocol\": \"DES\"\r\n}" - } - } ], - "responses" : { - "200" : { - "description" : "This status code indicates that the CentraSite SNMP destination configuration has been successfully updated in API Gateway, and the updated configuration is available in the response body.", - "examples" : { - "application/json" : "{\r\n \"sendTRAPsToCentrasite\": \"false\",\r\n \"hostName\": \"localhost\",\r\n \"port\": \"8181\",\r\n \"transport\": \"tcp\",\r\n \"userName\": \"Administrator\",\r\n \"authorizationPassword\": \"*****\",\r\n \"authorizationProtocol\": \"MD5\",\r\n \"privacyPassword\": \"*****\",\r\n \"privacyProtocol\": \"DES\"\r\n}" - }, - "schema" : { - "$ref" : "#/definitions/CSSNMPDestination" - } - }, - "401" : { - "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have \"Manage Destination Administration\" functional privilege to access this API." - }, - "405" : { - "description" : "This status code indicates that the specified HTTP method is not allowed for the requested destination configuration in API Gateway.", - "examples" : { - "application/json" : "{\r\n\t\"errorDetails\": \" Unable to process the PUT request for Audit Log destination configuration. Error occurred while processing the payload. Error Message: Method: PUT is not allowed on resource: centraSiteDestinationSNMPConfigg\"\r\n}" - } - }, - "400" : { - "description" : "This status code indicates that the request body is invalid.", - "examples" : { - "application/json" : "{\r\n\"errorDetails\": \" Invalid property key found in request payload.\"\r\n}" - } - } - }, - "security" : [ { - "Basic" : [ ] - } ] - } - }, - "/configurations/jdbcDestinationConfig" : { - "get" : { - "description" : "The method retrieves the details of the Database destination in API Gateway. API Gateway can publish runtime events(example: policy violation, log invocation, error events etc), design time events (example: audit log events) and metrics to the configured Database destination.", - "operationId" : "getDatabaseAsDestination", - "consumes" : [ "application/json" ], - "produces" : [ "application/json" ], - "parameters" : [ ], - "responses" : { - "200" : { - "description" : "This status code indicates that the JDBC destination configurations are retrieved successfully. SendErrorEvent indicates whether API Gateway has to send error events to API Gateway destination. SendLifecycleEvent indicates whether API Gateway has to send lifecycle events to API Gateway destination. SendPolicyViolationEvent indicates whether API Gateway has to send policy violation events to API Gateway destination. SendPerformanceMetrics indicates whether API Gateway has to send performance metrics to API Gateway destination. MetricsPublishInterval indicates the interval at which the performance metrics will be published (value has to be between 1-60), default being 60. sendAuditlogAliasManagementEvent indicates whether API Gateway has to send Alias Management related audit logs to API Gateway destination. sendAuditlogPackageManagementEvent indicates whether API Gateway has to send Package Management related audit logs to API Gateway destination. sendAuditlogRuntimeDataManagementEvent indicates whether API Gateway has to send RuntimeData Management related audit logs to API Gateway destination. sendAuditlogPolicyManagementEvent indicates whether API Gateway has to send Policy Management related audit logs to API Gateway destination. sendAuditlogPlanManagementEvent indicates whether API Gateway has to send Plan Management related audit logs to API Gateway destination. sendAuditlogApprovalManagementEvent indicates whether API Gateway has to send Approval Management related audit logs to API Gateway destination. sendAuditlogUserManagementEvent indicates whether API Gateway has to send User Management related audit logs to API Gateway destination. sendAuditlogApplicationManagementEvent indicates whether API Gateway has to send Application Management related audit logs to API Gateway destination. sendAuditlogAdministrationEvent indicates whether API Gateway has to send Administration related audit logs to API Gateway destination. sendAuditlogGroupManagementEvent indicates whether API Gateway has to send Group Management related audit logs to API Gateway destination. sendAuditlogAccessProfileManagementEvent indicates whether API Gateway has to send Team Management related audit logs to API Gateway destination. sendAuditlogAPIManagementEvent indicates whether API Gateway has to send API Management related audit logs to API Gateway destination. sendAuditlogPromotionManagementEvent indicates whether API Gateway has to send Promotion Management related audit logs to API Gateway destination.", - "examples" : { - "application/json" : "{\r\n \"sendAuditlogAliasManagementEvent\": \"true\",\r\n \"sendLifecycleEvent\": \"true\",\r\n \"sendAuditlogPackageManagementEvent\": \"true\",\r\n \"sendAuditlogRuntimeDataManagementEvent\": \"true\",\r\n \"sendAuditlogPolicyManagementEvent\": \"true\",\r\n \"sendAuditlogPlanManagementEvent\": \"true\",\r\n \"sendAuditlogApprovalManagementEvent\": \"true\",\r\n \"sendAuditlogUserManagementEvent\": \"true\",\r\n \"sendPerformanceMetrics\": \"true\",\r\n \"sendAuditlogApplicationManagementEvent\": \"true\",\r\n \"sendAuditlogAdministrationEvent\": \"true\",\r\n \"sendPolicyViolationEvent\": \"true\",\r\n \"sendErrorEvent\": \"true\",\r\n \"sendAuditlogGroupManagementEvent\": \"true\",\r\n \"metricsPublishInterval\": \"60\",\r\n \"sendAuditlogAccessProfileManagementEvent\": \"true\",\r\n \"sendAuditlogAPIManagementEvent\": \"true\",\r\n \"sendAuditlogPromotionManagementEvent\": \"true\"\r\n}" - }, - "schema" : { - "$ref" : "#/definitions/Destination" - } - }, - "400" : { - "description" : "This status code indicates that the provided configuration id is invalid.", - "examples" : { - "application/json" : "{\r\n \"errorDetails\": \" Invalid configId value in request. configId: jdbcDestinationConfigg.\"\r\n}" - } - }, - "401" : { - "description" : "This status code indicates that the user is not a valid API Gateway user for retrieving the Database destination configuration." - } - }, - "security" : [ { - "Basic" : [ ] - } ] - }, - "put" : { - "description" : "The method is used to update the details of the Database destination in API Gateway.", - "operationId" : "saveDatabaseAsDestination", - "consumes" : [ "application/json" ], - "produces" : [ "application/json" ], - "parameters" : [ { - "in" : "body", - "name" : "body", - "description" : "", - "required" : true, - "schema" : { - "$ref" : "#/definitions/Destination" - }, - "x-examples" : { - "application/json" : "{\r\n \"sendAuditlogAliasManagementEvent\": \"true\",\r\n \"sendLifecycleEvent\": \"true\",\r\n \"sendAuditlogPackageManagementEvent\": \"true\",\r\n \"sendAuditlogRuntimeDataManagementEvent\": \"true\",\r\n \"sendAuditlogPolicyManagementEvent\": \"true\",\r\n \"sendAuditlogPlanManagementEvent\": \"true\",\r\n \"sendAuditlogApprovalManagementEvent\": \"true\",\r\n \"sendAuditlogUserManagementEvent\": \"true\",\r\n \"sendPerformanceMetrics\": \"true\",\r\n \"sendAuditlogApplicationManagementEvent\": \"true\",\r\n \"sendAuditlogAdministrationEvent\": \"true\",\r\n \"sendPolicyViolationEvent\": \"true\",\r\n \"sendErrorEvent\": \"true\",\r\n \"sendAuditlogGroupManagementEvent\": \"true\",\r\n \"metricsPublishInterval\": \"60\",\r\n \"sendAuditlogAccessProfileManagementEvent\": \"true\",\r\n \"sendAuditlogAPIManagementEvent\": \"true\",\r\n \"sendAuditlogPromotionManagementEvent\": \"true\"\r\n}" - } - } ], - "responses" : { - "200" : { - "description" : "This status code indicates that the Database destination configuration has been successfully updated in API Gateway, and the updated configuration is available in the response body.", - "examples" : { - "application/json" : "{\r\n \"sendAuditlogAliasManagementEvent\": \"true\",\r\n \"sendLifecycleEvent\": \"true\",\r\n \"sendAuditlogPackageManagementEvent\": \"true\",\r\n \"sendAuditlogRuntimeDataManagementEvent\": \"true\",\r\n \"sendAuditlogPolicyManagementEvent\": \"true\",\r\n \"sendAuditlogPlanManagementEvent\": \"true\",\r\n \"sendAuditlogApprovalManagementEvent\": \"true\",\r\n \"sendAuditlogUserManagementEvent\": \"true\",\r\n \"sendPerformanceMetrics\": \"true\",\r\n \"sendAuditlogApplicationManagementEvent\": \"true\",\r\n \"sendAuditlogAdministrationEvent\": \"true\",\r\n \"sendPolicyViolationEvent\": \"true\",\r\n \"sendErrorEvent\": \"true\",\r\n \"sendAuditlogGroupManagementEvent\": \"true\",\r\n \"metricsPublishInterval\": \"60\",\r\n \"sendAuditlogAccessProfileManagementEvent\": \"true\",\r\n \"sendAuditlogAPIManagementEvent\": \"true\",\r\n \"sendAuditlogPromotionManagementEvent\": \"true\"\r\n}" - }, - "schema" : { - "$ref" : "#/definitions/Destination" - } - }, - "401" : { - "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have \"Manage Destination Administration\" functional privilege to access this API." - }, - "405" : { - "description" : "This status code indicates that the specified HTTP method is not allowed for the requested destination configuration in API Gateway.", - "examples" : { - "application/json" : "{\r\n\t\"errorDetails\": \" Unable to process the PUT request for Database destination configuration. Error occurred while processing the payload. Error Message: Method: PUT is not allowed on resource: jdbcDestinationConfig\"\r\n}" - } - }, - "400" : { - "description" : "This status code indicates that the request body is invalid.", - "examples" : { - "application/json" : "{\r\n\"errorDetails\": \" Invalid property key found in request payload.\"\r\n}" - } - } - }, - "security" : [ { - "Basic" : [ ] - } ] - } - }, - "/configurations/desDestinationConfig" : { - "get" : { - "description" : "The method retrieves the details of the Digital Events destination in API Gateway. Digital Event Services (DES) enables API Gateway to communicate by exchanging digital events. API Gateway can publish runtime events(example: policy violation,log invocation, error events etc), design time events (example: audit log events) and metrics to the configured DES destination.", - "operationId" : "getDigitalEventsAsDestination", - "consumes" : [ "application/json" ], - "produces" : [ "application/json" ], - "parameters" : [ ], - "responses" : { - "200" : { - "description" : "This status code indicates that the DES destination configurations are retrieved successfully. SendErrorEvent indicates whether API Gateway has to send error events to API Gateway destination. SendLifecycleEvent indicates whether API Gateway has to send lifecycle events to API Gateway destination. SendPolicyViolationEvent indicates whether API Gateway has to send policy violation events to API Gateway destination. SendPerformanceMetrics indicates whether API Gateway has to send performance metrics to API Gateway destination. MetricsPublishInterval indicates the interval at which the performance metrics will be published (value has to be between 1-60), default being 60. sendAuditlogAliasManagementEvent indicates whether API Gateway has to send Alias Management related audit logs to API Gateway destination. sendAuditlogPackageManagementEvent indicates whether API Gateway has to send Package Management related audit logs to API Gateway destination. sendAuditlogRuntimeDataManagementEvent indicates whether API Gateway has to send RuntimeData Management related audit logs to API Gateway destination. sendAuditlogPolicyManagementEvent indicates whether API Gateway has to send Policy Management related audit logs to API Gateway destination. sendAuditlogPlanManagementEvent indicates whether API Gateway has to send Plan Management related audit logs to API Gateway destination. sendAuditlogApprovalManagementEvent indicates whether API Gateway has to send Approval Management related audit logs to API Gateway destination. sendAuditlogUserManagementEvent indicates whether API Gateway has to send User Management related audit logs to API Gateway destination. sendAuditlogApplicationManagementEvent indicates whether API Gateway has to send Application Management related audit logs to API Gateway destination. sendAuditlogAdministrationEvent indicates whether API Gateway has to send Administration related audit logs to API Gateway destination. sendAuditlogGroupManagementEvent indicates whether API Gateway has to send Group Management related audit logs to API Gateway destination. sendAuditlogAccessProfileManagementEvent indicates whether API Gateway has to send Team Management related audit logs to API Gateway destination. sendAuditlogAPIManagementEvent indicates whether API Gateway has to send API Management related audit logs to API Gateway destination. sendAuditlogPromotionManagementEvent indicates whether API Gateway has to send Promotion Management related audit logs to API Gateway destination.", - "examples" : { - "application/json" : "{\r\n \"sendAuditlogAliasManagementEvent\": \"true\",\r\n \"sendLifecycleEvent\": \"true\",\r\n \"sendAuditlogPackageManagementEvent\": \"true\",\r\n \"sendAuditlogRuntimeDataManagementEvent\": \"true\",\r\n \"sendAuditlogPolicyManagementEvent\": \"true\",\r\n \"sendAuditlogPlanManagementEvent\": \"true\",\r\n \"sendAuditlogApprovalManagementEvent\": \"true\",\r\n \"sendAuditlogUserManagementEvent\": \"true\",\r\n \"sendPerformanceMetrics\": \"true\",\r\n \"sendAuditlogApplicationManagementEvent\": \"true\",\r\n \"sendAuditlogAdministrationEvent\": \"true\",\r\n \"sendPolicyViolationEvent\": \"true\",\r\n \"sendErrorEvent\": \"true\",\r\n \"sendAuditlogGroupManagementEvent\": \"true\",\r\n \"metricsPublishInterval\": \"60\",\r\n \"sendAuditlogAccessProfileManagementEvent\": \"true\",\r\n \"sendAuditlogAPIManagementEvent\": \"true\",\r\n \"sendAuditlogPromotionManagementEvent\": \"true\"\r\n}" - }, - "schema" : { - "$ref" : "#/definitions/Destination" - } - }, - "400" : { - "description" : "This status code indicates that the provided configuration id is invalid.", - "examples" : { - "application/json" : "{\r\n \"errorDetails\": \" Invalid configId value in request. configId: desDestinationConfigg.\"\r\n}" - } - }, - "401" : { - "description" : "This status code indicates that the user is not a valid API Gateway user for retrieving the Digital Events destination configuration." - } - }, - "security" : [ { - "Basic" : [ ] - } ] - }, - "put" : { - "description" : "The method is used to update the details of the Digital Events destination in API Gateway.", - "operationId" : "saveDigitalEventsAsDestination", - "consumes" : [ "application/json" ], - "produces" : [ "application/json" ], - "parameters" : [ { - "in" : "body", - "name" : "body", - "description" : "", - "required" : true, - "schema" : { - "$ref" : "#/definitions/Destination" - }, - "x-examples" : { - "application/json" : "{\r\n \"sendAuditlogAliasManagementEvent\": \"true\",\r\n \"sendLifecycleEvent\": \"true\",\r\n \"sendAuditlogPackageManagementEvent\": \"true\",\r\n \"sendAuditlogRuntimeDataManagementEvent\": \"true\",\r\n \"sendAuditlogPolicyManagementEvent\": \"true\",\r\n \"sendAuditlogPlanManagementEvent\": \"true\",\r\n \"sendAuditlogApprovalManagementEvent\": \"true\",\r\n \"sendAuditlogUserManagementEvent\": \"true\",\r\n \"sendPerformanceMetrics\": \"true\",\r\n \"sendAuditlogApplicationManagementEvent\": \"true\",\r\n \"sendAuditlogAdministrationEvent\": \"true\",\r\n \"sendPolicyViolationEvent\": \"true\",\r\n \"sendErrorEvent\": \"true\",\r\n \"sendAuditlogGroupManagementEvent\": \"true\",\r\n \"metricsPublishInterval\": \"60\",\r\n \"sendAuditlogAccessProfileManagementEvent\": \"true\",\r\n \"sendAuditlogAPIManagementEvent\": \"true\",\r\n \"sendAuditlogPromotionManagementEvent\": \"true\"\r\n}" - } - } ], - "responses" : { - "200" : { - "description" : "This status code indicates that the Digital Events destination configuration has been successfully updated in API Gateway, and the updated configuration is available in the response body.", - "examples" : { - "application/json" : "{\r\n \"sendAuditlogAliasManagementEvent\": \"true\",\r\n \"sendLifecycleEvent\": \"true\",\r\n \"sendAuditlogPackageManagementEvent\": \"true\",\r\n \"sendAuditlogRuntimeDataManagementEvent\": \"true\",\r\n \"sendAuditlogPolicyManagementEvent\": \"true\",\r\n \"sendAuditlogPlanManagementEvent\": \"true\",\r\n \"sendAuditlogApprovalManagementEvent\": \"true\",\r\n \"sendAuditlogUserManagementEvent\": \"true\",\r\n \"sendPerformanceMetrics\": \"true\",\r\n \"sendAuditlogApplicationManagementEvent\": \"true\",\r\n \"sendAuditlogAdministrationEvent\": \"true\",\r\n \"sendPolicyViolationEvent\": \"true\",\r\n \"sendErrorEvent\": \"true\",\r\n \"sendAuditlogGroupManagementEvent\": \"true\",\r\n \"metricsPublishInterval\": \"60\",\r\n \"sendAuditlogAccessProfileManagementEvent\": \"true\",\r\n \"sendAuditlogAPIManagementEvent\": \"true\",\r\n \"sendAuditlogPromotionManagementEvent\": \"true\"\r\n}" - }, - "schema" : { - "$ref" : "#/definitions/Destination" - } - }, - "401" : { - "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have \"Manage Destination Administration\" functional privilege to access this API." - }, - "405" : { - "description" : "This status code indicates that the specified HTTP method is not allowed for the requested destination configuration in API Gateway.", - "examples" : { - "application/json" : "{\r\n\t\"errorDetails\": \" Unable to process the PUT request for Digital Events destination configuration. Error occurred while processing the payload. Error Message: Method: PUT is not allowed on resource: desDestinationConfig\"\r\n}" - } - }, - "400" : { - "description" : "This status code indicates that the request body is invalid.", - "examples" : { - "application/json" : "{\r\n\"errorDetails\": \" Invalid property key found in request payload.\"\r\n}" - } - } - }, - "security" : [ { - "Basic" : [ ] - } ] - } - }, - "/configurations/elasticsearchDestinationConfig" : { - "get" : { - "description" : "The method retrieves the details of the Elasticsearch destination in API Gateway. API Gateway can publish runtime events(example: policy violation, log invocation, error events etc), design time events (example: audit log events) and metrics to the configured Elasticsearch destination.", - "operationId" : "getElasticsearchAsDestination", - "consumes" : [ "application/json" ], - "produces" : [ "application/json" ], - "parameters" : [ ], - "responses" : { - "200" : { - "description" : "This status code indicates that the Elastic search destination configurations are retrieved successfully. SendErrorEvent indicates whether API Gateway has to send error events to API Gateway destination. SendLifecycleEvent indicates whether API Gateway has to send lifecycle events to API Gateway destination. SendPolicyViolationEvent indicates whether API Gateway has to send policy violation events to API Gateway destination. SendPerformanceMetrics indicates whether API Gateway has to send performance metrics to API Gateway destination. MetricsPublishInterval indicates the interval at which the performance metrics will be published (value has to be between 1-60), default being 60. sendAuditlogAliasManagementEvent indicates whether API Gateway has to send Alias Management related audit logs to API Gateway destination. sendAuditlogPackageManagementEvent indicates whether API Gateway has to send Package Management related audit logs to API Gateway destination. sendAuditlogRuntimeDataManagementEvent indicates whether API Gateway has to send RuntimeData Management related audit logs to API Gateway destination. sendAuditlogPolicyManagementEvent indicates whether API Gateway has to send Policy Management related audit logs to API Gateway destination. sendAuditlogPlanManagementEvent indicates whether API Gateway has to send Plan Management related audit logs to API Gateway destination. sendAuditlogApprovalManagementEvent indicates whether API Gateway has to send Approval Management related audit logs to API Gateway destination. sendAuditlogUserManagementEvent indicates whether API Gateway has to send User Management related audit logs to API Gateway destination. sendAuditlogApplicationManagementEvent indicates whether API Gateway has to send Application Management related audit logs to API Gateway destination. sendAuditlogAdministrationEvent indicates whether API Gateway has to send Administration related audit logs to API Gateway destination. sendAuditlogGroupManagementEvent indicates whether API Gateway has to send Group Management related audit logs to API Gateway destination. sendAuditlogAccessProfileManagementEvent indicates whether API Gateway has to send Team Management related audit logs to API Gateway destination. sendAuditlogAPIManagementEvent indicates whether API Gateway has to send API Management related audit logs to API Gateway destination. sendAuditlogPromotionManagementEvent indicates whether API Gateway has to send Promotion Management related audit logs to API Gateway destination.", - "examples" : { - "application/json" : "{\r\n \"sendAuditlogAliasManagementEvent\": \"true\",\r\n \"sendLifecycleEvent\": \"true\",\r\n \"sendAuditlogPackageManagementEvent\": \"true\",\r\n \"sendAuditlogRuntimeDataManagementEvent\": \"true\",\r\n \"sendAuditlogPolicyManagementEvent\": \"true\",\r\n \"sendAuditlogPlanManagementEvent\": \"true\",\r\n \"sendAuditlogApprovalManagementEvent\": \"true\",\r\n \"sendAuditlogUserManagementEvent\": \"true\",\r\n \"sendPerformanceMetrics\": \"true\",\r\n \"sendAuditlogApplicationManagementEvent\": \"true\",\r\n \"sendAuditlogAdministrationEvent\": \"true\",\r\n \"sendPolicyViolationEvent\": \"true\",\r\n \"sendErrorEvent\": \"true\",\r\n \"sendAuditlogGroupManagementEvent\": \"true\",\r\n \"metricsPublishInterval\": \"60\",\r\n \"sendAuditlogAccessProfileManagementEvent\": \"true\",\r\n \"sendAuditlogAPIManagementEvent\": \"true\",\r\n \"sendAuditlogPromotionManagementEvent\": \"true\"\r\n}" - }, - "schema" : { - "$ref" : "#/definitions/ElasticsearchDestination" - } - }, - "400" : { - "description" : "This status code indicates that the provided configuration id is invalid.", - "examples" : { - "application/json" : "{\r\n \"errorDetails\": \" Invalid configId value in request. configId: elasticsearchdestinationConfigg.\"\r\n}" - } - }, - "401" : { - "description" : "This status code indicates that the user is not a valid API Gateway user for retrieving the Elasticsearch destination configuration." - } - }, - "security" : [ { - "Basic" : [ ] - } ] - }, - "put" : { - "description" : "The method is used to update the details of the Elasticsearch destination in API Gateway.", - "operationId" : "saveElasticsearchAsDestination", - "consumes" : [ "application/json" ], - "produces" : [ "application/json" ], - "parameters" : [ { - "in" : "body", - "name" : "body", - "description" : "", - "required" : true, - "schema" : { - "$ref" : "#/definitions/ElasticsearchDestination" - }, - "x-examples" : { - "application/json" : "{\r\n \"sendAuditlogAliasManagementEvent\": \"true\",\r\n \"sendLifecycleEvent\": \"true\",\r\n \"sendAuditlogPackageManagementEvent\": \"true\",\r\n \"sendAuditlogRuntimeDataManagementEvent\": \"true\",\r\n \"sendAuditlogPolicyManagementEvent\": \"true\",\r\n \"sendAuditlogPlanManagementEvent\": \"true\",\r\n \"sendAuditlogApprovalManagementEvent\": \"true\",\r\n \"sendAuditlogUserManagementEvent\": \"true\",\r\n \"sendPerformanceMetrics\": \"true\",\r\n \"sendAuditlogApplicationManagementEvent\": \"true\",\r\n \"sendAuditlogAdministrationEvent\": \"true\",\r\n \"sendPolicyViolationEvent\": \"true\",\r\n \"sendErrorEvent\": \"true\",\r\n \"sendAuditlogGroupManagementEvent\": \"true\",\r\n \"metricsPublishInterval\": \"60\",\r\n \"sendAuditlogAccessProfileManagementEvent\": \"true\",\r\n \"sendAuditlogAPIManagementEvent\": \"true\",\r\n \"sendAuditlogPromotionManagementEvent\": \"true\"\r\n}" - } - } ], - "responses" : { - "200" : { - "description" : "This status code indicates that the Elasticsearch destination configuration has been successfully updated in API Gateway, and the updated configuration is available in the response body.", - "examples" : { - "application/json" : "{\r\n \"sendAuditlogAliasManagementEvent\": \"true\",\r\n \"sendLifecycleEvent\": \"true\",\r\n \"sendAuditlogPackageManagementEvent\": \"true\",\r\n \"sendAuditlogRuntimeDataManagementEvent\": \"true\",\r\n \"sendAuditlogPolicyManagementEvent\": \"true\",\r\n \"sendAuditlogPlanManagementEvent\": \"true\",\r\n \"sendAuditlogApprovalManagementEvent\": \"true\",\r\n \"sendAuditlogUserManagementEvent\": \"true\",\r\n \"sendPerformanceMetrics\": \"true\",\r\n \"sendAuditlogApplicationManagementEvent\": \"true\",\r\n \"sendAuditlogAdministrationEvent\": \"true\",\r\n \"sendPolicyViolationEvent\": \"true\",\r\n \"sendErrorEvent\": \"true\",\r\n \"sendAuditlogGroupManagementEvent\": \"true\",\r\n \"metricsPublishInterval\": \"60\",\r\n \"sendAuditlogAccessProfileManagementEvent\": \"true\",\r\n \"sendAuditlogAPIManagementEvent\": \"true\",\r\n \"sendAuditlogPromotionManagementEvent\": \"true\"\r\n}" - }, - "schema" : { - "$ref" : "#/definitions/ElasticsearchDestination" - } - }, - "401" : { - "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have \"Manage Destination Administration\" functional privilege to access this API." - }, - "405" : { - "description" : "This status code indicates that the specified HTTP method is not allowed for the requested destination configuration in API Gateway.", - "examples" : { - "application/json" : "{\r\n\t\"errorDetails\": \" Unable to process the PUT request for Elasticsearch destination configuration. Error occurred while processing the payload. Error Message: Method: PUT is not allowed on resource: elasticsearchDestinationConfigg\"\r\n}" - } - }, - "400" : { - "description" : "This status code indicates that the request body is invalid.", - "examples" : { - "application/json" : "{\r\n\"errorDetails\": \" Invalid property key found in request payload.\"\r\n}" - } - } - }, - "security" : [ { - "Basic" : [ ] - } ] - } - }, - "/configurations/snmpDestinationConfig" : { - "get" : { - "description" : "The method retrieves the details of the SNMP destination in API Gateway. API Gateway can publish events and performance metrics data to the configured 3rd party SNMP server.", - "operationId" : "getSNMPAsDestination", - "consumes" : [ "application/json" ], - "produces" : [ "application/json" ], - "parameters" : [ ], - "responses" : { - "200" : { - "description" : "This status code indicates that the SNMP destination configurations are retrieved successfully. SendErrorEvent indicates whether API Gateway has to send error events to SNMP destination. SendLifecycleEvent indicates whether API Gateway has to send lifecycle events to SNMP destination. SendPolicyViolationEvent indicates whether API Gateway has to send policy violation events to SNMP destination. SendPerformanceMetrics indicates whether API Gateway has to send performance metrics to SNMP destination. MetricsPublishInterval indicates the interval at which the performance metrics will be published (value has to be between 1-60), default being 60.", - "examples" : { - "application/json" : "{\r\n \"sendTRAPs\": \"false\",\r\n \"snmpTargetType\": \"user\",\r\n \"hostName\": \"localhost\",\r\n \"port\": \"8081\",\r\n \"transport\": \"tcp\",\r\n \"userName\": \"Admin\",\r\n \"useAuth\": \"false\",\r\n \"authPassword\": \"\",\r\n \"authProtocol\": \"MD5\",\r\n \"usePrivacy\": \"false\",\r\n \"privacyPassword\": \"\",\r\n \"privacyProtocol\": \"DES\",\r\n \"communityName\": \"\",\r\n \"sendErrorEvent\": \"false\",\r\n \"sendLifecycleEvent\": \"false\",\r\n \"sendPolicyViolationEvent\": \"false\"\r\n}" - }, - "schema" : { - "$ref" : "#/definitions/SNMPDestination" - } - }, - "400" : { - "description" : "This status code indicates that the provided configuration id is invalid.", - "examples" : { - "application/json" : "{\r\n \"errorDetails\": \" Invalid configId value in request. configId: snmpDestinationConfigg.\"\r\n}" - } - }, - "401" : { - "description" : "This status code indicates that the user is not a valid API Gateway user for retrieving the SNMP destination configuration." - } - }, - "security" : [ { - "Basic" : [ ] - } ] - }, - "put" : { - "description" : "The method is used to update the details of the SNMP destination in API Gateway.", - "operationId" : "saveSNMPAsDestination", - "consumes" : [ "application/json" ], - "produces" : [ "application/json" ], - "parameters" : [ { - "in" : "body", - "name" : "body", - "description" : "", - "required" : true, - "schema" : { - "$ref" : "#/definitions/SNMPDestination" - }, - "x-examples" : { - "application/json" : "{\r\n \"sendTRAPs\": \"false\",\r\n \"snmpTargetType\": \"user\",\r\n \"hostName\": \"localhost\",\r\n \"port\": \"8081\",\r\n \"transport\": \"tcp\",\r\n \"userName\": \"Admin\",\r\n \"useAuth\": \"false\",\r\n \"authPassword\": \"\",\r\n \"authProtocol\": \"MD5\",\r\n \"usePrivacy\": \"false\",\r\n \"privacyPassword\": \"\",\r\n \"privacyProtocol\": \"DES\",\r\n \"communityName\": \"\",\r\n \"sendErrorEvent\": \"false\",\r\n \"sendLifecycleEvent\": \"false\",\r\n \"sendPolicyViolationEvent\": \"false\"\r\n}" - } - } ], - "responses" : { - "200" : { - "description" : "This status code indicates that the SNMP destination configuration has been successfully updated in API Gateway, and the updated configuration is available in the response body.", - "examples" : { - "application/json" : "{\r\n \"sendTRAPs\": \"false\",\r\n \"snmpTargetType\": \"user\",\r\n \"hostName\": \"localhost\",\r\n \"port\": \"8081\",\r\n \"transport\": \"tcp\",\r\n \"userName\": \"Admin\",\r\n \"useAuth\": \"false\",\r\n \"authPassword\": \"\",\r\n \"authProtocol\": \"MD5\",\r\n \"usePrivacy\": \"false\",\r\n \"privacyPassword\": \"\",\r\n \"privacyProtocol\": \"DES\",\r\n \"communityName\": \"\",\r\n \"sendErrorEvent\": \"false\",\r\n \"sendLifecycleEvent\": \"false\",\r\n \"sendPolicyViolationEvent\": \"false\"\r\n}" - }, - "schema" : { - "$ref" : "#/definitions/SNMPDestination" - } - }, - "401" : { - "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have \"Manage Destination Administration\" functional privilege to access this API." - }, - "405" : { - "description" : "This status code indicates that the specified HTTP method is not allowed for the requested destination configuration in API Gateway.", - "examples" : { - "application/json" : "{\r\n\t\"errorDetails\": \" Unable to process the PUT request for SNMP destination configuration. Error occurred while processing the payload. Error Message: Method: PUT is not allowed on resource: snmpDestinationConfig\"\r\n}" - } - }, - "400" : { - "description" : "This status code indicates that the request body is invalid.", - "examples" : { - "application/json" : "{\r\n\"errorDetails\": \" Invalid property key found in request payload.\"\r\n}" - } - } - }, - "security" : [ { - "Basic" : [ ] - } ] - } - }, - "/configurations/emailDestinationConfig" : { - "get" : { - "description" : "The method retrieves the details of the Email destination in API Gateway. API Gateway can send alerts to the email ID specified either in the Log Invocation, Monitor Service Performance, Monitor Service Level Agreement, (or) Throttling Traffic Optimization policies through the configured Email destination.", - "operationId" : "getEmailAsDestination", - "consumes" : [ "application/json" ], - "produces" : [ "application/json" ], - "parameters" : [ ], - "responses" : { - "200" : { - "description" : "This status code indicates that the Email destination configurations are retrieved successfully.", - "examples" : { - "application/json" : "{\r\n \"smtpServer\": \"mailhost\",\r\n \"port\": \"26\",\r\n \"userName\": \"\",\r\n \"password\": \"\",\r\n \"tls\": \"\",\r\n \"truststoreAlias\": \"\",\r\n \"internalEmail\": \"\",\r\n \"serviceEmail\": \"\",\r\n \"fromEmail\": \"a@example.com\",\r\n \"defaultEmailCharset\": \"\",\r\n \"testRecipient\": \"b@example.com\",\r\n \"logInvocationSubject\": \"Log Invocation mail\",\r\n \"logInvocationContent\": \"The transaction event\",\r\n \"monitorSPSubject\": \"Monitor Service Performance mail\",\r\n \"monitorSPContent\": \"The monitoring event\",\r\n \"monitorSLASubject\": \"Monitor SLA mail\",\r\n \"monitorSLAContent\": \"The monitoring event\",\r\n \"throttlingSubject\": \"Throttling mail\",\r\n \"throttlingContent\": \"The Throttling event\"\r\n}" - }, - "schema" : { - "$ref" : "#/definitions/EmailDestination" - } - }, - "400" : { - "description" : "This status code indicates that the provided configuration id is invalid.", - "examples" : { - "application/json" : "{\r\n \"errorDetails\": \" Invalid configId value in request. configId: emailDestinationConfigg.\"\r\n}" - } - }, - "401" : { - "description" : "This status code indicates that the user is not a valid API Gateway user retrieving the Email destination configuration." - } - }, - "security" : [ { - "Basic" : [ ] - } ] - }, - "put" : { - "description" : "The method is used to update the details of the Email destination in API Gateway.", - "operationId" : "saveEmailAsDestination", - "consumes" : [ "application/json" ], - "produces" : [ "application/json" ], - "parameters" : [ { - "in" : "body", - "name" : "body", - "description" : "", - "required" : true, - "schema" : { - "$ref" : "#/definitions/EmailDestination" - }, - "x-examples" : { - "application/json" : "{\r\n \"smtpServer\": \"mailhost\",\r\n \"port\": \"26\",\r\n \"userName\": \"\",\r\n \"password\": \"\",\r\n \"tls\": \"\",\r\n \"truststoreAlias\": \"\",\r\n \"internalEmail\": \"\",\r\n \"serviceEmail\": \"\",\r\n \"fromEmail\": \"a@example.com\",\r\n \"defaultEmailCharset\": \"\",\r\n \"testRecipient\": \"b@example.com\",\r\n \"logInvocationSubject\": \"Log Invocation mail\",\r\n \"logInvocationContent\": \"The transaction event\",\r\n \"monitorSPSubject\": \"Monitor Service Performance mail\",\r\n \"monitorSPContent\": \"The monitoring event\",\r\n \"monitorSLASubject\": \"Monitor SLA mail\",\r\n \"monitorSLAContent\": \"The monitoring event\",\r\n \"throttlingSubject\": \"Throttling mail\",\r\n \"throttlingContent\": \"The Throttling event\"\r\n}" - } - } ], - "responses" : { - "200" : { - "description" : "This status code indicates that the Email destination configuration has been successfully updated in API Gateway, and the updated configuration is available in the response body.", - "examples" : { - "application/json" : "{\r\n \"smtpServer\": \"mailhost\",\r\n \"port\": \"26\",\r\n \"userName\": \"\",\r\n \"password\": \"\",\r\n \"tls\": \"\",\r\n \"truststoreAlias\": \"\",\r\n \"internalEmail\": \"\",\r\n \"serviceEmail\": \"\",\r\n \"fromEmail\": \"a@example.com\",\r\n \"defaultEmailCharset\": \"\",\r\n \"testRecipient\": \"b@example.com\",\r\n \"logInvocationSubject\": \"Log Invocation mail\",\r\n \"logInvocationContent\": \"The transaction event\",\r\n \"monitorSPSubject\": \"Monitor Service Performance mail\",\r\n \"monitorSPContent\": \"The monitoring event\",\r\n \"monitorSLASubject\": \"Monitor SLA mail\",\r\n \"monitorSLAContent\": \"The monitoring event\",\r\n \"throttlingSubject\": \"Throttling mail\",\r\n \"throttlingContent\": \"The Throttling event\"\r\n}" - }, - "schema" : { - "$ref" : "#/definitions/EmailDestination" - } - }, - "401" : { - "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have \"Manage Destination Administration\" functional privilege to access this API." - }, - "405" : { - "description" : "This status code indicates that the specified HTTP method is not allowed for the requested destination configuration in API Gateway.", - "examples" : { - "application/json" : "{\r\n\t\"errorDetails\": \" Unable to process the PUT request for Email destination configuration. Error occurred while processing the payload. Error Message: Method: PUT is not allowed on resource: emailDestinationConfig\"\r\n}" - } - }, - "400" : { - "description" : "This status code indicates that the request body is invalid.", - "examples" : { - "application/json" : "{\r\n\"errorDetails\": \" Invalid property key found in request payload.\"\r\n}" - } - } - }, - "security" : [ { - "Basic" : [ ] - } ] - } - }, - "/configurations/apiPortalDestinationConfig" : { - "get" : { - "description" : "The method retrieves the details of the API Portal destination configurations. API Gateway can publish events and performance metrics data. By default, error events, lifecycle events, policy violation event, and performance data are published to API Portal.", - "operationId" : "getAPIPortalAsDestination", - "consumes" : [ "application/json" ], - "produces" : [ "application/json" ], - "parameters" : [ ], - "responses" : { - "200" : { - "description" : "This status code indicates that the API Portal destination configurations are retrieved successfully.", - "examples" : { - "application/json" : "{\r\n\t\"sendPolicyViolationEvent\": \"true\",\r\n\t\"metricsPublishInterval\": \"10\",\r\n\t\"sendErrorEvent\": \"true\",\r\n\t\"sendPerformanceMetrics\": \"true\",\r\n\t\"sendLifecycleEvent\": \"true\"\r\n}" - }, - "schema" : { - "$ref" : "#/definitions/Destination" - } - }, - "400" : { - "description" : "This status code indicates that the provided configuration id is invalid." - }, - "401" : { - "description" : "This status code indicates that the user is not a valid API Gateway user for retrieving the API Portal destination configuration." - } - }, - "security" : [ { - "Basic" : [ ] - } ] - }, - "put" : { - "description" : "The method is used to update the details of the API Portal destination in API Gateway.", - "operationId" : "saveAPIPortalAsDestination", - "consumes" : [ "application/json" ], - "produces" : [ "application/json" ], - "parameters" : [ { - "in" : "body", - "name" : "body", - "description" : "", - "required" : true, - "schema" : { - "$ref" : "#/definitions/Destination" - }, - "x-examples" : { - "application/json" : "{\r\n\t\"sendPolicyViolationEvent\": \"true\",\r\n\t\"metricsPublishInterval\": \"10\",\r\n\t\"sendErrorEvent\": \"true\",\r\n\t\"sendPerformanceMetrics\": \"true\",\r\n\t\"sendLifecycleEvent\": \"true\"\r\n}" - } - } ], - "responses" : { - "200" : { - "description" : "This status code indicates that the API Portal destination configuration has been successfully updated in API Gateway, and the updated configuration is available in the response body.", - "examples" : { - "application/json" : "{\r\n\t\"configId\": \"apiPortalDestinationConfig\",\r\n\t\"sendPolicyViolationEvent\": \"true\",\r\n\t\"metricsPublishInterval\": \"10\",\r\n\t\"sendErrorEvent\": \"true\",\r\n\t\"sendPerformanceMetrics\": \"true\",\r\n\t\"sendLifecycleEvent\": \"true\"\r\n}" - }, - "schema" : { - "$ref" : "#/definitions/Destination" - } - }, - "401" : { - "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have \"Manage Destination Administration\" functional privilege to access this API." - }, - "400" : { - "description" : "This status code indicates that the request body is invalid.", - "examples" : { - "application/json" : "{\r\n\"errorDetails\": \" Invalid property key found in request payload.\"\r\n}" - } - } - }, - "security" : [ { - "Basic" : [ ] - } ] - } - }, - "/configurations/cache" : { - "get" : { - "operationId" : "getCacheConfig", - "consumes" : [ "application/json" ], - "produces" : [ "application/json" ], - "parameters" : [ ], - "responses" : { - "200" : { - "description" : "This status code indicates that the cache configurations are successfully retrieved", - "schema" : { - "$ref" : "#/definitions/GatewayCacheConfig" - } - }, - "400" : { - "description" : "This status code indicates that the user generated an invalid request" - }, - "401" : { - "description" : "This status code indicates that the user passed invalid credentials" - } - }, - "security" : [ { - "Basic" : [ ] - } ] - }, - "put" : { - "operationId" : "updateCacheConfig", - "consumes" : [ "application/json" ], - "produces" : [ "application/json" ], - "parameters" : [ ], - "responses" : { - "200" : { - "description" : "This status code indicates that the cache configurations are updated successfully.", - "schema" : { - "$ref" : "#/definitions/GatewayCacheConfig" - } - }, - "400" : { - "description" : "This status code indicates that the cache configuratoins payload is incorrect." - }, - "401" : { - "description" : "This status code indicates that the user did not provide the correct credentials to update the cache configuration" - } - }, - "security" : [ { - "Basic" : [ ] - } ] - } - }, - "/configurations/customContentTypes" : { - "get" : { - "description" : "This REST method is used to get the configured custom content types in API Gateway. Custom content types can be defined for base types XML,JSON and Text.These Custom types can be then used for payload processing in policies like Content based routing,Identify and access and Conditional error processing", - "operationId" : "getCustomContentTypes", - "consumes" : [ "application/json" ], - "produces" : [ "application/json" ], - "parameters" : [ ], - "responses" : { - "200" : { - "description" : "This response returns all the configured custom content types in API Gateway. The response is a set of key/value pair where key indicates the custom content type and value indicates the base type. The value can be application/xml or application/json or text/xml", - "examples" : { - "application/json" : "{\r\n \"application/myorg+json\": \"application/json\",\r\n \"application/myorg+xml\" : \"application/xml\"\r\n}" - }, - "schema" : { - "$ref" : "#/definitions/CustomContentType" - } - }, - "401" : { - "description" : "This response indicates that invalid credentials have been provided for the request." - } - }, - "security" : [ { - "Basic" : [ ] - } ] - }, - "put" : { - "description" : "This REST method is used to update the custom content types for API Gateway.The response is a set of key/value pair where key indicates the custom content type and value indicates the base type. The value can be application/xml or application/json or text/xml", - "operationId" : "saveCustomContentTypes", - "consumes" : [ "application/json" ], - "produces" : [ "application/json" ], - "parameters" : [ { - "in" : "body", - "name" : "body", - "description" : "", - "required" : true, - "schema" : { - "$ref" : "#/definitions/CustomContentType" - }, - "x-examples" : { - "application/json" : "{\r\n \"application/myorg+json\": \"application/json\", \r\n \"application/myorg+xml\" : \"application/xml\"\r\n}" - } - } ], - "responses" : { - "200" : { - "description" : "This response returns all the configured custom content types in API Gateway. The response is a set of key/value pair where key indicates the custom content type and value indicates the base type. The value can be application/xml or application/json or text/xml", - "examples" : { - "application/json" : "{\r\n \"application/myorg+json\": \"application/json\", \r\n \"application/myorg+xml\" : \"application/xml\"\r\n}" - }, - "schema" : { - "$ref" : "#/definitions/CustomContentType" - } - }, - "400" : { - "description" : "This status code indicates that the user did not provide proper values for the base content type. The only allowed values are application/xml,application/json,text/xml" - }, - "401" : { - "description" : "This response indicates that invalid credentials have been provided for the request." - } - }, - "security" : [ { - "Basic" : [ ] - } ] - } - }, - "/configurations/logConfig" : { - "get" : { - "description" : "APIGateway has log files from different components.This method is used to retrieve the log settings of various components used by APIGateway.", - "operationId" : "getLogConfig", - "consumes" : [ "application/json" ], - "produces" : [ "application/json" ], - "parameters" : [ ], - "responses" : { - "200" : { - "description" : "This status code indicates that the external log configuration is retrieved successfully.", - "examples" : { - "application/json" : "{\"apigatewayLogger\": \"trace\",\"elasticSearchLogger\": \"info\",\"kibanaLogger\": \"verbose\",\"enableSessionLogger\": \"false\",\"enableSecurityLogger\": \"true\",\"sagOsgiLogger\": \"debug\",\"enableLogAggregation\": \"true\",\"logDestination\": \"INTERNAL\"}" - }, - "schema" : { - "$ref" : "#/definitions/LogConfiguration" - } - }, - "401" : { - "description" : "This status code indicates that the user is not a valid API Gateway user for retrieving the log configuration." - } - }, - "security" : [ { - "Basic" : [ ] - } ] - }, - "put" : { - "description" : "The method is used to update the details of the log configuration in API Gateway.", - "operationId" : "saveLogConfig", - "consumes" : [ "application/json" ], - "produces" : [ "application/json" ], - "parameters" : [ ], - "responses" : { - "200" : { - "description" : "This status code indicates that the log configuration has been successfully updated in API Gateway, and the updated configuration is available in the response body.", - "examples" : { - "application/json" : "{\"apigatewayLogger\": \"trace\",\"elasticSearchLogger\": \"info\",\"kibanaLogger\": \"verbose\",\"enableSessionLogger\": \"false\",\"enableSecurityLogger\": \"true\",\"sagOsgiLogger\": \"debug\",\"enableLogAggregation\": \"true\",\"logDestination\": \"INTERNAL\"}" - }, - "schema" : { - "$ref" : "#/definitions/LogConfiguration" - } - }, - "401" : { - "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have \"Administration\" functional privilege to access this API." - } - }, - "security" : [ { - "Basic" : [ ] - } ] - } - }, - "/configurations/ldapConfig" : { - "get" : { - "description" : "Retrieves the LDAP configuration settings configured in the API Gateway", - "operationId" : "getLdapConfig", - "consumes" : [ "application/json" ], - "produces" : [ "application/json" ], - "parameters" : [ ], - "responses" : { - "200" : { - "description" : "", - "examples" : { - "application/json" : "{\r\n \"ldapConfig\": {\r\n \"cacheSize\": \"10\",\r\n \"cacheTTL\": \"60\",\r\n \"provider\": \"LDAP\",\r\n \"ldapDirectoryList\": [\r\n {\r\n \"url\": \"ldap://abc.xyz.org:3128\",\r\n \"principal\": \"CN=alias, OU=User,DC=xyz,DC=org\",\r\n \"password\": \"abcde\",\r\n \"timeout\": \"5\",\r\n \"poolMin\": \"0\",\r\n \"poolMax\": \"10\",\r\n \"useaf\": false,\r\n \"dnPrefix\": null,\r\n \"dnSuffix\": null,\r\n \"uidProp\": \"uidAccountName\",\r\n \"userRootDn\": \"OU=User,DC=xyz,DC=org\",\r\n \"group\": \"Administrators\",\r\n \"memberAttribute\": \"member\",\r\n \"groupIdProperty\": \"gidAccountName\",\r\n \"groupRootDN\": \"OU=Groups,DC=xyz,DC=org\",\r\n \"index\": 0\r\n }\r\n ]\r\n }\r\n}" - }, - "schema" : { - "$ref" : "#/definitions/InputLdapConfiguration" - } - }, - "401" : { - "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." - } - }, - "security" : [ { - "Basic" : [ ] - } ] - }, - "put" : { - "description" : "Saves the LDAP configuration settings in the API Gateway", - "operationId" : "saveLdapConfig", - "consumes" : [ "application/json" ], - "produces" : [ "application/json" ], - "parameters" : [ { - "in" : "body", - "name" : "body", - "description" : "", - "required" : true, - "schema" : { - "$ref" : "#/definitions/InputLdapConfiguration" - }, - "x-examples" : { - "application/json" : "{\r\n \"ldapConfig\": {\r\n \"cacheSize\": \"10\",\r\n \"cacheTTL\": \"60\",\r\n \"provider\": \"LDAP\",\r\n \"ldapDirectoryList\": [\r\n {\r\n \"url\": \"ldap://abc.xyz.org:3128\",\r\n \"principal\": \"CN=alias, OU=User,DC=xyz,DC=org\",\r\n \"password\": \"abcde\",\r\n \"timeout\": \"5\",\r\n \"poolMin\": \"0\",\r\n \"poolMax\": \"10\",\r\n \"useaf\": false,\r\n \"dnPrefix\": null,\r\n \"dnSuffix\": null,\r\n \"uidProp\": \"uidAccountName\",\r\n \"userRootDn\": \"OU=User,DC=xyz,DC=org\",\r\n \"group\": \"Administrators\",\r\n \"memberAttribute\": \"member\",\r\n \"groupIdProperty\": \"gidAccountName\",\r\n \"groupRootDN\": \"OU=Groups,DC=xyz,DC=org\",\r\n \"index\": 0\r\n }\r\n ]\r\n }\r\n}" - } - } ], - "responses" : { - "200" : { - "description" : "", - "examples" : { - "application/json" : "{\r\n \"ldapConfig\": {\r\n \"cacheSize\": \"10\",\r\n \"cacheTTL\": \"60\",\r\n \"provider\": \"LDAP\",\r\n \"ldapDirectoryList\": [\r\n {\r\n \"url\": \"ldap://abc.xyz.org:3128\",\r\n \"principal\": \"CN=alias, OU=User,DC=xyz,DC=org\",\r\n \"password\": \"abcde\",\r\n \"timeout\": \"5\",\r\n \"poolMin\": \"0\",\r\n \"poolMax\": \"10\",\r\n \"useaf\": false,\r\n \"dnPrefix\": null,\r\n \"dnSuffix\": null,\r\n \"uidProp\": \"uidAccountName\",\r\n \"userRootDn\": \"OU=User,DC=xyz,DC=org\",\r\n \"group\": \"Administrators\",\r\n \"memberAttribute\": \"member\",\r\n \"groupIdProperty\": \"gidAccountName\",\r\n \"groupRootDN\": \"OU=Groups,DC=xyz,DC=org\",\r\n \"index\": 0\r\n }\r\n ]\r\n }\r\n}" - }, - "schema" : { - "$ref" : "#/definitions/InputLdapConfiguration" - } - }, - "401" : { - "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." - } - }, - "security" : [ { - "Basic" : [ ] - } ] - } - }, - "/configurations/passwordRestrictions" : { - "get" : { - "description" : "Retrieves the password restrictions settings configured in API Gateway", - "operationId" : "getPasswordRestrictions", - "consumes" : [ "application/json" ], - "produces" : [ "application/json" ], - "parameters" : [ ], - "responses" : { - "200" : { - "description" : "", - "examples" : { - "application/json" : "{\r\n \"mode\": \"lax\",\r\n \"minLowerChars\": \"10\",\r\n \"minDigits\": \"10\",\r\n \"minLength\": \"10\",\r\n \"enablePasswordChange\": \"true\",\r\n \"historyLength\": \"3\",\r\n \"maxIdenticalCharsInARow\": \"10\",\r\n \"minSpecialChars\": \"10\",\r\n \"minUpperChars\": \"10\",\r\n \"maxLength\": \"20\"\r\n}" - }, - "schema" : { - "$ref" : "#/definitions/PasswordRestrictions" - } - }, - "401" : { - "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." - } - }, - "security" : [ { - "Basic" : [ ] - } ] - }, - "put" : { - "description" : "Saves the password restrictions settings in API Gateway", - "operationId" : "savePasswordRestrictions", - "consumes" : [ "application/json" ], - "produces" : [ "application/json" ], - "parameters" : [ { - "in" : "body", - "name" : "body", - "description" : "", - "required" : true, - "schema" : { - "$ref" : "#/definitions/PasswordRestrictions" - }, - "x-examples" : { - "application/json" : "{\r\n \"mode\": \"lax\",\r\n \"minLowerChars\": \"10\",\r\n \"minDigits\": \"10\",\r\n \"minLength\": \"10\",\r\n \"enablePasswordChange\": \"true\",\r\n \"historyLength\": \"3\",\r\n \"maxIdenticalCharsInARow\": \"10\",\r\n \"minSpecialChars\": \"10\",\r\n \"minUpperChars\": \"10\",\r\n \"maxLength\": \"20\"\r\n}" - } - } ], - "responses" : { - "200" : { - "description" : "", - "examples" : { - "application/json" : "{\r\n \"mode\": \"lax\",\r\n \"minLowerChars\": \"10\",\r\n \"minDigits\": \"10\",\r\n \"minLength\": \"10\",\r\n \"enablePasswordChange\": \"true\",\r\n \"historyLength\": \"3\",\r\n \"maxIdenticalCharsInARow\": \"10\",\r\n \"minSpecialChars\": \"10\",\r\n \"minUpperChars\": \"10\",\r\n \"maxLength\": \"20\"\r\n}" - }, - "schema" : { - "$ref" : "#/definitions/PasswordRestrictions" - } - }, - "401" : { - "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." - } - }, - "security" : [ { - "Basic" : [ ] - } ] - } - }, - "/configurations/passwordExpiry" : { - "get" : { - "description" : "Retrieves the password expiry settings configured in API Gateway", - "operationId" : "getPasswordExpirySettings", - "consumes" : [ "application/json" ], - "produces" : [ "application/json" ], - "parameters" : [ ], - "responses" : { - "200" : { - "description" : "", - "examples" : { - "application/json" : "{\r\n \"expirationInterval\": \"90\",\r\n \"emailIds\": \"fa@abc.xyz\\nfa1@abc.xyz\",\r\n \"applicableUsers\": \"user1;user2\",\r\n \"expiryEmailBefore\": \"3\",\r\n \"isEnabled\": \"true\",\r\n \"remainingUsers\": \"user3;user4\"\r\n}" - }, - "schema" : { - "$ref" : "#/definitions/PasswordExpirySettings" - } - }, - "401" : { - "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." - } - }, - "security" : [ { - "Basic" : [ ] - } ] - }, - "put" : { - "description" : "Saves the password expiry settings in API Gateway", - "operationId" : "savePasswordExpirySettings", - "consumes" : [ "application/json" ], - "produces" : [ "application/json" ], - "parameters" : [ { - "in" : "body", - "name" : "body", - "description" : "", - "required" : true, - "schema" : { - "$ref" : "#/definitions/PasswordExpirySettings" - }, - "x-examples" : { - "application/json" : "{\r\n \"expirationInterval\": \"90\",\r\n \"emailIds\": \"fa@abc.xyz\\nfa1@abc.xyz\",\r\n \"applicableUsers\": \"user1;user2\",\r\n \"expiryEmailBefore\": \"3\",\r\n \"isEnabled\": \"true\",\r\n \"remainingUsers\": \"user3;user4\"\r\n}" - } - } ], - "responses" : { - "200" : { - "description" : "", - "examples" : { - "application/json" : "{\r\n \"expirationInterval\": \"90\",\r\n \"emailIds\": \"fa@abc.xyz\\nfa1@abc.xyz\",\r\n \"applicableUsers\": \"user1;user2\",\r\n \"expiryEmailBefore\": \"3\",\r\n \"isEnabled\": \"true\",\r\n \"remainingUsers\": \"user3;user4\"\r\n}" - }, - "schema" : { - "$ref" : "#/definitions/PasswordExpirySettings" - } - }, - "401" : { - "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." - } - }, - "security" : [ { - "Basic" : [ ] - } ] - } - }, - "/configurations/accountLockSettings" : { - "get" : { - "description" : "Retrieves the account lock settings configured in API Gateway", - "operationId" : "getAccountLockSettings", - "consumes" : [ "application/json" ], - "produces" : [ "application/json" ], - "parameters" : [ ], - "responses" : { - "200" : { - "description" : "", - "examples" : { - "application/json" : "{\r\n \"blockDuration\": \"15\",\r\n \"isEnabled\": \"true\",\r\n \"timeIntervalUnit\": \"Minutes\",\r\n \"timeInterval\": \"100\",\r\n \"maximumLoginAttempts\": \"2\",\r\n \"blockDurationUnit\": \"Minutes\",\r\n \"appliesToUsers\": \"allUsersExceptPredefinedUsers\"\r\n}" - }, - "schema" : { - "$ref" : "#/definitions/AccountLockSettings" - } - }, - "401" : { - "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." - } - }, - "security" : [ { - "Basic" : [ ] - } ] - }, - "put" : { - "description" : "Saves the account lock settings in API Gateway", - "operationId" : "saveAccountLockSettings", - "consumes" : [ "application/json" ], - "produces" : [ "application/json" ], - "parameters" : [ { - "in" : "body", - "name" : "body", - "description" : "", - "required" : true, - "schema" : { - "$ref" : "#/definitions/AccountLockSettings" - }, - "x-examples" : { - "application/json" : "{\r\n \"blockDuration\": \"15\",\r\n \"isEnabled\": \"true\",\r\n \"timeIntervalUnit\": \"Minutes\",\r\n \"timeInterval\": \"100\",\r\n \"maximumLoginAttempts\": \"2\",\r\n \"blockDurationUnit\": \"Minutes\",\r\n \"appliesToUsers\": \"allUsersExceptPredefinedUsers\"\r\n}" - } - } ], - "responses" : { - "200" : { - "description" : "", - "examples" : { - "application/json" : "{\r\n \"blockDuration\": \"15\",\r\n \"isEnabled\": \"true\",\r\n \"timeIntervalUnit\": \"Minutes\",\r\n \"timeInterval\": \"100\",\r\n \"maximumLoginAttempts\": \"2\",\r\n \"blockDurationUnit\": \"Minutes\",\r\n \"appliesToUsers\": \"allUsersExceptPredefinedUsers\"\r\n}" - }, - "schema" : { - "$ref" : "#/definitions/AccountLockSettings" - } - }, - "401" : { - "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." - } - }, - "security" : [ { - "Basic" : [ ] - } ] - } - }, - "/apitransactions" : { - "get" : { - "description" : "The GET method is used to download the api transactions data and data to be downloaded is filtered based on the input parameters. The user should be part of API-Gateway-Administrators group or else should have 'Manage purge and restore runtime events' privilege to perform this operation.", - "operationId" : "downloadAPITransaction", - "consumes" : [ "application/json" ], - "produces" : [ "application/zip" ], - "parameters" : [ { - "name" : "duration", - "in" : "query", - "description" : "All the api transactions that are older than the value specified will be downloaded. Ex: duration='2d'. Possible values are d(days),M(months),y(years), lets say a. 2d means 2days b. 1M means 1 month c. 1y means 1 year. Either one of (startDate&endDate) or duration is a mandatory parameter", - "required" : false, - "type" : "string", - "x-example" : "duration=2d" - }, { - "name" : "startDate", - "in" : "query", - "description" : "This is a date parameter. All the specified api transactions which satiesfies the startDate and endDate criteria will be downloaded. Example value: startDate=2017-12-18 00:00:00 and endDate=2017-12-19 00:00:00. Either one of (startDate and endDate) or duration is a mandatory parameter", - "required" : true, - "type" : "string", - "x-example" : "startDate=2017-10-10 00:00:00" - }, { - "name" : "endDate", - "in" : "query", - "description" : "This is a date parameter. All the specified api transactions which satiesfies the startDate and endDate criteria will be downloaded. Example value: startDate=2017-12-18 00:00:00 and endDate=2017-12-19 00:00:00. Either one of (startDate and endDate) or duration is a mandatory parameter", - "required" : true, - "type" : "string", - "x-example" : "endtDate=2017-10-10 00:00:00" - }, { - "name" : "eventType", - "in" : "query", - "description" : "This parameter is used to specify the event type that needs to be downloaded. specify any specific type to download that particular event type alone. Ex: eventType=transactionalEvents. The available event types are as follows 1.transactionalEvents 2.monitorEvents 3.errorEvents 4.performanceMetrics 5.threatProtectionEvents 6.lifecycleEvents 7.policyViolationEvents 8.auditLogs 9.applicationlogs", - "required" : true, - "type" : "string", - "x-example" : "eventType=policyViolationEvents" - } ], - "responses" : { - "200" : { - "description" : "This response indicates that the api transactions zip file has been downloaded successfully.", - "examples" : { - "application/zip" : "attachment; filename=\"auditlogs.zip\"" - } - }, - "401" : { - "description" : "This response indicates that invalid credentials have been provided for the request." - }, - "400" : { - "description" : "This status code indicates that the request URL is not valid." - }, - "500" : { - "description" : "This response indicates that the server has encountered an error while downloading the api transactions. " - } - }, - "security" : [ { - "Basic" : [ ] - } ] - }, - "delete" : { - "description" : "The DELETE method is used to purge the api transactions data and data to be purged is filtered based on the input parameters. This method returns the job id as response and the job id is used to track the job status. See /apitransactions/jobs/{jobId} for more details. The user should be part of API-Gateway-Administrators group or else should have 'Manage purge and restore runtime events' privilege to perform this operation.", - "operationId" : "purgeAPITransactions", - "consumes" : [ "application/json" ], - "produces" : [ "application/json" ], - "parameters" : [ { - "name" : "action", - "in" : "query", - "description" : "This is an optional query parameter. Sometimes its better to take backup before purging the data . If you specify the action value as \"archiveAndPurge\", API Gateway will perform an archive before purging the data.", - "required" : false, - "type" : "string", - "x-example" : "action=archiveAndPurge" - }, { - "name" : "until", - "in" : "query", - "description" : "This is a date parameter. All the specified api transactions until the given date will be purged. Example value: until=2017-12-18 00:00:00. Either one of until or duration is a mandatory parameter", - "required" : true, - "type" : "string", - "x-example" : "until=2017-10-10 00:00:00" - }, { - "name" : "olderThan", - "in" : "query", - "description" : "All the api transactions that are older than the value specified will be purged. Ex: olderThan='2d'. Possible values are d(days),M(months),y(years), lets say a. 2d means 2days b. 1M means 1 month c. 1y means 1 year", - "required" : false, - "type" : "string", - "x-example" : "olderThan=2d" - }, { - "name" : "eventType", - "in" : "query", - "description" : "This parameter is used to specify the event type that needs to be purged. Specify eventType=ALL to purge all the events and specify any specific type to purge that particular event type alone. Ex: eventType=transactionalEvents. The available event types are as follows 1.transactionalEvents 2.monitorEvents 3.errorEvents 4.performanceMetrics 5.threatProtectionEvents 6.lifecycleEvents 7.policyViolationEvents 8.auditLogs 9.applicationlogs", - "required" : true, - "type" : "string", - "x-example" : "eventType=ALL" - } ], - "responses" : { - "202" : { - "description" : "This response indicates that the purge process has been started and returned the jobId to track it further.", - "examples" : { - "application/json" : "{\r\n \"jobId\": \"1504177213671\"\r\n}" - } - }, - "401" : { - "description" : "This response indicates that invalid credentials have been provided for the request." - }, - "400" : { - "description" : "This status code indicates that the request URL is not valid." - }, - "500" : { - "description" : "This response indicates that the server has encountered an error while purging the api transactions. " - } - }, - "security" : [ { - "Basic" : [ ] - } ] - } - }, - "/licenseNotifications" : { - "get" : { - "description" : "The GET method returns the latest notification issued for a transaction based license.", - "operationId" : "getCurrentMonthLatestNotification", - "consumes" : [ "application/json" ], - "produces" : [ "application/json" ], - "parameters" : [ ], - "responses" : { - "200" : { - "description" : "This response indicates that the recent transaction based license alert notification has been returned successfully. The response body is the latest transaction based license alert notification.", - "examples" : { - "application/json" : "{\r\n \"notification\": {\r\n \"user\": \"admin\",\r\n \"notificationType\": \"UI-notification\",\r\n \"currentUsagePercent\": \"265\",\r\n \"currentUsage\": \"53/20\",\r\n \"creationDate\": \"1502098979628\",\r\n \"notification\": \"Current month allocated quota has been reached\",\r\n \"notifyAt\": 100,\r\n \"monthAndYear\": \"8/2017\"\r\n },\r\n \"result\": \"success\"\r\n}" - } - }, - "401" : { - "description" : "This response indicates that invalid credentials have been provided for the request." - }, - "500" : { - "description" : "This response indicates that the server has encountered an error while fetching the latest transaction based license alert notification" - } - }, - "security" : [ { - "Basic" : [ ] - } ] - } - }, - "/is/jmsTriggers" : { - "get" : { - "description" : "The method retrieves list of all JMS triggers in API Gateway.", - "operationId" : "getAllJMSTriggers", - "consumes" : [ "application/json" ], - "produces" : [ "application/json" ], - "parameters" : [ ], - "responses" : { - "200" : { - "description" : "This status code indicates that the list of JMS triggers is successfully retrieved.", - "examples" : { - "application/json" : "{\r\n \"jmsTriggerList\": [\r\n {\r\n \"id\": \"wm.namespace.ws:wseTrigger_AMQP_PROVIDER_ALIAS\",\r\n \"triggerName\": \"wm.namespace.ws:wseTrigger_AMQP_PROVIDER_ALIAS\",\r\n \"aliasName\": \"DEFAULT_IS_JMS_CONNECTION\",\r\n \"destinationName\": \"wseQueue_AMQP_PROVIDER_ALIAS\",\r\n \"enabled\": \"false\",\r\n \"isConcurrent\": \"false\",\r\n \"maxExecutionThreads\": \"1\",\r\n \"connectionCount\": \"1\",\r\n \"currentThreads\": \"-1\",\r\n \"state\": \"Disabled\",\r\n \"destinationType\": \"Queue\",\r\n \"jmsMessageSelector\": \"N/A\",\r\n \"durableSubscribeName\": \"N/A\",\r\n \"ignoreLocalPublished\": \"N/A\",\r\n \"status\": \"Not Running (trigger disabled)\"\r\n }\r\n ]\r\n}" - } - }, - "401" : { - "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." - }, - "404" : { - "description" : "" - } - }, - "security" : [ { - "Basic" : [ ] - } ] - }, - "put" : { - "description" : "This REST service is used to update the JMS trigger", - "operationId" : "updateJMSTrigger", - "consumes" : [ "application/json" ], - "produces" : [ "application/json" ], - "parameters" : [ { - "in" : "body", - "name" : "body", - "description" : "", - "required" : true, - "schema" : { - "$ref" : "#/definitions/JMSTrigger" - }, - "x-examples" : { - "application/json" : "\"jmsTrigger\": {\r\n \"id\": \"wm.namespace.ws:wseTrigger_AMQP_PROVIDER_ALIAS\",\r\n \"triggerName\": \"wm.namespace.ws:wseTrigger_AMQP_PROVIDER_ALIAS\",\r\n \"aliasName\": \"DEFAULT_IS_JMS_CONNECTION\",\r\n \"destinationName\": \"wseQueue_AMQP_PROVIDER_ALIAS\",\r\n \"enabled\": \"false\",\r\n \"isConcurrent\": \"false\",\r\n \"maxExecutionThreads\": \"1\",\r\n \"connectionCount\": \"1\",\r\n \"currentThreads\": \"-1\",\r\n \"state\": \"Disabled\",\r\n \"destinationType\": \"Queue\",\r\n \"jmsMessageSelector\": \"N/A\",\r\n \"durableSubscribeName\": \"N/A\",\r\n \"ignoreLocalPublished\": \"N/A\",\r\n \"status\": \"Not Running (trigger disabled)\"\r\n }" - } - } ], - "responses" : { - "200" : { - "description" : "This status code indicates that API Gateway has successfully updated the specified JMS trigger and the updated JMS trigger details can be found in the response body", - "examples" : { - "application/json" : "{\r\n \"jmsTrigger\": {\r\n \"id\": \"wm.namespace.ws:wseTrigger_AMQP_PROVIDER_ALIAS\",\r\n \"triggerName\": \"wm.namespace.ws:wseTrigger_AMQP_PROVIDER_ALIAS\",\r\n \"aliasName\": \"DEFAULT_IS_JMS_CONNECTION\",\r\n \"destinationName\": \"wseQueue_AMQP_PROVIDER_ALIAS\",\r\n \"enabled\": \"false\",\r\n \"isConcurrent\": \"false\",\r\n \"maxExecutionThreads\": \"1\",\r\n \"connectionCount\": \"1\",\r\n \"currentThreads\": \"-1\",\r\n \"state\": \"Disabled\",\r\n \"destinationType\": \"Queue\",\r\n \"jmsMessageSelector\": \"N/A\",\r\n \"durableSubscribeName\": \"N/A\",\r\n \"ignoreLocalPublished\": \"N/A\",\r\n \"status\": \"Not Running (trigger disabled)\"\r\n }\r\n}" - }, - "schema" : { - "$ref" : "#/definitions/JMSTrigger" - } - }, - "401" : { - "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." - }, - "400" : { - "description" : "Tis status code indicates the request payload is not correct and corresponding error details can be seen in the response body", - "examples" : { - "application/json" : "" - } - } - }, - "security" : [ { - "Basic" : [ ] - } ] - } - }, - "/is/jmsTriggers/{jmsTriggerId}/enable" : { - "put" : { - "description" : "The method enables the specified JMS trigger in API Gateway.", - "operationId" : "enableJMSTrigger", - "consumes" : [ "application/json" ], - "produces" : [ "application/json" ], - "parameters" : [ { - "name" : "jmsTriggerId", - "in" : "path", - "description" : "This path parameter is used to specify the JMS trigger id which JMS trigger needs to be enabled.", - "required" : true, - "type" : "string", - "x-example" : "sampleJMSConn" - } ], - "responses" : { - "200" : { - "description" : "This status code indicates that the specified JMS trigger is successfully enabled.", - "examples" : { - "application/json" : "{\r\n \"status\": \"JMS Trigger(s) enabled.\",\r\n \"result\": true\r\n}" - } - }, - "401" : { - "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." - }, - "500" : { - "description" : "" - } - }, - "security" : [ { - "Basic" : [ ] - } ] - } - }, - "/is/jmsTriggers/{jmsTriggerId}/disable" : { - "put" : { - "description" : "The method disables the specified JMS trigger in API Gateway.", - "operationId" : "disableJMSTrigger", - "consumes" : [ "application/json" ], - "produces" : [ "application/json" ], - "parameters" : [ { - "name" : "jmsTriggerId", - "in" : "path", - "description" : "This path parameter is used to specify the JMS trigger id which JMS trigger needs to be disabled.", - "required" : true, - "type" : "string", - "x-example" : "sampleJMSConn" - } ], - "responses" : { - "200" : { - "description" : "This status code indicates that the specified JMS trigger is successfully disabled.", - "examples" : { - "application/json" : "{\r\n \"status\": \"JMS Trigger(s) disabled.\",\r\n \"result\": true\r\n}" - } - }, - "401" : { - "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." - }, - "500" : { - "description" : "" - } - }, - "security" : [ { - "Basic" : [ ] - } ] - } - }, - "/is/jmsTriggers/{jmsTriggerId}" : { - "get" : { - "description" : "The method retrieves the specified JMS trigger in API Gateway.", - "operationId" : "getJMSTrigger", - "consumes" : [ "application/json" ], - "produces" : [ "application/json" ], - "parameters" : [ { - "name" : "jmsTriggerId", - "in" : "path", - "description" : "This path parameter is used to specify the JMS trigger id which JMS trigger needs to be retrieved.", - "required" : true, - "type" : "string", - "x-example" : "sampleJmsTrigger" - } ], - "responses" : { - "200" : { - "description" : "This status code indicates that the specified JMS trigger is successfully retrieved.", - "examples" : { - "application/json" : "{\r\n \"jmsTrigger\": {\r\n \"id\": \"wm.namespace.ws:wseTrigger_AMQP_PROVIDER_ALIAS\",\r\n \"triggerName\": \"wm.namespace.ws:wseTrigger_AMQP_PROVIDER_ALIAS\",\r\n \"aliasName\": \"DEFAULT_IS_JMS_CONNECTION\",\r\n \"destinationName\": \"wseQueue_AMQP_PROVIDER_ALIAS\",\r\n \"enabled\": \"false\",\r\n \"isConcurrent\": \"false\",\r\n \"maxExecutionThreads\": \"1\",\r\n \"connectionCount\": \"1\",\r\n \"currentThreads\": \"-1\",\r\n \"state\": \"Disabled\",\r\n \"destinationType\": \"Queue\",\r\n \"jmsMessageSelector\": \"N/A\",\r\n \"durableSubscribeName\": \"N/A\",\r\n \"ignoreLocalPublished\": \"N/A\",\r\n \"status\": \"Not Running (trigger disabled)\"\r\n }\r\n}" - }, - "schema" : { - "$ref" : "#/definitions/JMSTrigger" - } - }, - "401" : { - "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." - }, - "404" : { - "description" : "This status code indicates that the JMS trigger id specified is not found in API Gateway", - "examples" : { - "application/json" : "{\r\n \"errorDetails\": \" Exception occured : The JMS trigger object with the given ID: JMSTrigger11 couldn't found\"\r\n}" - } - } - }, - "security" : [ { - "Basic" : [ ] - } ] - } - }, - "/portalGateways/{portalGatewayId}" : { - "get" : { - "description" : "This API allows you to retrieve an API Portal configuration in API Gateway.", - "operationId" : "getAPIPortalConfiguration", - "produces" : [ "application/json" ], - "parameters" : [ { - "name" : "portalGatewayId", - "in" : "path", - "description" : "Id of the API Portal configuration for retrieval", - "required" : true, - "type" : "string", - "x-example" : "353bd366-47d4-4703-aecf-9cb40cdcc864" - } ], - "responses" : { - "200" : { - "description" : "This status code indicates that the API Portal configuration is retrieved successfully.", - "examples" : { - "application/json" : "{\r\n\t\"portalGatewayResponse\": {\r\n\t\t\"id\": \"c7059719-e434-4b45-9b09-b5176fa8b787\",\r\n\t\t\"gatewayName\": \"mygateway\",\r\n\t\t\"gatewayUsername\": \"adminUser\",\r\n\t\t\"gatewayPassword\": \"*****\",\r\n\t\t\"gatewayURL\": \"http://apigateway_host:5555\",\r\n\t\t\"refId\": \"2609fc40-87d2-11e7-1298-d481d790920c\",\r\n\t\t\"externalPortal\": {\r\n\t\t\t\"type\": \"apiportal\",\r\n\t\t\t\"endpointTenant\": \"default\",\r\n\t\t\t\"endpointURL\": \"http://apiportal_host/\",\r\n\t\t\t\"endpointUsername\": \"adminUser\",\r\n\t\t\t\"endpointPassword\": \"*****\"\r\n\t\t},\r\n\t\t\"version\": \"1.0\",\r\n\t\t\"published\": true\r\n\t}\r\n}" - }, - "schema" : { - "$ref" : "#/definitions/PortalGateway" - } - }, - "404" : { - "description" : "This status code indicates that the API Portal configuration is not available." - }, - "401" : { - "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." - } - }, - "security" : [ { - "Basic" : [ ] - } ] - }, - "put" : { - "description" : "This API allows you to update API Portal configuration information in API Gateway.", - "operationId" : "updateAPIPortalConfiguration", - "consumes" : [ "application/json" ], - "produces" : [ "application/json" ], - "parameters" : [ { - "name" : "portalGatewayId", - "in" : "path", - "description" : "Id of the API Portal configuration for update", - "required" : true, - "type" : "string", - "x-example" : "353bd366-47d4-4703-aecf-9cb40cdcc864" - }, { - "in" : "body", - "name" : "body", - "description" : "API Portal configuration payload", - "required" : true, - "schema" : { - "$ref" : "#/definitions/PortalGateway" - }, - "x-examples" : { - "application/json" : "{\r\n\t\"externalPortal\": {\r\n\t\t\"type\": \"apiportal\",\r\n\t\t\"endpointURL\": \"http://apiportal_host:18101\",\r\n\t\t\"endpointTenant\": \"default\",\r\n\t\t\"endpointUsername\": \"providerUser\",\r\n\t\t\"endpointPassword\": \"providerPassword\"\r\n\t},\r\n\t\"gatewayName\": \"MyPortalConfiguration\",\r\n\t\"version\": \"1.0\",\r\n\t\"gatewayURL\": \"http://apigateway_host:5555\",\r\n\t\"gatewayUsername\": \"adminUser\",\r\n\t\"gatewayPassword\": \"adminPassword\"\r\n}" - } - } ], - "responses" : { - "200" : { - "description" : "This status code indicates that the API Portal configuration is updated successfully.", - "examples" : { - "application/json" : "{\r\n\t\"portalGatewayResponse\": [{\r\n\t\t\"id\": \"c7059719-e434-4b45-9b09-b5176fa8b787\",\r\n\t\t\"gatewayName\": \"myportal\",\r\n\t\t\"gatewayUsername\": \"adminUser\",\r\n\t\t\"gatewayPassword\": \"*****\",\r\n\t\t\"gatewayURL\": \"http://apigateway_host:5555\",\r\n\t\t\"refId\": \"2609fc40-87d2-11e7-1298-d481d790920c\",\r\n\t\t\"externalPortal\": {\r\n\t\t\t\"type\": \"apiportal\",\r\n\t\t\t\"endpointTenant\": \"default\",\r\n\t\t\t\"endpointURL\": \"http://apiportal_host/\",\r\n\t\t\t\"endpointUsername\": \"adminUser\",\r\n\t\t\t\"endpointPassword\": \"*****\"\r\n\t\t},\r\n\t\t\"version\": \"1.0\",\r\n\t\t\"published\": true\r\n\t}]\r\n}" - }, - "schema" : { - "$ref" : "#/definitions/PortalGateway" - } - }, - "400" : { - "description" : "This status code indicates that the user has missed some mandatory field that is required to update the API Portal configuration." - }, - "404" : { - "description" : "This status code indicates that the API Portal configuration is not available." - }, - "401" : { - "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." - }, - "500" : { - "description" : "This status code indicates that an error occurred while processing the information in API Gateway or while communicating with API Portal." - } - }, - "security" : [ { - "Basic" : [ ] - } ] - }, - "delete" : { - "description" : "This API allows you to delete an API Portal configuration in API Gateway.", - "operationId" : "deleteAPIPortalConfiguration", - "parameters" : [ { - "name" : "portalGatewayId", - "in" : "path", - "description" : "Id of the API Portal configuration for delete.", - "required" : true, - "type" : "string", - "x-example" : "353bd366-47d4-4703-aecf-9cb40cdcc864" - } ], - "responses" : { - "401" : { - "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." - }, - "204" : { - "description" : "This status code indicates that the API Portal configuration is deleted successfully." - } - }, - "security" : [ { - "Basic" : [ ] - } ] - } - }, - "/portalGateways" : { - "get" : { - "description" : "This API allows you to retrieve API Portal configurations available in API Gateway.", - "operationId" : "getAllAPIPortalConfiguration", - "produces" : [ "application/json" ], - "parameters" : [ ], - "responses" : { - "200" : { - "description" : "This status code indicates that all the API Portal configurations are retrieved successfully.", - "examples" : { - "application/json" : "{\r\n\t\"portalGatewayResponse\": [{\r\n\t\t\t\"id\": \"c7059719-e434-4b45-9b09-b5176fa8b787\",\r\n\t\t\t\"gatewayName\": \"myportal\",\r\n\t\t\t\"gatewayUsername\": \"adminUser\",\r\n\t\t\t\"gatewayPassword\": \"*****\",\r\n\t\t\t\"gatewayURL\": \"http://apigateway_host:5555\",\r\n\t\t\t\"refId\": \"2609fc40-87d2-11e7-1298-d481d790920c\",\r\n\t\t\t\"externalPortal\": {\r\n\t\t\t\t\"type\": \"apiportal\",\r\n\t\t\t\t\"endpointTenant\": \"default\",\r\n\t\t\t\t\"endpointURL\": \"http://api_portal_host/\",\r\n\t\t\t\t\"endpointUsername\": \"adminUser\",\r\n\t\t\t\t\"endpointPassword\": \"*****\"\r\n\t\t\t},\r\n\t\t\t\"version\": \"1.0\",\r\n\t\t\t\"published\": true\r\n\t\t}\r\n\r\n\t]\r\n}" - }, - "schema" : { - "$ref" : "#/definitions/PortalGateway" - } - }, - "401" : { - "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." - } - }, - "security" : [ { - "Basic" : [ ] - } ] - }, - "post" : { - "description" : "This method allows you to create the API Portal configuration in API Gateway.", - "operationId" : "createAPIPortalConfiguration", - "consumes" : [ "application/json" ], - "produces" : [ "application/json" ], - "parameters" : [ { - "in" : "body", - "name" : "body", - "description" : "API Portal configuration payload", - "required" : true, - "schema" : { - "$ref" : "#/definitions/PortalGateway" - }, - "x-examples" : { - "application/json" : "{\r\n\t\"externalPortal\": {\r\n\t\t\"type\": \"apiportal\",\r\n\t\t\"endpointURL\": \"http://apiportal_host:18101\",\r\n\t\t\"endpointTenant\": \"default\",\r\n\t\t\"endpointUsername\": \"providerUser\",\r\n\t\t\"endpointPassword\": \"providerPassword\"\r\n\t},\r\n\t\"gatewayName\": \"MyPortalConfiguration\",\r\n\t\"version\": \"1.0\",\r\n\t\"gatewayURL\": \"http://apigateway_host:5555\",\r\n\t\"gatewayUsername\": \"adminUser\",\r\n\t\"gatewayPassword\": \"adminPassword\"\r\n}" - } - } ], - "responses" : { - "201" : { - "description" : "This status code indicates that the API Portal configuration is created successfully.", - "examples" : { - "application/json" : "{\r\n\t\"portalGatewayResponse\": [{\r\n\t\t\"id\": \"c7059719-e434-4b45-9b09-b5176fa8b787\",\r\n\t\t\"gatewayName\": \"myportal\",\r\n\t\t\"gatewayUsername\": \"adminUser\",\r\n\t\t\"gatewayPassword\": \"*****\",\r\n\t\t\"gatewayURL\": \"http://apigateway_host:5555\",\r\n\t\t\"refId\": \"2609fc40-87d2-11e7-1298-d481d790920c\",\r\n\t\t\"externalPortal\": {\r\n\t\t\t\"type\": \"apiportal\",\r\n\t\t\t\"endpointTenant\": \"default\",\r\n\t\t\t\"endpointURL\": \"http://apiportal_host/\",\r\n\t\t\t\"endpointUsername\": \"adminUser\",\r\n\t\t\t\"endpointPassword\": \"*****\"\r\n\t\t},\r\n\t\t\"version\": \"1.0\",\r\n\t\t\"published\": true\r\n\t}]\r\n}" - }, - "schema" : { - "$ref" : "#/definitions/PortalGateway" - } - }, - "400" : { - "description" : "This status code indicates that the user has missed some mandatory field that is required to create the API Portal configuration." - }, - "401" : { - "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." - }, - "500" : { - "description" : "This status code indicates that an error occurred while processing the information in API Gateway or while communicating with API Portal." - } - }, - "security" : [ { - "Basic" : [ ] - } ] - } - }, - "/portalGateways/communities" : { - "get" : { - "description" : "This API allows you to retrieve the details about communities in API Portal. An API can be published from API Gateway to any of the communities available in API Portal", - "operationId" : "getAPIPortalMetadata", - "produces" : [ "application/json" ], - "parameters" : [ { - "name" : "portalGatewayId", - "in" : "query", - "description" : "Id of the API Portal configuration for retrieval of the community information", - "required" : true, - "type" : "string", - "x-example" : "353bd366-47d4-4703-aecf-9cb40cdcc864" - }, { - "name" : "apiId", - "in" : "query", - "description" : "Id of the API published from API Gateway to API Portal", - "required" : true, - "type" : "string", - "x-example" : "353bd366-47d4-4703-aecf-9cb40cdcc864" - } ], - "responses" : { - "200" : { - "description" : "This status code indicates that the the community information from the API Portal is retrieved successfully.", - "examples" : { - "application/json" : "{\r\n\t\"portalGatewayResponse\": {\r\n\t\t\"provider\": \"mcprga02\",\r\n\t\t\"communities\": {\r\n\t\t\t\"portalCommunities\": [{\r\n\t\t\t\t\"id\": \"3bdf8005-5685-3ef5-b132-de4681963fb6\",\r\n\t\t\t\t\"name\": \"Public Community\",\r\n\t\t\t\t\"description\": \"Public Community\",\r\n\t\t\t\t\"status\": \"NEW\"\r\n\t\t\t}]\r\n\t\t}\r\n\t}\r\n}" - }, - "schema" : { - "$ref" : "#/definitions/PortalGatewayCommunitiesData" - } - }, - "401" : { - "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." - } - }, - "security" : [ { - "Basic" : [ ] - } ] - } - }, - "/portalGateways/packages" : { - "get" : { - "description" : "This API allows you to retrieve the details of the published packages that the API is part of", - "operationId" : "getPublishedPackages", - "produces" : [ "application/json" ], - "parameters" : [ { - "name" : "portalGatewayId", - "in" : "query", - "description" : "Id of the API Portal configuration for retrieval of published packages information", - "required" : true, - "type" : "string", - "x-example" : "353bd366-47d4-4703-aecf-9cb40cdcc864" - }, { - "name" : "apiId", - "in" : "query", - "description" : "Id of the API published from API Gateway to API Portal", - "required" : true, - "type" : "string", - "x-example" : "353bd366-47d4-4703-aecf-9cb40cdcc864" - } ], - "responses" : { - "200" : { - "description" : "", - "schema" : { - "type" : "array", - "uniqueItems" : true, - "items" : { - "type" : "object" - } - } - }, - "401" : { - "description" : "" - } - }, - "security" : [ { - "Basic" : [ ] - } ] - } - } - }, - "securityDefinitions" : { - "Basic" : { - "description" : "API Gateway Administrator and API Gateway provider", - "type" : "basic" - } - }, - "definitions" : { - "JMSConsumerAlias" : { - "allOf" : [ { - "$ref" : "#/definitions/WebserviceEndpointAlias" - }, { - "type" : "object", - "properties" : { - "executeACL" : { - "type" : "string", - "description" : "This property specifies the team name" - }, - "jmsAliasType" : { - "type" : "string", - "description" : "This property specifies the jmsAliasType. Either it could be JMS or JNDI " - }, - "jndiProvAlias" : { - "type" : "string", - "description" : "This property specifies the name of JNDI" - }, - "connFactoryName" : { - "type" : "string", - "description" : "This property specifies the connection factory name" - }, - "jmsConnAlias" : { - "type" : "string", - "description" : "This property specifies the name of JMS connection" - }, - "user" : { - "type" : "string", - "description" : "This property specifies the name of the user to create the JMS connection" - }, - "password" : { - "type" : "string", - "description" : "This property specifies the password to create the JMS connection" - } - } - } ] - }, - "JMSProviderAlias" : { - "allOf" : [ { - "$ref" : "#/definitions/WebserviceEndpointAlias" - }, { - "type" : "object", - "properties" : { - "jmsTriggerName" : { - "type" : "string", - "description" : "This property specifies the JMS Trigger name" - }, - "deliveryMode" : { - "type" : "string", - "description" : "This property specifies the deliveryMode" - }, - "timeToLive" : { - "type" : "integer", - "format" : "int64", - "description" : "This property specifies the timeToLive value" - }, - "priority" : { - "type" : "integer", - "format" : "int32", - "description" : "This property specifies priority value" - }, - "replyToDestName" : { - "type" : "string", - "description" : "This property specifies the replyToDestName name" - }, - "replyToDestType" : { - "type" : "string", - "description" : "This property specifies the replyToDestType type" - }, - "includeConnFactoryName" : { - "type" : "string", - "description" : "This property enables/disables the includeConnFactoryName parameter" - }, - "includeJNDIParams" : { - "type" : "string", - "description" : "This property enables/disables the includeJNDIParams parameter" - } - } - } ] - }, - "WebserviceEndpointAlias" : { - "type" : "object", - "discriminator" : "aliasType", - "properties" : { - "WebserviceEndpointAliasId" : { - "type" : "string", - "description" : "A unique ID for the WebserviceEndpointAlias", - "readOnly" : true - }, - "alias" : { - "type" : "string", - "description" : "The name of the WebserviceEndpointAlias" - }, - "description" : { - "type" : "string", - "description" : "The description of the WebserviceEndpointAlias" - }, - "aliasType" : { - "type" : "string", - "description" : "The property specifies the aliasType, Either it should be Provider or Consumer" - }, - "transportType" : { - "type" : "string", - "description" : "this defines the transport type. The supported transport type is JMS" - }, - "keyStoreAlias" : { - "type" : "string", - "description" : "this property specifies the keystorealias name" - }, - "keyAlias" : { - "type" : "string", - "description" : "this property specifies the keyalias name" - }, - "trustStoreAlias" : { - "type" : "string", - "description" : "this property specifies the trustStoreAlias name" - }, - "timestampPrecisionInMillis" : { - "type" : "string", - "description" : "this property specifies the timestampPrecisionInMillis" - }, - "timestampTimeToLive" : { - "type" : "string", - "description" : "this property specifies the timestampTimeToLive value" - }, - "timestampMaximumSkew" : { - "type" : "string", - "description" : "this property specifies the timestampMaximumSkew value" - } - } - }, - "KerberosSettings" : { - "type" : "object", - "properties" : { - "kerberosRealm" : { - "type" : "string", - "description" : "The domain name of the Kerberos server. If kerberosRealm is set, it overrides the realm specified in the provided configuration file." - }, - "kerberosKDC" : { - "type" : "string", - "description" : "The host name of the machine on which the Key Distribution Center (KDC) resides. If kerberosKDC is set, it overrrides the default KDC specified in the provided configuration file." - }, - "kerberosConfigFileName" : { - "type" : "string", - "description" : "The name of the Kerberos configuration file to be stored and maintained in API Gateway." - }, - "kerberosConfigContents" : { - "type" : "string", - "description" : "The contents of the Kerberos configuration file conforming to the specification. If you do not want the default KDC and realm values from this configuration file to be overridden, then do not set values for the kerberosRealm and kerberosKDC properties. It contains the Kerberos configuration information, including the Kerberos realm, locations of KDCs, defaults for the current realm and for Kerberos applications, and the host names, Kerberos realms mappings and encryption algorithms. The full specification details of the Kerberos configuration file can be found in https://linux.die.net/man/5/krb5.conf." - }, - "useSubjectCreds" : { - "type" : "string", - "description" : "Indicates whether the Kerberos v5 Generic Security Services (GSS) mechanism should be used to obtain credentials from an existing subject." - } - } - }, - "JMSConnectionAlias" : { - "type" : "object", - "properties" : { - "jmsConnectionAliasId" : { - "type" : "string", - "description" : "A unique ID for the jmsConnectionAlias", - "readOnly" : true - }, - "aliasName" : { - "type" : "string", - "description" : "The name of the JMSConnectionAlias configuration" - }, - "enabled" : { - "type" : "string", - "description" : "This property specifies the size of um_consumerIncludedStrings" - }, - "description" : { - "type" : "string", - "description" : "The description of the JMSConnectionAlias configuration" - }, - "transactionType" : { - "type" : "string", - "description" : "This property specifies the type of the transaction.Value 0 refers to NO-trans, 1 refers to Local-tran, 2 refers to XA-trans" - }, - "clientID" : { - "type" : "string", - "description" : "This property specifies the client id of the JMS connection" - }, - "user" : { - "type" : "string", - "description" : "This property specifies the user name to create the JMS connection" - }, - "password" : { - "type" : "string", - "description" : "This property specifies the password to create the JMS connection" - }, - "associationType" : { - "type" : "string", - "description" : "This property specifies whether the JMS connections has been created using JNDI or Native broker API. Value 0 refers to JNDI" - }, - "jndi_jndiAliasName" : { - "type" : "string", - "description" : "Name of the JNDI that the JMS connection refers to" - }, - "jndi_connectionFactoryLookupName" : { - "type" : "string", - "description" : "This property specifies the connection factory lookup name for the JMS connection" - }, - "jndi_automaticallyCreateUMAdminObjects" : { - "type" : "string", - "description" : "This property specifies whether to create UM admin objects automatically" - }, - "jndi_enableFollowTheMaster" : { - "type" : "string", - "description" : "This property is to enable the jndi_enableFollowTheMaster property" - }, - "jndi_connectionFactoryUpdateType" : { - "type" : "string", - "description" : "This property specifies the connection factory update type" - }, - "jndi_connectionFactoryPollingInterval" : { - "type" : "string", - "description" : "This property specifies the connection factory polling interval" - }, - "classLoader" : { - "type" : "string", - "description" : "This property specifies the classloader value" - }, - "csqSize" : { - "type" : "string", - "description" : "This property specifies the csq size. Default value -1." - }, - "csqDrainInOrder" : { - "type" : "string", - "description" : "This property is to enable/disable csqDrainInOrder" - }, - "optTempQueueCreate" : { - "type" : "string", - "description" : "This property is to opt temporary queue creation" - }, - "allowReplyToConsumer" : { - "type" : "string", - "description" : "This property is to enable/disable the allowReplyToConsumer" - }, - "manageDestinations" : { - "type" : "string", - "description" : "This property is to enable/disable the manageDestinations" - }, - "allowNewConnectionPerTrigger" : { - "type" : "string", - "description" : "This property is to enable/disable the allowNewConnectionPerTrigger" - }, - "producerCachingMode" : { - "type" : "string", - "description" : "This property is to enable/disable the producerCachingMode. 0 means disabled, 2 means Enable per destination" - }, - "producerSessionPoolMinSize" : { - "type" : "string", - "description" : "This property specifies the minimum size of producer session pool" - }, - "producerSessionPoolSize" : { - "type" : "string", - "description" : "This property specifies the max size of producer session pool" - }, - "cacheProducersPoolMinSize" : { - "type" : "string", - "description" : "This property specifies the minimum size of producer cache pool" - }, - "cacheProducersPoolSize" : { - "type" : "string", - "description" : "This property specifies the max size of producer cache pool" - }, - "poolTimeout" : { - "type" : "string", - "description" : "This property specifies the poolTimeout value" - }, - "cacheProducersQueueList" : { - "type" : "string", - "description" : "This property specifies the list of queues to cache" - }, - "cacheProducersTopicList" : { - "type" : "string", - "description" : "This property specifies the list of topics to cache" - }, - "producerMaxRetryAttempts" : { - "type" : "string", - "description" : "This property specifies the max retry attempts value for the producer" - }, - "producerRetryInterval" : { - "type" : "string", - "description" : "This property specifies the retry interval" - }, - "um_loggingOutput" : { - "type" : "string", - "description" : "This property specifies the logging output value. 0 refers to server log, 1 refers to audit logging" - }, - "um_producerMessageTracking" : { - "type" : "string", - "description" : "This property is to enable/disable the um_producerMessageTracking" - }, - "um_producerIncludedStrings" : { - "type" : "string", - "description" : "This property specifies the size of um_producerIncludedStrings" - } - }, - "description" : "This model contains JMS connection alias details" - }, - "APIGateway" : { - "type" : "object", - "properties" : { - "Policy Management - Threat Protection" : { - "type" : "string" - }, - "Policy Management - Gateway" : { - "type" : "string" - }, - "Application Management" : { - "type" : "string" - }, - "APIManagement" : { - "type" : "string" - } - } - }, - "IntegrationServer" : { - "type" : "object", - "properties" : { - "Product Code" : { - "type" : "string" - }, - "Product Version" : { - "type" : "string" - }, - "Concurrent Sessions" : { - "type" : "string" - }, - "Clustering" : { - "type" : "string" - }, - "Publish / Subscribe" : { - "type" : "string" - }, - "Adapter Runtime" : { - "type" : "string" - }, - "Remote Invoke" : { - "type" : "string" - }, - "Guaranteed Delivery" : { - "type" : "string" - }, - "Security Auditing" : { - "type" : "string" - }, - "Distributed Cache" : { - "type" : "string" - }, - "Enterprise Gateway" : { - "type" : "string" - } - } - }, - "LicenseDetail" : { - "type" : "object", - "properties" : { - "Sales Information" : { - "$ref" : "#/definitions/SalesInformation" - }, - "productInformation" : { - "$ref" : "#/definitions/ProductInformation" - }, - "integrationServer" : { - "$ref" : "#/definitions/IntegrationServer" - }, - "licenseInformation" : { - "$ref" : "#/definitions/LicenseInformation" - }, - "API Gateway" : { - "$ref" : "#/definitions/APIGateway" - } - } - }, - "LicenseInformation" : { - "type" : "object", - "properties" : { - "Price Unit" : { - "type" : "string" - }, - "Price Quantity" : { - "type" : "string" - }, - "TypeOfInstallation" : { - "type" : "string" - }, - "LicenseType" : { - "type" : "string" - }, - "ExtendedRights" : { - "type" : "string" - }, - "LicenseVersion" : { - "type" : "string" - }, - "Metering" : { - "type" : "string" - } - } - }, - "ProductInformation" : { - "type" : "object", - "properties" : { - "Expiration Date" : { - "type" : "string" - }, - "Operating System" : { - "type" : "string" - }, - "Product Code" : { - "type" : "string" - }, - "Product ID" : { - "type" : "string" - }, - "Product Name" : { - "type" : "string" - }, - "Product Version" : { - "type" : "string" - }, - "Usage" : { - "type" : "string" - }, - "RenewalDate" : { - "type" : "string" - }, - "HigherLevPosNr" : { - "type" : "string" - }, - "HigherLevProdCode" : { - "type" : "string" - }, - "HigherLevProdName" : { - "type" : "string" - } - } - }, - "SalesInformation" : { - "type" : "object", - "properties" : { - "Serial Number" : { - "type" : "string" - }, - "License Key" : { - "type" : "string" - }, - "Customer ID" : { - "type" : "string" - }, - "Customer Name" : { - "type" : "string" - }, - "ContractDetails" : { - "type" : "string" - }, - "ContractPosNumber" : { - "type" : "string" - }, - "License Type Details" : { - "type" : "string" - }, - "AutoCallHome" : { - "type" : "string" - } - } - }, - "ApprovalConfiguration" : { - "type" : "object", - "properties" : { - "id" : { - "type" : "string", - "description" : "Unique identifier of a Approval Configuration. Any of 'createApplication', 'updateApplication', 'registerApplication', 'subscribePackage' and 'changeOwner'" - }, - "eventType" : { - "type" : "string", - "description" : "Event Type: Any of 'createApplication', 'updateApplication', 'registerApplication', 'subscribePackage' and 'changeOwner'" - }, - "isEnabled" : { - "type" : "boolean", - "description" : "true/false. true value enforces approvals for the mentioned eventtype" - }, - "approversGroupId" : { - "type" : "string", - "description" : "Approvers Accessprofile Identifier. Whoever belongs to the selected team will be considered as Approvers" - }, - "approvalMode" : { - "type" : "string", - "description" : "Only possible value is anyone. This implies that, any one user associated with the approvers team can approve or reject the requests. The requester need not wait for the approval of each approver in the approvers group." - }, - "approvedEmailConfiguration" : { - "$ref" : "#/definitions/EmailConfiguration" - }, - "rejectedEmailConfiguration" : { - "$ref" : "#/definitions/EmailConfiguration" - }, - "initiateApprovalRequestEmailConfiguration" : { - "$ref" : "#/definitions/EmailConfiguration" - } - }, - "description" : "This model contains details about an ApprovalConfiguration in API Gateway" - }, - "EmailConfiguration" : { - "type" : "object", - "properties" : { - "emailSubject" : { - "type" : "string", - "description" : "Email Subject" - }, - "emailContent" : { - "type" : "string", - "description" : "Email Content" - }, - "enabled" : { - "type" : "boolean", - "description" : "true/false. Email would be sent to user only when enabled value is true." - }, - "requestType" : { - "type" : "string", - "description" : "Request Type. Value would be any of initiated, approved or rejected." - } - }, - "description" : "This model contains details about an EmailConfiguration configured in Approvals of API Gateway" - }, - "OutboundProxySettings" : { - "type" : "object", - "required" : [ "host", "port", "proxyAlias" ], - "properties" : { - "proxyAlias" : { - "type" : "string", - "description" : "The outbound proxy server alias name. It must be unique across all outbound proxy server aliases defined in API Gateway. Once a proxy server alias is defined with a given name, it cannot be modified further." - }, - "host" : { - "type" : "string", - "description" : "The host name or IP address of the proxy server." - }, - "port" : { - "type" : "string", - "description" : "The port number of the proxy server." - }, - "username" : { - "type" : "string", - "description" : "The user name required to authenticate against if authentication is enabled for the proxy server." - }, - "password" : { - "type" : "string", - "description" : "The password required to authenticate if authentication is enabled for the proxy server." - }, - "protocol" : { - "type" : "string", - "description" : "The protocol for which the proxy server is created.", - "enum" : [ "HTTP", "HTTPS", "SOCKS", "FTP" ] - }, - "isDefault" : { - "type" : "string", - "description" : "Indicates whether this proxy server alias is the default for the corresponding protocol. There can be only one default proxy server alias for a given protocol. Y denotes Yes and N denotes No.", - "enum" : [ "Y", "N" ] - }, - "status" : { - "type" : "string", - "description" : "Indicates whether the particular proxy server alias is enabled or disabled.", - "readOnly" : true, - "enum" : [ "Enabled", "Disabled" ] - }, - "ftpType" : { - "type" : "string", - "description" : "The type of the FTP proxy server. Applicable only if protocol value is FTP. Indicated by a number in the range 0 to 7. 0 - No proxy, 1 - ftp_user@ftp_host no proxy auth, 2 - ftp_user@ftp_host proxy auth, 3 - site command, 4 - open command, 5 - ftp_user@proxy_user@ftp_host, 6 - proxy_user@ftp_host, 7 - ftp_user@ftp_host proxy_user", - "enum" : [ "0", "1", "2", "3", "4", "5", "6", "7" ] - }, - "socksVersion" : { - "type" : "string", - "description" : "The SOCKS version of the proxy server. Applicable only if protocol value is SOCKS. A value of 4 indicates SOCKS protocol version 4 and a value of 5 indicates SOCKS protocol version 5. SOCKS protocol version 4 does not support authentication and hence username/password cannot be specified if socksVersion = 4.", - "enum" : [ "4", "5" ] - }, - "passwordHandle" : { - "type" : "string", - "description" : "The password handle which is used to store the password (if specified) in a secure manner in API Gateway.", - "readOnly" : true - }, - "entityId" : { - "type" : "string", - "description" : "The proxy server alias used to identify the entity in API Gateway.", - "readOnly" : true - } - } - }, - "OutboundProxyGetResponse" : { - "type" : "object", - "properties" : { - "proxyServerList" : { - "type" : "object", - "description" : "Contains a map of the available outbound proxy server aliases in API Gateway with the key denoting the alias name and the value representing the corresponding outbound proxy server alias configuration.", - "additionalProperties" : { - "$ref" : "#/definitions/OutboundProxySettings" - } - } - } - }, - "ProxyBypass" : { - "type" : "object", - "required" : [ "proxyBypassAddresses" ], - "properties" : { - "entityId" : { - "type" : "string", - "description" : "proxyBypass constance Fixed unique identifier value is proxyBypass" - }, - "proxyBypassAddresses" : { - "type" : "array", - "description" : "The host name or IP address of the server. In the Addresses field, type the fully qualified host and domain name of each server to which you want the Integration Server to issue requests directly. Type the host name and the domain name exactly as they appear in the URLs the server uses. To enter multiple names, separate each with commas.\nYou can use the asterisk (*) to identify several servers with similar names. The asterisk matches any number of characters. For example, if you want to bypass requests made to localhost, www.yahoo.com, home.microsoft.com, and all hosts whose names begin with NYC, you would type:\nlocalhost,www.yahoo.com,home.microsoft.com, NYC*.*", - "items" : { - "type" : "string" - } - } - } - }, - "MasterPasswordExpiryInterval" : { - "type" : "object", - "properties" : { - "expireInterval" : { - "type" : "string", - "description" : "This interval(in days) specifies the time after which the master password would expire" - } - }, - "description" : "The expiration interval is a recommended time between master password changes.The default expiration interval for a master password is 90 days.After the expiration date,API Gateway will continue to operate using the existing password indefinitely." - }, - "MasterPasswordExpiryIntervalResponse" : { - "type" : "object", - "properties" : { - "message" : { - "type" : "string", - "description" : "The response message from the server when the master password expiry interval is updated" - }, - "result" : { - "type" : "string", - "description" : "This is the updated master password expiry interval(in days)" - } - }, - "description" : "The schema of the response from the server when the expiry interval is updated" - }, - "MasterPasswordUpdate" : { - "type" : "object", - "properties" : { - "oldPassword" : { - "type" : "string", - "description" : "This is the base64 encoded value of the old master password" - }, - "newPassword" : { - "type" : "string", - "description" : "This is the base64 encoded value of the new master password" - } - }, - "description" : "Describes the properties required for updating the master password" - }, - "MasterPasswordUpdateResponse" : { - "type" : "object", - "properties" : { - "message" : { - "type" : "string", - "description" : "The response message from the server when the master password is updated" - } - } - }, - "MasterPasswordResetResponse" : { - "type" : "object", - "properties" : { - "message" : { - "type" : "string", - "description" : "The response message from the server when the master password is reset" - }, - "handleCount" : { - "type" : "string", - "description" : "The number of passwords that are updated during master password reset" - } - }, - "description" : "Describes the response when the master password is reset" - }, - "MasterPasswordProperties" : { - "type" : "object", - "properties" : { - "lastChangeDate" : { - "type" : "string", - "description" : "The latest date when the master password was updated.The format for this field would be YYYY-MM-DD HH:mm:ssZ" - }, - "expireDate" : { - "type" : "string", - "description" : "The expiry date of the master password.The format for this field would be YYYY-MM-DD HH:mm:ssZ" - }, - "expireInterval" : { - "type" : "string", - "description" : "The interval(in days) after which the master password would expire" - }, - "daysTilExpire" : { - "type" : "string", - "description" : "The remaining number of days for the master password expiration" - }, - "expireMessage" : { - "type" : "string", - "description" : "The message which will be returned once the master password is expired" - }, - "statusMessage" : { - "type" : "string", - "description" : "The current status of the master password" - } - }, - "description" : "Describes the master password configuration properties in API Gateway" - }, - "ChangeOwnerRequest" : { - "type" : "object", - "properties" : { - "assetType" : { - "type" : "string", - "description" : "APIGateway asset type.", - "readOnly" : true - }, - "assetIds" : { - "type" : "array", - "description" : "List of APIGateway assets for which change owner/team is requested.", - "readOnly" : true, - "items" : { - "type" : "string" - } - }, - "newOwner" : { - "type" : "string", - "description" : "New owner of the APIGateway asset.", - "readOnly" : true - }, - "currentOwner" : { - "type" : "string", - "description" : "Current owner of the APIGateway asset.", - "readOnly" : true - }, - "currentTeams" : { - "type" : "array", - "description" : "New teams of the APIGateway asset.", - "readOnly" : true, - "items" : { - "type" : "string" - } - }, - "newTeams" : { - "type" : "array", - "description" : "Current teams of the APIGateway asset.", - "readOnly" : true, - "items" : { - "type" : "string" - } - } - } - }, - "ChangeOwnerResponse" : { - "type" : "object", - "properties" : { - "message" : { - "type" : "string" - }, - "matchingAssets" : { - "type" : "object", - "additionalProperties" : { - "type" : "object" - } - }, - "status" : { - "type" : "string", - "enum" : [ "PENDING_APPROVAL", "OK" ] - } - } - }, - "JNDIProviderAlias" : { - "type" : "object", - "properties" : { - "jndiProviderAliasId" : { - "type" : "string", - "description" : "A unique ID for the jndiProviderAlias", - "readOnly" : true - }, - "jndiAliasName" : { - "type" : "string", - "description" : "The name of the JNDIProviderAlias configuration" - }, - "description" : { - "type" : "string", - "description" : "The description of the JNDIProviderAlias configuration" - }, - "initialContextFactory" : { - "type" : "string", - "description" : "The IntialContextFactoryName for JNDI lookup" - }, - "providerURL" : { - "type" : "string", - "description" : "Message broker details" - }, - "providerURLFailoverList" : { - "type" : "string", - "description" : "Fall backs URL's of providerURL" - }, - "securityPrincipal" : { - "type" : "string", - "description" : "SecurityPrincipal in case of SSL connection" - }, - "securityCredentials" : { - "type" : "string", - "description" : "securityCredentials in case of SSL connection" - }, - "otherProps" : { - "type" : "string", - "description" : "Any other properties you would like to mention, Provide the values as comma separated" - } - }, - "description" : "This model contains JNDI configuration details" - }, - "TrustStore" : { - "type" : "object", - "properties" : { - "id" : { - "type" : "string", - "description" : "The unique identifier for the truststore.", - "readOnly" : true - }, - "keyStoreName" : { - "type" : "string", - "description" : "The name of the truststore. It cannot contain spaces or special characters." - }, - "keyStoreDescription" : { - "type" : "string", - "description" : "The description for the truststore." - }, - "keyStoreType" : { - "type" : "string", - "description" : "The certificate file format of the truststore.", - "enum" : [ "JKS" ] - }, - "keyStoreProvider" : { - "type" : "string", - "description" : "The provider that is used for the truststore type.", - "enum" : [ "SUN" ] - }, - "keyStoreLocation" : { - "type" : "string", - "description" : "The location where the truststore is saved in API Gateway." - }, - "keyStorePassword" : { - "type" : "string", - "description" : "The truststore password that is defined at the time of truststore creation using a keystore utility." - }, - "uploadFileName" : { - "type" : "string", - "description" : "The name of the truststore file that will be used to save the truststore internally in API Gateway." - }, - "fileContent" : { - "type" : "string", - "description" : "The contents of the truststore file." - }, - "certificateAliases" : { - "type" : "array", - "description" : "The list of aliases that are available within the truststore.", - "readOnly" : true, - "items" : { - "type" : "string" - } - }, - "message" : { - "type" : "string", - "description" : "The warning message if any. Applies only if isWarning = true" - }, - "isLoaded" : { - "type" : "boolean", - "description" : "Indicates whether the truststore is loaded or not. A truststore may not be loaded if there are errors while reading the truststore file." - }, - "isWarning" : { - "type" : "boolean", - "description" : "Indicates whether there is a warning message from the API Gateway while the truststore was created/modified." - } - }, - "description" : "Model containing the properties of a truststore in API Gateway" - }, - "NotificationCriteria" : { - "type" : "object", - "properties" : { - "id" : { - "type" : "string" - }, - "user" : { - "type" : "string", - "description" : "User" - }, - "notifyAt" : { - "type" : "integer", - "format" : "int32", - "description" : "When to notify" - }, - "email" : { - "type" : "string", - "description" : "Email address" - }, - "notificationType" : { - "type" : "string", - "description" : "Type of notification" - }, - "creationDate" : { - "type" : "string", - "description" : "Date of creation" - }, - "defaultNotificationCriteria" : { - "type" : "boolean", - "description" : "Default notification criteria" - } - }, - "description" : "This defines the notification criteria required for the transaction based license to generate notifications." - }, - "URLAliasSettings" : { - "type" : "object", - "required" : [ "alias", "package" ], - "properties" : { - "id" : { - "type" : "string", - "description" : "URL Aliases ID", - "readOnly" : true - }, - "alias" : { - "type" : "string", - "description" : "The unique alias name given for the URL aliases. When invoked with this alias, the path will be substituted." - }, - "urlPath" : { - "type" : "string", - "description" : "The default path which must be substituted for the URL alias. If port specific mappings are provided, then this default path is considered if none of the ports are matched with the port of the incoming request. Either urlPath or portList must be specified." - }, - "portList" : { - "type" : "array", - "example" : "[5555#gateway/ws/soapapi/v1/getOperation,5556#gateway/ws/soapapi/v2/testOp]", - "description" : "An array of port specific mappings for paths. Each mapping in this array must be specified as port_number#url_path. Either urlPath or portList must be specified.", - "items" : { - "type" : "string" - } - }, - "association" : { - "type" : "string", - "example" : "1", - "description" : "Indicates how the URL Alias is created. This value is always 1." - }, - "package" : { - "type" : "string", - "example" : "WmAPIGateway", - "description" : "The package to which the URL Alias is associated. Any URL Alias created through the API should always be associated with the WmAPIGateway package." - } - }, - "description" : "This model contains URL Aliases details" - }, - "URLAliasesGetResponse" : { - "type" : "object", - "properties" : { - "urlAliases" : { - "type" : "array", - "description" : "Contains the list of available URL aliases or a single URL alias object.", - "items" : { - "$ref" : "#/definitions/URLAliasSettings" - } - } - } - }, - "Rule" : { - "type" : "object", - "discriminator" : "ruleType", - "properties" : { - "id" : { - "type" : "string", - "description" : "A unique ID for the rule" - }, - "ruleType" : { - "type" : "string", - "description" : "Type of the rule", - "enum" : [ "teamAssignmentRule" ] - }, - "name" : { - "type" : "string", - "description" : "Rule name" - }, - "description" : { - "type" : "string", - "description" : "Rule Description" - }, - "attributeContexts" : { - "type" : "array", - "description" : "Context(s) of the attribute used in rule expression", - "items" : { - "type" : "string" - } - }, - "ruleLogicalOperator" : { - "type" : "string", - "description" : "Logical operator (AND / OR) that should be used to evaluate Rule expression" - }, - "ruleExpressions" : { - "type" : "array", - "description" : "Rule condition is defined using ruleExpressions", - "items" : { - "$ref" : "#/definitions/RuleExpression" - } - }, - "owner" : { - "type" : "string", - "description" : "Owner of this rule asset" - }, - "active" : { - "type" : "boolean", - "description" : "This rule is active" - } - } - }, - "RuleExpression" : { - "type" : "object", - "properties" : { - "attributeName" : { - "type" : "string" - }, - "operator" : { - "type" : "string" - }, - "attributeValue" : { - "type" : "string" - } - } - }, - "TeamAssignmentRule" : { - "allOf" : [ { - "$ref" : "#/definitions/Rule" - }, { - "type" : "object", - "properties" : { - "teamsAssigned" : { - "type" : "array", - "description" : "List of teams to be assigned, if conditions of rule expression is met", - "items" : { - "type" : "string" - } - } - } - } ] - }, - "ClusterInfo" : { - "type" : "object", - "properties" : { - "clusterAware" : { - "type" : "boolean", - "description" : "The property which is used to find whether APIGateway is cluster aware." - }, - "pendingRestart" : { - "type" : "boolean", - "description" : "The property used to determine whether APIGateway is pending for restart for the cluster settings to take effect." - }, - "currentlyClustered" : { - "type" : "boolean", - "description" : "The current clusterd state of APIGateway." - }, - "clusterSessTimeout" : { - "type" : "string", - "description" : "Number of minutes an inactive session will be retained in the clustered session store. The default is 60." - }, - "clusterName" : { - "type" : "string", - "description" : "Name of the cluster to which this APIGateway belongs." - }, - "actionOnStartupError" : { - "type" : "string", - "description" : "How APIGateway responds when an error at start up prevents APIGateway from joining the cluster." - }, - "tsaURLs" : { - "type" : "string", - "description" : "A comma separated list of the URLs for the Terracotta Server Array to be used with the cluster to which this APIGateway belongs." - }, - "cacheManagerName" : { - "type" : "string", - "description" : "The default cache manager." - }, - "cacheName" : { - "type" : "string", - "description" : "The default cache." - }, - "message" : { - "type" : "string", - "description" : "Message to be displayed to the clients." - } - } - }, - "KeyStore" : { - "type" : "object", - "properties" : { - "keyStoreName" : { - "type" : "string", - "description" : "The name of the keystore. It cannot contain spaces or special characters. The name of the key store must be unique across all the keystores created in API Gateway." - }, - "keyStoreDescription" : { - "type" : "string", - "description" : "The description for the keystore." - }, - "keyStoreType" : { - "type" : "string", - "description" : "The certificate file format of the keystore.", - "enum" : [ "JKS", "PKCS12" ] - }, - "keyStoreProvider" : { - "type" : "string", - "description" : "The provider that is used for the keystore type. The default is SUN for JKS type and SunJSSE for PKCS12 type.", - "enum" : [ "SUN", "SunJSSE" ] - }, - "keyStorePassword" : { - "type" : "string", - "description" : "The keystore password that is defined at the time of keystore creation using a keystore utility." - }, - "uploadFileName" : { - "type" : "string", - "description" : "The name of the keystore file that will be used to save the keystore internally in API Gateway." - }, - "fileContent" : { - "type" : "string", - "description" : "The contents of the keystore file." - }, - "pkAliasesList" : { - "type" : "string", - "description" : "Comma separated list of alias names in the uploaded keystore file." - }, - "pkPasswordsList" : { - "type" : "string", - "description" : "Comma separated list of passwords in the same order as the aliases specified in pkAliasesList. If a particular key alias does not have a password, it is denoted by space." - }, - "nullPKpasswds" : { - "type" : "string", - "description" : "Comma separated list of boolean values (false/true) indicating whether the particular alias has a password or not in the same order as the aliases specified in pkAliasesList. For each key alias, true indicates that the key alias does not have a password and false indicates that it does have a password." - }, - "bitarray" : { - "type" : "string", - "description" : "Comma separated list of bits (1/0) indicating whether the particular key alias has been successfully configured in API Gateway or not. For each key alias, 1 indicates that the key alias was loaded successfully and 0 indicates that the key alias was not loaded/configured." - }, - "message" : { - "type" : "string", - "description" : "The error or warning or success message from persisting the keystore in API Gateway. If there are failures in loading a keystore or a key alias, then the reasons for the failures are indicated by this message." - }, - "isLoaded" : { - "type" : "boolean", - "description" : "Indicates whether the keystore is loaded or not. A keystore may not be loaded if there are errors while reading the keystore file or its key aliases." - }, - "isWarning" : { - "type" : "boolean", - "description" : "Indicates whether a warning is thrown by the API Gateway while persisting the keystore." - } - }, - "description" : "This model contains Keystore details" - }, - "LoadBalancer" : { - "type" : "object", - "properties" : { - "httpUrls" : { - "type" : "array", - "description" : "HTTP URLs to be exposed for API invocation.", - "items" : { - "type" : "string" - } - }, - "httpsUrls" : { - "type" : "array", - "description" : "HTTPS URLs to be exposed for API invocation.", - "items" : { - "type" : "string" - } - }, - "websocketUrls" : { - "type" : "array", - "description" : "WebSocket URL to be exposed for Websocket APIs invocation.", - "items" : { - "type" : "string" - } - }, - "webAppUrl" : { - "type" : "string", - "description" : "API Gateway UI access url" - } - }, - "description" : "This defines the Load Balancer URLs configuration in the API Gateway." - }, - "WhiteListedIPs" : { - "type" : "object", - "properties" : { - "privateIPs" : { - "type" : "array", - "description" : "List of private whitelisted IPs to be considered while API is created / updated by importing a url and import an archive", - "items" : { - "type" : "string" - } - } - }, - "description" : "This defines the whitelisting of private IPs configured in the API Gateway." - }, - "APICallbackSettings" : { - "type" : "object", - "properties" : { - "processCallbackRequests" : { - "type" : "boolean", - "description" : "Decider to process the callback URLs" - }, - "allowCallBackRequestsHTTPsAccessOnly" : { - "type" : "boolean", - "description" : "Native Servers can access the callback proxy through HTTPs protocal" - }, - "portType" : { - "type" : "string", - "description" : "Select value from Loadbalancer, HTTP, HTTPS, External, the port used to forward to Native Server" - }, - "allowCallbackRequestAccessToAllowedIPs" : { - "type" : "boolean", - "description" : "Decider to process callback requests based on Allowed IPs" - }, - "allowedIPs" : { - "type" : "array", - "description" : "Configure Allowed IPs.", - "items" : { - "type" : "string" - } - } - } - }, - "CallbackProcessorSettings" : { - "type" : "object", - "properties" : { - "configuration" : { - "$ref" : "#/definitions/APICallbackSettings" - } - }, - "description" : "This defines the various extended settings that can be configured in API Gateway." - }, - "ExtendedSettingsInput" : { - "type" : "object", - "properties" : { - "preferredSettings" : { - "$ref" : "#/definitions/Settings" - } - } - }, - "Settings" : { - "type" : "object", - "properties" : { - "wattKeys" : { - "type" : "object", - "description" : "A map containing the Integration Server Watt properties key-value pair.", - "additionalProperties" : { - "type" : "string" - } - }, - "extendedKeys" : { - "type" : "object", - "description" : "A map containing the API Gateway Extended Settings key-value pair.", - "additionalProperties" : { - "type" : "string" - } - } - } - }, - "ExtendedSettingsOutput" : { - "type" : "object", - "properties" : { - "preferredSettings" : { - "$ref" : "#/definitions/Settings" - }, - "allSettings" : { - "$ref" : "#/definitions/Settings" - } - } - }, - "ErrorProcessing" : { - "type" : "object", - "properties" : { - "fallbackErrorMessage" : { - "type" : "string" - }, - "defaultErrorMessage" : { - "type" : "string" - }, - "sendNativeProviderFault" : { - "type" : "string" - } - }, - "description" : "Defines the error message configuration. The configured error message will be sent to the invoking client in case API Gateway encounters an exception." - }, - "KeystoreTruststore" : { - "type" : "object", - "properties" : { - "configId" : { - "type" : "string" - }, - "keystoreName" : { - "type" : "string" - }, - "signingAlias" : { - "type" : "string" - }, - "truststoreName" : { - "type" : "string" - } - }, - "description" : "This defines the keystore and truststore requred for the API Gateway." - }, - "Destination" : { - "type" : "object", - "properties" : { - "sendErrorEvent" : { - "type" : "string", - "description" : "Flag to enable publish of the error events. Occurs each time an API invocation results in an error." - }, - "sendLifecycleEvent" : { - "type" : "string", - "description" : "Flag to enable publish of the life cycle events. Occurs each time API Gateway is started or shut down." - }, - "sendPolicyViolationEvent" : { - "type" : "string", - "description" : "Flag to enable publish of the policy violations events. Occurs each time an API invocation violates the policy enforcement that was set for the API." - }, - "sendPerformanceMetrics" : { - "type" : "string", - "description" : "Flag to enable publish of the performance metrics. The performance data provides information on average response time, total request count, fault count, and so on." - }, - "metricsPublishInterval" : { - "type" : "string", - "description" : "The interval at which the metrics will be published to the destination. Enter a value from 1 through 60. The default is 60 minutes." - }, - "sendAuditlogPackageManagementEvent" : { - "type" : "string", - "description" : "Flag to enable publish of the package management audit logs. Occurs each time a package create/update/delete operation performed." - }, - "sendAuditlogPolicyManagementEvent" : { - "type" : "string", - "description" : "Flag to enable publish of the policy management audit logs. Occurs each time a policy create/update/delete operation performed." - }, - "sendAuditlogRuntimeDataManagementEvent" : { - "type" : "string", - "description" : "Flag to enable publish of the analytics management audit logs. Occurs each time an analytics data purge operation performed." - }, - "sendAuditlogPlanManagementEvent" : { - "type" : "string", - "description" : "Flag to enable publish of the plan management audit logs. Occurs each time a plan create/update/delete operation performed." - }, - "sendAuditlogApprovalManagementEvent" : { - "type" : "string", - "description" : "Flag to enable publish of the approval management audit logs. Occurs each time an approval request create/update/delete operation performed." - }, - "sendAuditlogUserManagementEvent" : { - "type" : "string", - "description" : "Flag to enable publish of the user management audit logs. Occurs each time an user create/update/delete operation performed." - }, - "sendAuditlogApplicationManagementEvent" : { - "type" : "string", - "description" : "Flag to enable publish of the application management audit logs. Occurs each time an application create/update/delete operation performed." - }, - "sendAuditlogGroupManagementEvent" : { - "type" : "string", - "description" : "Flag to enable publish of the group management audit logs. Occurs each time a group create/update/delete operation performed." - }, - "sendAuditlogAccessProfileManagementEvent" : { - "type" : "string", - "description" : "Flag to enable publish of the team management audit logs. Occurs each time an team create/update/delete operation performed." - }, - "sendAuditlogPromotionManagementEvent" : { - "type" : "string", - "description" : "Flag to enable publish of the promotion management audit logs. Occurs each time a promotion create/update/delete operation performed." - }, - "sendAuditlogAPIManagementEvent" : { - "type" : "string", - "description" : "Flag to enable publish of the api management audit logs. Occurs each time an api create/update/delete operation performed." - }, - "sendAuditlogAliasManagementEvent" : { - "type" : "string", - "description" : "Flag to enable publish of the alias management audit logs. Occurs each time an alias create/update/delete operation performed." - } - }, - "description" : "This defines the configurations required for the destination." - }, - "AuditLogDestination" : { - "type" : "object", - "properties" : { - "name" : { - "type" : "string", - "description" : "The default name of the audit log, API Gateway Transaction Logger." - }, - "enable" : { - "type" : "string", - "description" : "Enable activation to enable the logger to start writing the log entries to the database or the file." - }, - "mode" : { - "type" : "string", - "description" : "Specifies whether the logger is to write entries to the destination synchronously or asynchronously." - }, - "guaranteed" : { - "type" : "string", - "description" : "Provides data about guaranteed delivery transactions." - }, - "destination" : { - "type" : "string", - "description" : "Specifies whether the logger is to write entries to a file or database." - }, - "maximumQueueSize" : { - "type" : "string", - "description" : "Specifies the maximum number of entries the queue can hold." - }, - "maximumRetries" : { - "type" : "string", - "description" : "Specifies the maximum times the logger must retry writing the entry to the destination if the first attempt fails because of a transient error." - }, - "waitBetweenRetries" : { - "type" : "string", - "description" : "Specifies the waiting time before the logger can reconnect and rewrite the eateries to the destination in case of failure." - } - }, - "description" : "This defines the configurations required for Audit Log destination." - }, - "CSCommunicationDestination" : { - "type" : "object", - "properties" : { - "protocol" : { - "type" : "string", - "description" : "Specifies the communication protocol used to establish communication between API Gateway and CentraSite." - }, - "hostname" : { - "type" : "string", - "description" : "Specifies the host name or IP address of the machine on which CentraSite Application Server Tier (CAST) is running." - }, - "uddiPort" : { - "type" : "string", - "description" : "Specifies the port on which CAST is listening. The default port number for CAST is 53307." - }, - "username" : { - "type" : "string", - "description" : "Specifies the CentraSite user ID for authenticating CentraSite when API Gateway communicates with CentraSite. This implies the user ID of a user who has the CentraSite Administrator role or the API Gateway Administrator role in CentraSite." - }, - "password" : { - "type" : "string", - "description" : "Specifies the password for authenticating CentraSite when API Gateway communicates with CentraSite." - }, - "gatewayAssetId" : { - "type" : "string", - "description" : "Specifies the registered API Gateway ID." - }, - "targetname" : { - "type" : "string", - "description" : "Specifies the name of the API Gateway asset as defined in CentraSite." - } - }, - "description" : "This defines the configurations required for Centrasite Communication section of CentraSite destination." - }, - "CSSNMPDestination" : { - "type" : "object", - "properties" : { - "sendTRAPsToCentrasite" : { - "type" : "string", - "description" : "Specifies whether the events has to be sent from API Gateway to CentraSite." - }, - "transport" : { - "type" : "string", - "description" : "Specifies the wire transport protocol that is used by the SNMP Listener." - }, - "hostname" : { - "type" : "string", - "description" : "Specifies the CentraSite host name or IP address to which the SNMP listener binds." - }, - "port" : { - "type" : "string", - "description" : "Specifies the port to which the SNMP listener binds. The default port number for CentraSite's SNMP server is 8181." - }, - "username" : { - "type" : "string", - "description" : "Specifies the SecurityName that is used by the SNMP Listener." - }, - "authorizationProtocol" : { - "type" : "string", - "description" : "Specifies the authorization protocol that is used by the SNMP Listener for decoding the incoming trap." - }, - "authorizationPassword" : { - "type" : "string", - "description" : "Specifies the password to be used for authorization protocol." - }, - "privacyProtocol" : { - "type" : "string", - "description" : "Specifies the privacy protocol that is used by the SNMP Listener for decoding the incoming trap." - }, - "privacyPassword" : { - "type" : "string", - "description" : "Specifies the password to be used for privacy protocol." - } - }, - "description" : "This defines the configurations required for CentraSite SNMP section of CentraSite destination." - }, - "ElasticsearchDestination" : { - "type" : "object", - "properties" : { - "protocol" : { - "type" : "string", - "description" : "Specifies the communication protocol used to establish communication between API Gateway and CentraSite." - }, - "hostname" : { - "type" : "string", - "description" : "Specifies the host name or IP address of the machine on which Elasticsearch Server is running." - }, - "port" : { - "type" : "string", - "description" : "Specifies the port on which the Elasticsearch server runs." - }, - "indexName" : { - "type" : "string", - "description" : "Specifies the index name for the Elasticsearch server on which the events will be available." - }, - "username" : { - "type" : "string", - "description" : "The username for the Elasticsearch server instance." - }, - "password" : { - "type" : "string", - "description" : "The password for the Elasticsearch server instance." - }, - "sendErrorEvent" : { - "type" : "string", - "description" : "Flag to enable publish of the error events. Occurs each time an API invocation results in an error." - }, - "sendLifecycleEvent" : { - "type" : "string", - "description" : "Flag to enable publish of the life cycle events. Occurs each time API Gateway is started or shut down." - }, - "sendPolicyViolationEvent" : { - "type" : "string", - "description" : "Flag to enable publish of the policy violations events. Occurs each time an API invocation violates the policy enforcement that was set for the API." - }, - "sendPerformanceMetrics" : { - "type" : "string", - "description" : "Flag to enable publish of the performance metrics. The performance data provides information on average response time, total request count, fault count, and so on." - }, - "metricsPublishInterval" : { - "type" : "string", - "description" : "The interval at which the metrics will be published to the destination. Enter a value from 1 through 60. The default is 60 minutes." - }, - "sendAuditlogPackageManagementEvent" : { - "type" : "string", - "description" : "Flag to enable publish of the package management audit logs. Occurs each time a package create/update/delete operation performed." - }, - "sendAuditlogPolicyManagementEvent" : { - "type" : "string", - "description" : "Flag to enable publish of the policy management audit logs. Occurs each time a policy create/update/delete operation performed." - }, - "sendAuditlogRuntimeDataManagementEvent" : { - "type" : "string", - "description" : "Flag to enable publish of the analytics management audit logs. Occurs each time an analytics data delete operation performed." - }, - "sendAuditlogPlanManagementEvent" : { - "type" : "string", - "description" : "Flag to enable publish of the plan management audit logs. Occurs each time a plan create/update/delete operation performed." - }, - "sendAuditlogApprovalManagementEvent" : { - "type" : "string", - "description" : "Flag to enable publish of the approval management audit logs. Occurs each time an approval request create/update/delete operation performed." - }, - "sendAuditlogUserManagementEvent" : { - "type" : "string", - "description" : "Flag to enable publish of the user management audit logs. Occurs each time an user create/update/delete operation performed." - }, - "sendAuditlogApplicationManagementEvent" : { - "type" : "string", - "description" : "Flag to enable publish of the application management audit logs. Occurs each time an application create/update/delete operation performed." - }, - "sendAuditlogGroupManagementEvent" : { - "type" : "string", - "description" : "Flag to enable publish of the group management audit logs. Occurs each time a group create/update/delete operation performed." - }, - "sendAuditlogAccessProfileManagementEvent" : { - "type" : "string", - "description" : "Flag to enable publish of the team management audit logs. Occurs each time an team create/update/delete operation performed." - }, - "sendAuditlogPromotionManagementEvent" : { - "type" : "string", - "description" : "Flag to enable publish of the promotion management audit logs. Occurs each time a promotion create/update/delete operation performed." - }, - "sendAuditlogAPIManagementEvent" : { - "type" : "string", - "description" : "Flag to enable publish of the api management audit logs. Occurs each time an api create/update/delete operation performed." - }, - "sendAuditlogAliasManagementEvent" : { - "type" : "string", - "description" : "Flag to enable publish of the alias management audit logs. Occurs each time an alias create/update/delete operation performed." - } - }, - "description" : "This defines the configurations required for Elasticsearch destinations." - }, - "SNMPDestination" : { - "type" : "object", - "properties" : { - "snmpTargetType" : { - "type" : "string", - "description" : "Specifies target type of the SNMP server." - }, - "hostname" : { - "type" : "string", - "description" : "Flag to enable save of the life cycle events." - }, - "port" : { - "type" : "string", - "description" : "The SNMP trap receiver port that is listening for SNMP requests and packets." - }, - "transport" : { - "type" : "string", - "description" : "The protocol used by SNMP to send traps. The available options are: TCP and UDP. By default, TCP is selected." - }, - "username" : { - "type" : "string", - "description" : "If User is selected as the SNMP target type, then the Username field specifies the SNMPv3 user name to use when connecting to the receiver." - }, - "useAuthorization" : { - "type" : "string", - "description" : "Specifies whether an authorization key is required. " - }, - "usePrivacy" : { - "type" : "string", - "description" : "Specifies whether a privacy (encryption) key is required." - }, - "sendErrorEvent" : { - "type" : "string", - "description" : "Flag to enable publish of the error events. Occurs each time an API invocation results in an error." - }, - "sendLifecycleEvent" : { - "type" : "string", - "description" : "Flag to enable publish of the life cycle events. Occurs each time API Gateway is started or shut down." - }, - "sendPolicyViolationEvent" : { - "type" : "string", - "description" : "Flag to enable publish of the policy violations events. Occurs each time an API invocation violates the policy enforcement that was set for the API." - } - }, - "description" : "This defines the configurations required for the SNMP destination." - }, - "EmailDestination" : { - "type" : "object", - "properties" : { - "smtpServer" : { - "type" : "string", - "description" : "The server name or the IP address of the SMTP server that API Gateway uses to send the messages." - }, - "port" : { - "type" : "string", - "description" : "The port that API Gateway uses to connect to the specified SMTP server." - }, - "username" : { - "type" : "string", - "description" : "The username that API Gateway uses to connect to the specified SMTP server." - }, - "password" : { - "type" : "string", - "description" : "The password that API Gateway uses to connect to the specified SMTP server." - }, - "transportLayerSecurity" : { - "type" : "string", - "description" : "The SSL encryption type that API Gateway uses when communicating with an email server. " - }, - "trustStoreAlias" : { - "type" : "string", - "description" : "The truststore that API Gateway uses while sending the request to a native API." - }, - "defaultEmailCharset" : { - "type" : "string", - "description" : "The character set that API Gateway uses to be recognized by the system. " - }, - "fromEmail" : { - "type" : "string", - "description" : "The email address from which you want to send the alerts." - }, - "testRecipient" : { - "type" : "string", - "description" : "The email address to which you want to send the test email." - }, - "logInvocationSubject" : { - "type" : "string", - "description" : "The subject line of the email to be sent for the Log Invocation policy action." - }, - "logInvocationContent" : { - "type" : "string", - "description" : "The content of the email to be sent for the Log Invocation policy action." - }, - "monitorSPSubject" : { - "type" : "string", - "description" : "The subject line of the email to be sent for the Monitor SP policy action." - }, - "monitorSPContent" : { - "type" : "string", - "description" : "The content of the email to be sent for the Monitor SP policy action." - }, - "monitorSLASubject" : { - "type" : "string", - "description" : "The subject line of the email to be sent for the Monitor SLA policy action." - }, - "monitorSLAContent" : { - "type" : "string", - "description" : "The content of the email to be sent for the Monitor SLA policy action." - }, - "throttlingSubject" : { - "type" : "string", - "description" : "The subject line of the email to be sent for the Throttling Traffic Optimization policy action." - }, - "throttlingContent" : { - "type" : "string", - "description" : "The content of the email to be sent for the Throttling Traffic Optimization policy action." - } - }, - "description" : "This defines the configurations required for Email destination." - }, - "CacheableType" : { - "type" : "object", - "properties" : { - "type" : { - "type" : "string" - } - } - }, - "GatewayCacheConfig" : { - "type" : "object", - "properties" : { - "cacheableType" : { - "$ref" : "#/definitions/CacheableType" - }, - "cacheSizeInPercent" : { - "type" : "integer", - "format" : "int32", - "description" : "Specifies the caching size in percentage" - }, - "collectStatistics" : { - "type" : "boolean", - "description" : "Specifies whether to collect statistics for the caching" - }, - "autoScale" : { - "type" : "boolean", - "description" : "Specifies whether to auto scale caching dynamically" - }, - "recordCount" : { - "type" : "integer", - "format" : "int32" - }, - "cacheName" : { - "type" : "string" - } - } - }, - "CustomContentType" : { - "type" : "object" - }, - "LogConfiguration" : { - "type" : "object", - "properties" : { - "apigatewayLogger" : { - "type" : "string", - "description" : "The log setting of APIGateway server.Possible values are off,trace,debug,info,warn,error and fatal" - }, - "elasticSearchLogger" : { - "type" : "string", - "description" : "The log setting of Internal Data Store.Possible values are off,info,debug,warn,error and fatal" - }, - "kibanaLogger" : { - "type" : "string", - "description" : "The log setting of APIGateway dashboard.Possible values are silent,quiet and verbose" - }, - "enableSessionLogger" : { - "type" : "string", - "description" : "The log setting enable APIGateway session logs.Possible values are off,trace,debug,info,warn,error and fatal" - }, - "enableSecurityLogger" : { - "type" : "string", - "description" : "The log setting to enable APIGateway security logs.Possible values are true and false." - }, - "sagOsgiLogger" : { - "type" : "string", - "description" : "The log setting of OSGI platform.Possible values are true and false." - }, - "enableLogAggregation" : { - "type" : "string", - "description" : "Enabling log aggregation will collect logs from the different components and store in Internal Data Store or external Elasticsearch.The value can be true or false." - }, - "logDestination" : { - "type" : "string", - "description" : "Specifies where to store the accumulated logs from different stores. Value can be EXTERNAL_ES or INTERNAL" - }, - "protocol" : { - "type" : "string", - "description" : "Protocol to communicate the external elastic search." - }, - "hostName" : { - "type" : "string", - "description" : "Hostname of external elastic search used to send the logs." - }, - "port" : { - "type" : "string", - "description" : "Port to communicate the external elastic search." - }, - "indexName" : { - "type" : "string", - "description" : "Indexname of external elastic search to store the accumulated logs." - }, - "userName" : { - "type" : "string", - "description" : "Username to communicate the external elastic search." - }, - "password" : { - "type" : "string", - "description" : "Password that is used to communicate the external elastic search." - } - }, - "description" : "This contains log settings of various components used by APIGateway." - }, - "InputLdapConfiguration" : { - "type" : "object", - "properties" : { - "ldapConfig" : { - "$ref" : "#/definitions/LDAPConfiguration" - } - } - }, - "LDAPConfiguration" : { - "type" : "object", - "properties" : { - "cacheSize" : { - "type" : "string", - "description" : "The maximum number of LDAP users Integration Server can keep in memory in the user cache. The default is 10." - }, - "cacheTTL" : { - "type" : "string", - "description" : "The number of minutes an LDAP user's credentials (userid and password) can remain in the credential cache before being purged. The default is 60 minutes." - }, - "provider" : { - "type" : "string", - "description" : "Choose the authentication provider. Possible values are 'local' and 'LDAP' " - }, - "ldapDirectoryList" : { - "type" : "array", - "description" : "List of LDAP directories. This field is applicable when LDAP provider is chosen.", - "items" : { - "$ref" : "#/definitions/LDAPDirectory" - } - }, - "cdsRunning" : { - "type" : "boolean" - } - } - }, - "LDAPDirectory" : { - "type" : "object", - "properties" : { - "index" : { - "type" : "integer", - "format" : "int32", - "description" : "Index of the current LDAP directory. Priority of the LDAP directory among other directories is calculated using the index. The starting value of index for the LDAP directory with first priority is 0 and is incremented by 1 for subsequent LDAP directories." - }, - "url" : { - "type" : "string", - "description" : "The complete URL of the LDAP server. The URL has the format protocol://hostname:portnumber. Possible values of 'protocol' is 'ldap' for standard connections or 'ldaps' for secure connections. For example, ldaps://ldaphost1:700" - }, - "principal" : { - "type" : "string", - "description" : "The user ID the Integration Server should supply to connect to the LDAP server, for example, o=webm.com or dc=webm,dc=com. This user should not be the Administrator account, but a user that has permission to query groups and group membership. If your LDAP server allows anonymous access, leave this field blank." - }, - "password" : { - "type" : "string", - "description" : "The password the API Gateway should supply to connect to the LDAP server, that is, the Principal's password." - }, - "timeout" : { - "type" : "string", - "description" : "The number of seconds the API Gateway will wait while trying to connect to the LDAP server. After this time has passed, the API Gateway will try the next configured LDAP server on the list. The default is 5 seconds." - }, - "poolMin" : { - "type" : "string", - "description" : "The minimum number of connections allowed in the pool that API Gateway maintains for connecting to the LDAP server. When API Gateway starts, the connection pool initially contains this minimum number of connections. API Gateway adds connections to the pool as needed until it reaches the maximum allowed, which is specified in the Maximum Connection Pool field. The default is 0." - }, - "poolMax" : { - "type" : "string", - "description" : "The maximum number of connections allowed in the pool that API Gateway maintains for connecting to the LDAP server. When API Gateway starts, the connection pool initially contains a minimum number of connections, which are specified in the Minimum Connection Pool field. API Gateway adds connections to the pool as needed until it reaches the maximum allowed. The default is 10." - }, - "Distinguished Name (DN) method" : { - "type" : "boolean", - "description" : "Specifies the DN method used for building the DN. Possible values are 'true' and 'false'.Select 'true' if the DN should be synthesized from the configured prefix and suffix values (Synthesize DN Method). These values are prefixed and suffixed to the username to build the DN. Select 'false' if the DN should be queried from a specified root directory (Query DN Method). The Synthesize DN method can be faster than the Query DN method because it does not perform a query against the LDAP directory. However, if your LDAP system does not contain all users in a single flat structure, use the Query DN method instead." - }, - "dnPrefix" : { - "type" : "string", - "description" : "A string that specifies the beginning of a DN you want to pass to the LDAP server. This field is applicable when 'useaf' is configured as 'true'. i.e, Synthesize DN Method is chosen.For example, if the prefix is 'cn=' and the suffix is ',ou=Users' and a user logs in specifying 'bob', API Gateway builds the DN 'cn=bob,ou=Users' and sends it to the LDAP server for authentication." - }, - "dnSuffix" : { - "type" : "string", - "description" : "A string that specifies the end of a DN you want to pass to the LDAP server. This field is applicable when 'useaf' is configured as 'true'. i.e, Synthesize DN Method is chosen.For example, if the prefix is 'cn=' and the suffix is ',ou=Users' and a user logs in specifying 'bob', API Gateway builds the DN 'cn=bob,ou=Users' and sends it to the LDAP server for authentication." - }, - "uidProp" : { - "type" : "string", - "description" : "A property that identifies an LDAP userid, such as 'cn' or 'uid'. " - }, - "userRootDn" : { - "type" : "string", - "description" : "Enter the full distinguished name. For example, configure this value as 'ou=users,dc=webMethods,dc=com', API Gateway will issue a query that starts searching in the root directory ou=users for a common name that matches the name the user logged in with." - }, - "group" : { - "type" : "string", - "description" : "An API Gateway group with which the user is associated. The user is allowed to access services that members of this API Gateway group can access. This access is controlled by the teams with which the group is associated. If you also specify a value in the 'memberAttribute' field, the user has the same access as members of the API Gateway group and members of LDAP groups that have been mapped to an API Gateway team." - }, - "memberAttribute" : { - "type" : "string", - "description" : "The name of the attribute in a group's directory entry that identifies each member of the group. This value is usually 'member' or 'uniqueMember', but can vary depending on the schema of the LDAP directory. API Gateway uses this information during team checking to see if the user attempting to log in belongs to an LDAP group that has been mapped to a team. If no value is specified here, API Gateway does not check for membership in an LDAP group. As a result, the user's access is controlled by the API Gateway group specified in the 'group' field." - }, - "groupIdProperty" : { - "type" : "string", - "description" : "A property that identifies an LDAP group, such as CN. This field is required." - }, - "groupRootDN" : { - "type" : "string", - "description" : "The full distinguished name. For example, if you specify 'ou=groups,webMethods,dc=com', API Gateway will issue a query that will display all the LDAP groups. This field is required." - } - } - }, - "PasswordRestrictions" : { - "type" : "object", - "properties" : { - "enablePasswordChange" : { - "type" : "string", - "description" : "Specifies whether users are allowed to change their passwords. These users must have developer privileges. Possible values are 'true' and 'false'. Default value is 'true'" - }, - "mode" : { - "type" : "string", - "description" : "Specifies whether Administrator users are allowed to choose passwords that are not impacted by the password restriction settings. Possible values are 'strict' and 'lax'. Default value is 'lax'. For Administrator users, when this property is set to 'strict', API Gateway enforces the password restrictions. When set to 'lax', the password restrictions are not enforced. For non-administrators the restrictions are always enforced." - }, - "minLength" : { - "type" : "string", - "description" : "Minimum number of characters (alphabetic characters, digits, and special characters combined) the password must contain.Default value is 8" - }, - "maxLength" : { - "type" : "string", - "description" : "Maximum number of characters (alphabetic characters, digits, and special characters combined) the password can contain. Default value is 64. Maximum value allowed for this field is 128" - }, - "minUpperChars" : { - "type" : "string", - "description" : "Minimum number of uppercase alphabetic characters the password must contain. Default value is 0" - }, - "minLowerChars" : { - "type" : "string", - "description" : "Minimum number of lowercase alphabetic characters the password must contain. Default value is 0" - }, - "minDigits" : { - "type" : "string", - "description" : "Minimum number of digits the password must contain. Default value is 0" - }, - "minSpecialChars" : { - "type" : "string", - "description" : "Minimum number of special characters, such as asterisk (*), period (.), and question mark (?) the password must contain. Default value is 0" - }, - "maxIdenticalCharsInARow" : { - "type" : "string", - "description" : "Maximum number of identical characters\nin a row a password can contain. Default value is 3" - }, - "historyLength" : { - "type" : "string", - "description" : "Maximum number of previously set passwords that API Gateway saves for a user (excluding the current password). You cannot choose a password that matches any of the stored passwords. Maximum value allowed for this field is 12. Default value is 0." - } - } - }, - "PasswordExpirySettings" : { - "type" : "object", - "properties" : { - "isEnabled" : { - "type" : "string", - "description" : "Specifies whether to enable the password expiry settings. Possible values are 'true' (enabled) and 'false' (disabled). Default value is 'false'" - }, - "expirationInterval" : { - "type" : "string", - "description" : "Number of days after which a password will expire, if not changed. The value should be a non-zero integer. Default value is 90." - }, - "expiryEmailBefore" : { - "type" : "string", - "description" : "Specifies the number of days prior to password expiry that API Gateway should start sending the reminder emails for password reset. The emails are sent daily until the user either updates the password or changes the expiration interval. Set the value to 0 to prevent API Gateway from sending the reminder emails for soon to expire passwords. Default value is 3." - }, - "emailIds" : { - "type" : "string", - "description" : "List of email addresses to which API Gateway sends an email notification informing that the user password is about to expire or has already expired. The email addresses are separated by a new line character (\\n). For example, 'u1@abc.com\\nu2@abc.com'" - }, - "applicableUsers" : { - "type" : "string", - "description" : "List of users to whom the expiration interval setting is applicable. The users are separated by semicolon(;). For example, if you want to add user1 and user2 to the list, specify as 'user1;user2'" - } - } - }, - "AccountLockSettings" : { - "type" : "object", - "properties" : { - "isEnabled" : { - "type" : "string", - "description" : "Specifies whether to enable the account locking settings. Possible values are 'true' and 'false'" - }, - "maximumLoginAttempts" : { - "type" : "string", - "description" : "Number of attempts in the specified time interval (specified using timeInterval and timeIntervalUnit fields) to provide the correct password before locking the account" - }, - "timeInterval" : { - "type" : "string", - "description" : "The time interval within which the number of wrong login attempts exceeding the value specified in 'maximumLoginAttempts' will result in locking the account." - }, - "timeIntervalUnit" : { - "type" : "string", - "description" : "The unit for the time interval specified in the 'timeInterval' field. Possible values are 'Minutes', 'Hours', 'Days'." - }, - "blockDuration" : { - "type" : "string", - "description" : "Duration for which the account remains locked." - }, - "blockDurationUnit" : { - "type" : "string", - "description" : "The unit for the duration specified under 'blockDuration' field. Possible values are 'Minutes', 'Hours', 'Days'." - }, - "appliesToUsers" : { - "type" : "string", - "description" : "List of users to whom the account locking settings apply. Possible values are 'allUsersExceptPredefinedUsers' and 'allUsers'. 'allUsersExceptPredefinedUsers' indicates that account locking rules apply to all user accounts except the predefined user accounts. 'allUsers' indicates the account locking rules apply to all user accounts." - } - } - }, - "JMSTrigger" : { - "type" : "object", - "properties" : { - "jmsTriggerId" : { - "type" : "string", - "description" : "A unique ID for the jmsTrigger", - "readOnly" : true - }, - "triggerName" : { - "type" : "string", - "description" : "The name of the JMS trigger" - }, - "aliasName" : { - "type" : "string", - "description" : "This property specifies JMS connection name used by the current JMS Trigger" - }, - "destinationName" : { - "type" : "string", - "description" : "This property refers to input Message Queue name" - }, - "enabled" : { - "type" : "string", - "description" : "This property is to enable/disable the JMS Trigger" - }, - "isConcurrent" : { - "type" : "string", - "description" : "This property is to opt for the concurrent or serial execution of the JMS Trigger" - }, - "maxExecutionThreads" : { - "type" : "string", - "description" : "This property is to specify the maximum execution threads in case of concurrent execution" - }, - "connectionCount" : { - "type" : "string", - "description" : "This property is to specify the connectionCount" - }, - "currentThreads" : { - "type" : "string", - "description" : "This property is to specify the currentThreads for the JMS Trigger" - }, - "state" : { - "type" : "string", - "description" : "This property reveals the state (enabled/disable)of the JMS Trigger" - }, - "destinationType" : { - "type" : "string", - "description" : "This property specifies the destination type whether Queue or Topic" - }, - "jmsMessageSelector" : { - "type" : "string", - "description" : "This property specifies the message selector for the Queue or Topic" - }, - "durableSubscribeName" : { - "type" : "string", - "description" : "This property specifies the durableSubscribeName" - }, - "ignoreLocalPublished" : { - "type" : "string", - "description" : "This property specifies the status message of the JMS Trigger" - } - }, - "description" : "This model contains JMS trigger details" - }, - "APIPortal" : { - "allOf" : [ { - "$ref" : "#/definitions/ExternalPortal" - }, { - "type" : "object", - "properties" : { - "type" : { - "type" : "string", - "description" : "API Portal type." - } - }, - "description" : "This defines the API portal configuration." - } ] - }, - "ExternalPortal" : { - "type" : "object", - "discriminator" : "type", - "properties" : { - "endpointTenant" : { - "type" : "string", - "description" : "API Portal tenant name." - }, - "endpointURL" : { - "type" : "string", - "description" : "API Portal endpoint URL." - }, - "endpointUsername" : { - "type" : "string", - "description" : "API Portal username used by API Gateway to communicate." - }, - "endpointPassword" : { - "type" : "string", - "description" : "Password for API Portal user used by API Gateway to access portal." - }, - "type" : { - "type" : "string" - } - }, - "description" : "This defines the API Portal configuration." - }, - "PortalGateway" : { - "type" : "object", - "properties" : { - "id" : { - "type" : "string", - "description" : "API Portal configuration object ID in API Gateway." - }, - "gatewayName" : { - "type" : "string", - "description" : "Name of the API Portal." - }, - "gatewayDescription" : { - "type" : "string", - "description" : "Description of API Portal." - }, - "gatewayUsername" : { - "type" : "string", - "description" : "API Gateway administrative privileged username used by API Portal to access API Gateway." - }, - "gatewayPassword" : { - "type" : "string", - "description" : "API Gateway password for provided username used by API Portal to access API Gateway." - }, - "gatewayURL" : { - "type" : "string", - "description" : "Integration Server URL of the API Gateway." - }, - "refId" : { - "type" : "string", - "description" : "Specifies API Gateway reference ID in API Portal. This is used to identify the API Gateway in API Portal." - }, - "externalPortal" : { - "$ref" : "#/definitions/ExternalPortal" - }, - "version" : { - "type" : "string", - "description" : "Specifies API Portal configuration version." - }, - "stageName" : { - "type" : "string", - "description" : "Specifies the current stage name of the Gateway" - }, - "published" : { - "type" : "boolean" - } - }, - "description" : "This defines the Portal Gateway configuration in the API Gateway." - }, - "GatewayEndpoints" : { - "type" : "object", - "properties" : { - "gatewayEndpoint" : { - "type" : "string", - "description" : "API's access endpoint exposed in API Gateway." - }, - "status" : { - "type" : "string", - "description" : "Status of the API endpoint.", - "enum" : [ "NEW", "PUBLISHED", "OBSELETE" ] - } - }, - "description" : "This defines the API Gateway's API endpoint." - }, - "PortalCommunities" : { - "type" : "object", - "properties" : { - "id" : { - "type" : "string", - "description" : "ID of API Portal community." - }, - "name" : { - "type" : "string", - "description" : "API Portal community name." - }, - "description" : { - "type" : "string", - "description" : "Description of API Portal community." - }, - "status" : { - "type" : "string", - "description" : "Staus of the API Portal community.", - "enum" : [ "NEW", "PUBLISHED", "PUBLISHED_PACKAGE", "OBSELETE" ] - } - }, - "description" : "This defines the API Portal communities configuration in the API Gateway." - }, - "PortalGatewayCommunitiesData" : { - "type" : "object", - "properties" : { - "provider" : { - "type" : "string", - "description" : "The API Portal destination configuration name" - }, - "communities" : { - "$ref" : "#/definitions/PortalGatewayData" - } - }, - "description" : "This defines the API Portal provider and communities information." - }, - "PortalGatewayData" : { - "type" : "object", - "properties" : { - "portalCommunities" : { - "type" : "array", - "description" : "List of API Portal communities to which APIs should be published.", - "uniqueItems" : true, - "items" : { - "$ref" : "#/definitions/PortalCommunities" - } - }, - "gatewayEndpointsList" : { - "type" : "array", - "uniqueItems" : true, - "items" : { - "$ref" : "#/definitions/GatewayEndpoints" - } - }, - "microgatewayEndpointsList" : { - "type" : "array", - "uniqueItems" : true, - "items" : { - "$ref" : "#/definitions/GatewayEndpoints" - } - } - }, - "description" : "This defines the API Portal Gateway data in the API Gateway." - } - } -} \ No newline at end of file From 41640b349d9ea266b7ab4bfa70ddbc1ce47437a7 Mon Sep 17 00:00:00 2001 From: Dhivakar Asokan <48990091+dhivakar-asokan@users.noreply.github.com> Date: Thu, 21 May 2020 20:29:53 +0530 Subject: [PATCH 02/22] Delete APIGatewayAlias.json --- apigatewayservices/APIGatewayAlias.json | 1131 ----------------------- 1 file changed, 1131 deletions(-) delete mode 100644 apigatewayservices/APIGatewayAlias.json diff --git a/apigatewayservices/APIGatewayAlias.json b/apigatewayservices/APIGatewayAlias.json deleted file mode 100644 index b376cc5..0000000 --- a/apigatewayservices/APIGatewayAlias.json +++ /dev/null @@ -1,1131 +0,0 @@ -{ - "swagger" : "2.0", - "info" : { - "description" : "API Gateway Alias Management Service allows you to manage aliases in the API Gateway. Any user with the 'Manage aliases' functional previlige can manage the aliases in API Gateway. By default, the users who are part of API-Gateway-Administrators group will have this privilege. \n\n An alias in API Gateway holds environment-specific property values that can be used in policy routing configurations. The aliases can be referred to in routing endpoints, routing rules, endpoint connection properties, outbound authentication tokens, and outbound HTTP headers instead of providing an actual value. The corresponding alias value based on the stage is obtained and is substituted in place of an alias name during run-time. Thus the same alias can be referred to in multiple policies and the change in a particular alias would affect all the policy properties in which it is being referred. \n\n There are mainly six types of alias \n 1. Simple alias - Holds a simple value \n 2. Endpoint alias - Holds the endpoint value along with additional properties such as connection timeout, read timeout, whether to pass security headers or not, keystore alias, key alias \n 3. HTTP Transport security alias - Contains the transport level security information required while accessing the native API. Used in the outbound policies \n 4. SOAP message security alias - Contains message level security information that is required to access the native API \n 5. webMethods Integration Server alias - Holds the ESB service value. Can be used in the Invoke webMethods IS policy for request and response processing.\n 6. Transformation alias - Holds a list of XSLT style sheets. Can be used in the XSLT Transformation policies for request and response processing.\n\n In addition to the above alias types, the configurations for \n SAML issuer - which holds the configuration to communicate to STS (Security Token Service) to retrieve the SAML token. Used in the Outbound policies, \n Authorization server - which holds configuration of authorization server(internal/external)for introspection/Dynamic client registration. Used in the token validation and OAuth2 client creation, \n Client metadata mapping - which holds the authorization service provider metadata information. Used in the Dynamic client registration for the authorization server alias and \n Service Registry- which holds registry endpoint and service paths information. Used in the client side and server side discovery \n are internally stored as aliases.\n AWS Configuration Alias- which holds AWS instance configuaration details. This can be configured in any custom policies for invoking a lambda service\n running in any AWS cloud instance.\n Integration servers - This holds webMethods Integration Server accounts details. This configuration will be used to create connection to the integration server when publishing APIs to an integration server for implementing the API. You can refer to API Gateway Service Management Swagger documentation for information about how to publish API Gateway APIs to Integration servers.", - "version" : "10.7", - "title" : "API Gateway Alias Management Service" - }, - "host" : "localhost:5555", - "basePath" : "/rest/apigateway", - "schemes" : [ "http" ], - "consumes" : [ "plain/text" ], - "produces" : [ "application/json" ], - "paths" : { - "/alias" : { - "get" : { - "description" : "The method retrieves a list of all aliases in API Gateway.", - "operationId" : "getAllAlias", - "produces" : [ "application/json" ], - "parameters" : [ ], - "responses" : { - "200" : { - "description" : "This status code indicates that the list of aliases is successfully retrieved.", - "examples" : { - "application/json" : "{\r\n\t\"id\": \"732c4526-db9a-4ef9-9782-edda1a6aa9bc\"\r\n\t\"endPointURI\": \"https://myDevstage:9090\",\r\n\t\"connectionTimeout\": \"23\",\r\n\t\"optimizationTechnique\": \"MTOM\",\r\n\t\"readTimeout\": \"36\",\r\n\t\"passSecurityHeaders\": true,\r\n\t\"keystoreAlias\": \"DEFAULT_IS_KEYSTORE\",\r\n\t\"keyAlias\": \"ssos\",\r\n\t\"name\": \"MystageEndpoint\",\r\n\t\"description\": \"Endpoint alias for myDevstage.\",\r\n\t\"type\": \"endpoint\"\r\n},\r\n{\r\n\t\"id\": \"842c4526-db9a-4ef9-9782-edda1a6ab84c\"\r\n\t\"authType\": \"WSS_USERNAME\",\r\n\t\"signAndEncryptConfig\": {\r\n\t\t\"keyStoreAlias\": \"DEFAULT_IS_KEYSTORE\",\r\n\t\t\"keyAlias\": \"ssos\",\r\n\t\t\"certificateAlias\": \"ssos\",\r\n\t\t\"truststoreAlias\": \"DEFAULT_IS_TRUSTSTORE\"\r\n\t},\r\n\t\"wssCredentials\": {\r\n\t\t\"userName\": \"Administrator\",\r\n\t\t\"password\": \"bWFuYWdl\"\r\n\t},\r\n\t\"authMode\": \"NEW\",\r\n\t\"name\": \"UsernameMessageAlias\",\r\n\t\"description\": \"WSS username message alias\",\r\n\t\"type\": \"soapMessageSecurityAlias\"\r\n},\r\n{\r\n\t\"id\": \"652c4526-db8a-4ef9-9782-edda1a4gf9bc\"\r\n\t\"authType\": \"KERBEROS\",\r\n\t\"kerberosCredentials\": {\r\n\t\t\"servicePrincipal\": \"vmmachineadfs20.sag.com\",\r\n\t\t\"servicePrincipalNameForm\": \"username\",\r\n\t\t\"clientPrincipal\": \"Administrator\",\r\n\t\t\"clientPassword\": \"bWFuYWdl\"\r\n\t},\r\n\t\"authMode\": \"NEW\",\r\n\t\"name\": \"KerberosHttpTransportAlias\",\r\n\t\"description\": \"vmmachineadfs20 kerberos transport alias\",\r\n\t\"type\": \"httpTransportSecurityAlias\"\r\n},\r\n{\r\n\t\"id\": \"422c4526-db9a-4ef9-9872-edda1a6aa9bc\"\r\n\t\"authType\": \"HTTP_BASIC\",\r\n\t\"httpAuthCredentials\": {\r\n\t\t\"domain\": \"localhost\",\r\n\t\t\"userName\": \"Administrator\",\r\n\t\t\"password\": \"bWFuYWdl\"\r\n\t},\r\n\t\"authMode\": \"NEW\",\r\n\t\"name\": \"BasicHttpTransportAlias\",\r\n\t\"description\": \"Basic http transport alias\",\r\n\t\"type\": \"httpTransportSecurityAlias\"\r\n},\r\n{\r\n\t\"id\": \"732c4526-db9a-5t46-9782-edda1a4ac9bc\"\r\n\t\"authType\": \"NTLM\",\r\n\t\"httpAuthCredentials\": {\r\n\t\t\"domain\": \"localhost\",\r\n\t\t\"userName\": \"Administrator\",\r\n\t\t\"password\": \"bWFuYWdl\"\r\n\t},\r\n\t\"authMode\": \"NEW\",\r\n\t\"name\": \"NTLMTransportAlias\",\r\n\t\"description\": \"ntlm http transport alias\",\r\n\t\"type\": \"httpTransportSecurityAlias\"\r\n},\r\n{\r\n\t\"id\": \"652c4526-db9a-4ef9-3265-edda1a6aa9bc\"\r\n\t\"authType\": \"OAUTH2\",\r\n\t\"oauth2Token\": \"T2F1dGgydG9rZW4=\",\r\n\t\"authMode\": \"NEW\",\r\n\t\"name\": \"OAuthTransportAlias\",\r\n\t\"description\": \"OAuth2 alias for outbound transport security\",\r\n\t\"type\": \"httpTransportSecurityAlias\"\r\n},\r\n{\r\n\t\"id\": \"732c3265-db9a-4ef9-9782-edda1a6aa9bc\"\r\n\t\"authType\": \"KERBEROS\",\r\n\t\"signAndEncryptConfig\": {\r\n\t\t\"keyStoreAlias\": \"DEFAULT_IS_KEYSTORE\",\r\n\t\t\"keyAlias\": \"ssos\",\r\n\t\t\"certificateAlias\": \"ssos\",\r\n\t\t\"truststoreAlias\": \"DEFAULT_IS_TRUSTSTORE\"\r\n\t},\r\n\t\"kerberosCredentials\": {\r\n\t\t\"servicePrincipal\": \"vmmachine01.sag.com/adfs\",\r\n\t\t\"servicePrincipalNameForm\": \"username\",\r\n\t\t\"clientPrincipal\": \"Administrator\",\r\n\t\t\"clientPassword\": \"bWFuYWdl\"\r\n\t},\r\n\t\"authMode\": \"DELEGATE_INCOMING\",\r\n\t\"name\": \"KerberosMessageAlias\",\r\n\t\"description\": \"Kerberos outbound message secure alias\",\r\n\t\"type\": \"soapMessageSecurityAlias\"\r\n},\r\n{\r\n\t\"id\": \"12c4526-db9a-5ef9-9845-edda1a7ba9bc\"\r\n\t\"authType\": \"SAML\",\r\n\t\"signAndEncryptConfig\": {\r\n\t\t\"keyStoreAlias\": \"\",\r\n\t\t\"keyAlias\": null,\r\n\t\t\"certificateAlias\": null,\r\n\t\t\"truststoreAlias\": \"\"\r\n\t},\r\n\t\"samlIssuerConfig\": \"${SAMLIssuer1}\",\r\n\t\"name\": \"SAMLAlias\",\r\n\t\"description\": \"SAML secure alias\",\r\n\t\"type\": \"soapMessageSecurityAlias\"\r\n}\r\n" - }, - "schema" : { - "type" : "array", - "items" : { - "$ref" : "#/definitions/Alias" - } - } - }, - "401" : { - "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." - } - }, - "security" : [ { - "Basic" : [ ] - } ] - }, - "post" : { - "description" : "Use this method to create an alias. There are different types of alias like Endpoint, Simple etc. Refer to the Alias schema for different type of alias that you can create. If you want to create an alias for a specific type (say Endpoint alias), refer to the corresponding schema (EndpointAlias)", - "operationId" : "createAlias", - "consumes" : [ "application/json" ], - "produces" : [ "application/json" ], - "parameters" : [ { - "in" : "body", - "name" : "body", - "description" : "", - "required" : true, - "schema" : { - "$ref" : "#/definitions/Alias" - }, - "x-examples" : { - "application/json" : "{\r\n\t\"authType\": \"KERBEROS\",\r\n\t\"signAndEncryptConfig\": {\r\n\t\t\"keyStoreAlias\": \"DEFAULT_IS_KEYSTORE\",\r\n\t\t\"keyAlias\": \"ssos\",\r\n\t\t\"certificateAlias\": \"ssos\",\r\n\t\t\"truststoreAlias\": \"DEFAULT_IS_TRUSTSTORE\"\r\n\t},\r\n\t\"kerberosCredentials\": {\r\n\t\t\"servicePrincipal\": \"vmmachine01.sag.com/adfs\",\r\n\t\t\"servicePrincipalNameForm\": \"username\",\r\n\t\t\"clientPrincipal\": \"Administrator\",\r\n\t\t\"clientPassword\": \"bWFuYWdl\"\r\n\t},\r\n\t\"authMode\": \"DELEGATE_INCOMING\",\r\n\t\"name\": \"KerberosMessageAlias\",\r\n\t\"description\": \"Kerberos outbound message secure alias\",\r\n\t\"type\": \"soapMessageSecurityAlias\"\r\n\t\"id\": \"732c4526-db9a-4ef9-9782-edda1a6aa9bc\"\r\n}" - } - } ], - "responses" : { - "201" : { - "description" : "This status code indicates that the alias has been successfully created in API Gateway, and the newly created alias is available in the response body.", - "examples" : { - "application/json" : "{\r\n\t\"authType\": \"KERBEROS\",\r\n\t\"signAndEncryptConfig\": {\r\n\t\t\"keyStoreAlias\": \"DEFAULT_IS_KEYSTORE\",\r\n\t\t\"keyAlias\": \"ssos\",\r\n\t\t\"certificateAlias\": \"ssos\",\r\n\t\t\"truststoreAlias\": \"DEFAULT_IS_TRUSTSTORE\"\r\n\t},\r\n\t\"kerberosCredentials\": {\r\n\t\t\"servicePrincipal\": \"vmmachine01.sag.com/adfs\",\r\n\t\t\"servicePrincipalNameForm\": \"username\",\r\n\t\t\"clientPrincipal\": \"Administrator\",\r\n\t\t\"clientPassword\": \"bWFuYWdl\"\r\n\t},\r\n\t\"authMode\": \"DELEGATE_INCOMING\",\r\n\t\"name\": \"KerberosMessageAlias\",\r\n\t\"description\": \"Kerberos outbound message secure alias\",\r\n\t\"type\": \"soapMessageSecurityAlias\"\r\n\t\"id\": \"732c4526-db9a-4ef9-9782-edda1a6aa9bc\"\r\n}" - }, - "schema" : { - "$ref" : "#/definitions/Alias" - } - }, - "400" : { - "description" : "This status code indicates that an alias with the given name already exists in API Gateway or the request body is not correct.", - "examples" : { - "application/json" : "{}" - } - }, - "401" : { - "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." - } - }, - "security" : [ { - "Basic" : [ ] - } ] - } - }, - "/alias/{aliasId}" : { - "get" : { - "description" : "The method retrieves the details of an alias in API Gateway.", - "operationId" : "getAlias", - "produces" : [ "application/json" ], - "parameters" : [ { - "name" : "aliasId", - "in" : "path", - "description" : "The path parameter specifies the id of an alias whose details are to be retrieved.", - "required" : true, - "type" : "string", - "x-example" : "732c4526-db9a-4ef9-9782-edda1a6aa9bc" - } ], - "responses" : { - "200" : { - "description" : "This status code indicates that the details of the alias are successfully retrieved.", - "examples" : { - "application/json" : "{\r\n\t\"authType\": \"KERBEROS\",\r\n\t\"signAndEncryptConfig\": {\r\n\t\t\"keyStoreAlias\": \"DEFAULT_IS_KEYSTORE\",\r\n\t\t\"keyAlias\": \"ssos\",\r\n\t\t\"certificateAlias\": \"ssos\",\r\n\t\t\"truststoreAlias\": \"DEFAULT_IS_TRUSTSTORE\"\r\n\t},\r\n\t\"kerberosCredentials\": {\r\n\t\t\"servicePrincipal\": \"vmmachine01.sag.com/adfs\",\r\n\t\t\"servicePrincipalNameForm\": \"username\",\r\n\t\t\"clientPrincipal\": \"Administrator\",\r\n\t\t\"clientPassword\": \"bWFuYWdl\"\r\n\t},\r\n\t\"authMode\": \"DELEGATE_INCOMING\",\r\n\t\"name\": \"KerberosMessageAlias\",\r\n\t\"description\": \"Kerberos outbound message secure alias\",\r\n\t\"type\": \"soapMessageSecurityAlias\"\r\n\t\"id\": \"732c4526-db9a-4ef9-9782-edda1a6aa9bc\"\r\n}" - }, - "schema" : { - "$ref" : "#/definitions/Alias" - } - }, - "404" : { - "description" : "This status code indicates that an alias with the given id could not be found in API Gateway.", - "examples" : { - "application/json" : "{\r\n \"errorDetails\": \" Alias with id: 732c4526-db9a-4ef9-9782-edda1a6aa9bc does not exist.\"\r\n}" - } - }, - "401" : { - "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." - } - }, - "security" : [ { - "Basic" : [ ] - } ] - }, - "put" : { - "description" : "The method updates the details of a specified alias in API Gateway. The API request body must contain the payload of the alias that needs to be updated.", - "operationId" : "updateAlias", - "consumes" : [ "application/json" ], - "produces" : [ "application/json" ], - "parameters" : [ { - "name" : "aliasId", - "in" : "path", - "description" : "The path parameter specifies the id of an alias whose detail is to be updated in API Gateway.", - "required" : true, - "type" : "string", - "x-example" : "732c4526-db9a-4ef9-9782-edda1a6aa9bc" - }, { - "in" : "body", - "name" : "body", - "description" : "This parameter describes the request payload of an alias that is to be updated in API Gateway.", - "required" : true, - "schema" : { - "$ref" : "#/definitions/Alias" - }, - "x-examples" : { - "application/json" : "{\r\n\t\"authType\": \"KERBEROS\",\r\n\t\"signAndEncryptConfig\": {\r\n\t\t\"keyStoreAlias\": \"DEFAULT_IS_KEYSTORE\",\r\n\t\t\"keyAlias\": \"ssos\",\r\n\t\t\"certificateAlias\": \"ssos\",\r\n\t\t\"truststoreAlias\": \"DEFAULT_IS_TRUSTSTORE\"\r\n\t},\r\n\t\"kerberosCredentials\": {\r\n\t\t\"servicePrincipal\": \"vmmachine01.sag.com/adfs\",\r\n\t\t\"servicePrincipalNameForm\": \"username\",\r\n\t\t\"clientPrincipal\": \"Administrator\",\r\n\t\t\"clientPassword\": \"bWFuYWdl\"\r\n\t},\r\n\t\"authMode\": \"DELEGATE_INCOMING\",\r\n\t\"name\": \"KerberosMessageAlias\",\r\n\t\"description\": \"Kerberos outbound message secure alias\",\r\n\t\"type\": \"soapMessageSecurityAlias\"\r\n\t\"id\": \"732c4526-db9a-4ef9-9782-edda1a6aa9bc\"\r\n}" - } - } ], - "responses" : { - "200" : { - "description" : "This status code indicates that the alias has been successfully updated in API Gateway, and the updated alias is available in the response body.", - "examples" : { - "application/json" : "{\r\n\t\"authType\": \"KERBEROS\",\r\n\t\"signAndEncryptConfig\": {\r\n\t\t\"keyStoreAlias\": \"DEFAULT_IS_KEYSTORE\",\r\n\t\t\"keyAlias\": \"ssos\",\r\n\t\t\"certificateAlias\": \"ssos\",\r\n\t\t\"truststoreAlias\": \"DEFAULT_IS_TRUSTSTORE\"\r\n\t},\r\n\t\"kerberosCredentials\": {\r\n\t\t\"servicePrincipal\": \"vmmachine01.sag.com/adfs\",\r\n\t\t\"servicePrincipalNameForm\": \"username\",\r\n\t\t\"clientPrincipal\": \"Administrator\",\r\n\t\t\"clientPassword\": \"bWFuYWdl\"\r\n\t},\r\n\t\"authMode\": \"DELEGATE_INCOMING\",\r\n\t\"name\": \"KerberosMessageAlias\",\r\n\t\"description\": \"Kerberos outbound message secure alias\",\r\n\t\"type\": \"soapMessageSecurityAlias\"\r\n\t\"id\": \"732c4526-db9a-4ef9-9782-edda1a6aa9bc\"\r\n}" - }, - "schema" : { - "$ref" : "#/definitions/Alias" - } - }, - "404" : { - "description" : "This status code indicates that an alias with the specified id could not be found in API Gateway.", - "examples" : { - "application/json" : "{\r\n \"errorDetails\": \" Unable to process the PUT request for alias. Error occurred while processing the payload. Error Message:\\n Alias with id: 6a6ea325-4190-411b-8bbd-0a7e94dbc7d1 does not exist.\"\r\n}" - } - }, - "405" : { - "description" : "This status code indicates that the specified HTTP method is not allowed for the requested alias in API Gateway.", - "examples" : { - "application/json" : "{\r\n \"errorDetails\": \" Unable to process the PUT request for alias. Error occurred while processing the payload. Error Message:\\n Method: PUT is not allowed on resource: alias\"\r\n}" - } - }, - "400" : { - "description" : "This status code indicates that the request body is invalid." - }, - "401" : { - "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." - } - }, - "security" : [ { - "Basic" : [ ] - } ] - }, - "delete" : { - "description" : "The method deletes an alias from API Gateway.", - "operationId" : "deleteAlias", - "parameters" : [ { - "name" : "aliasId", - "in" : "path", - "description" : "The path parameter specifies the id of an alias that is to be deleted from API Gateway.", - "required" : true, - "type" : "string", - "x-example" : "732c4526-db9a-4ef9-9782-edda1a6aa9bc" - } ], - "responses" : { - "204" : { - "description" : "This status code indicates that the specified alias has been successfully deleted from API Gateway." - }, - "404" : { - "description" : "This status code indicates that an alias with the given id could not be found in API Gateway.", - "examples" : { - "application/json" : "{\r\n \"errorDetails\": \" Alias with id: 732c4526-db9a-4ef9-9782-edda1a6aa9bc does not exist.\"\r\n}" - } - }, - "405" : { - "description" : "This status code indicates that the specified HTTP method is not allowed for the requested alias in API Gateway." - }, - "401" : { - "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." - } - }, - "security" : [ { - "Basic" : [ ] - } ] - } - } - }, - "securityDefinitions" : { - "Basic" : { - "description" : "API Gateway Administrator", - "type" : "basic" - } - }, - "definitions" : { - "AWSConfigurationAlias" : { - "allOf" : [ { - "$ref" : "#/definitions/Alias" - }, { - "type" : "object", - "properties" : { - "region" : { - "type" : "string", - "description" : "The configured AWS instance region detail" - }, - "accessKey" : { - "type" : "string", - "description" : "The access key ID for the AWS instance. This is used to sign the requests" - }, - "secretKey" : { - "type" : "string", - "description" : "The secret access key for the AWS instance. This is used to sign the requests" - } - } - } ] - }, - "Alias" : { - "type" : "object", - "discriminator" : "type", - "properties" : { - "id" : { - "type" : "string", - "description" : "A unique ID for the alias", - "readOnly" : true - }, - "name" : { - "type" : "string", - "description" : "A unique name for the assertion" - }, - "description" : { - "type" : "string", - "description" : "A description about the alias" - }, - "type" : { - "type" : "string", - "description" : "Type of the alias", - "enum" : [ "simple", "endpoint", "httpTransportSecurityAlias", "soapMessageSecurityAlias", "samlIssuerAlias", "authServerAlias", "webmethodsAlias", "transformationAlias", "serviceRegistryAlias", "clientMetadataMapping", "awsConfigurationAlias", "isConfigurationAlias" ] - }, - "stage" : { - "type" : "string", - "description" : "Stage for which this alias needs to be used" - }, - "owner" : { - "type" : "string", - "description" : "Owner of the alias" - } - } - }, - "AuthInfo" : { - "type" : "object", - "discriminator" : "type" - }, - "AuthServerAlias" : { - "allOf" : [ { - "$ref" : "#/definitions/Alias" - }, { - "type" : "object", - "properties" : { - "localIntrospectionConfig" : { - "$ref" : "#/definitions/LocalIntrospectionConfig" - }, - "remoteIntrospectionConfig" : { - "$ref" : "#/definitions/RemoteIntrospectionConfig" - }, - "dcrEndpoint" : { - "$ref" : "#/definitions/DynamicClientRegistrationEndpoint" - }, - "tokenGeneratorConfig" : { - "$ref" : "#/definitions/TokenGeneratorConfig" - }, - "sslConfig" : { - "$ref" : "#/definitions/SSLConfig" - }, - "metadata" : { - "$ref" : "#/definitions/Metadata" - }, - "scopes" : { - "type" : "array", - "description" : "List of scopes available in the authorization server", - "items" : { - "$ref" : "#/definitions/Scope" - } - }, - "supportedGrantTypes" : { - "type" : "array", - "description" : "List of grant types supported by the authorization server", - "items" : { - "type" : "string" - } - }, - "providerName" : { - "type" : "string", - "description" : "Name of the provider which was created using ClientMetadataMapping alias, used in the Dynamic client registration" - }, - "authServerType" : { - "type" : "string", - "description" : "Type of the authorization server", - "enum" : [ "LOCAL_IS", "REMOTE_IS", "EXTERNAL" ] - }, - "remoteISConfig" : { - "$ref" : "#/definitions/RemoteISConfig" - } - } - } ] - }, - "BasicAuth" : { - "allOf" : [ { - "$ref" : "#/definitions/AuthInfo" - }, { - "type" : "object", - "properties" : { - "username" : { - "type" : "string", - "description" : "Username for the basic authentication" - }, - "password" : { - "type" : "string", - "description" : "password of the corresponding username" - } - } - } ] - }, - "ClientMetadataMapping" : { - "allOf" : [ { - "$ref" : "#/definitions/Alias" - }, { - "type" : "object", - "properties" : { - "providerName" : { - "type" : "string", - "description" : "Name of the provider" - }, - "implNames" : { - "type" : "object", - "description" : "Map of specification names to the implementation names of the service provider", - "additionalProperties" : { - "type" : "string" - } - }, - "extendedValuesV2" : { - "type" : "array", - "description" : "List of headers that needs to be sent along with the client management request", - "items" : { - "$ref" : "#/definitions/ExtendedValue" - } - } - } - } ] - }, - "Credentials" : { - "type" : "object", - "properties" : { - "userName" : { - "type" : "string", - "description" : "Specify a username to access the native API" - }, - "password" : { - "type" : "string", - "description" : "Specify a password to access the native API" - }, - "domain" : { - "type" : "string", - "description" : "Specify a domain to access the native API" - } - } - }, - "DynamicClientRegistrationEndpoint" : { - "type" : "object", - "properties" : { - "authInfo" : { - "$ref" : "#/definitions/AuthInfo" - }, - "clientRegistrationEndpoint" : { - "$ref" : "#/definitions/OAuth2Endpoint" - } - } - }, - "EndpointAlias" : { - "allOf" : [ { - "$ref" : "#/definitions/Alias" - }, { - "type" : "object", - "properties" : { - "endPointURI" : { - "type" : "string", - "description" : "the default URI or components of the URI such as service name" - }, - "connectionTimeout" : { - "type" : "integer", - "format" : "int32", - "description" : "time interval (in seconds) after which a connection attempt times out" - }, - "readTimeout" : { - "type" : "integer", - "format" : "int32", - "description" : "time interval (in seconds) after which a socket read attempt times out" - }, - "optimizationTechnique" : { - "type" : "string", - "description" : "Type of optimization technique used for SOAP messages", - "enum" : [ "NONE", "MTOM", "SWA" ] - }, - "passSecurityHeaders" : { - "type" : "boolean", - "description" : "Boolean value whether to pass security headers or not" - }, - "keystoreAlias" : { - "type" : "string", - "description" : "Keystore alias name that is used for the signing/encryption" - }, - "keyAlias" : { - "type" : "string", - "description" : "Key alias in the particular keyStore" - } - } - } ] - }, - "ExtendedValue" : { - "type" : "object", - "properties" : { - "endpointType" : { - "type" : "string", - "description" : "Type of endpoint for which the additional header needs to sent", - "enum" : [ "CLIENT_REGISTRATION", "CLIENT_UPDATE", "CLIENT_DELETE", "CLIENT_READ", "SCOPE_CREATE", "SCOPE_READ", "SCOPE_DELETE", "SCOPE_UPDATE" ] - }, - "key" : { - "type" : "string", - "description" : "Header name" - }, - "value" : { - "type" : "string", - "description" : "Header value" - } - } - }, - "HTTPTransportSecurityAlias" : { - "allOf" : [ { - "$ref" : "#/definitions/Alias" - }, { - "type" : "object", - "properties" : { - "authType" : { - "type" : "string", - "description" : "type of authentication you want to use while communicating with the native API", - "enum" : [ "HTTP_BASIC", "NTLM", "OAUTH2", "KERBEROS", "JWT", "ALIAS", "REMOVE_INCOMING_HTTP_HEADERS" ] - }, - "authMode" : { - "type" : "string", - "description" : "Mode of authentication that needs to be used", - "enum" : [ "NEW", "INCOMING_HTTP_BASIC_AUTH", "INCOMING_WSS_USER", "INCOMING_X509", "DELEGATE_INCOMING", "INCOMING_OAUTH_TOKEN", "INCOMING_JWT", "TRANSPARENT", "INCOMING_KERBEROS" ] - }, - "httpAuthCredentials" : { - "$ref" : "#/definitions/Credentials" - }, - "kerberosCredentials" : { - "$ref" : "#/definitions/KerberosCredentials" - }, - "oauth2Token" : { - "type" : "string", - "description" : "OAuth2 token that is used for authentication" - } - } - } ] - }, - "ISConfigurationAlias" : { - "allOf" : [ { - "$ref" : "#/definitions/Alias" - }, { - "type" : "object", - "properties" : { - "url" : { - "type" : "string" - }, - "username" : { - "type" : "string", - "description" : "The username of a registered Integration Server user who has the functional privilege to create the service" - }, - "password" : { - "type" : "string", - "description" : "A valid password of the Integration Server user identified by the attribute Username" - }, - "keystoreAlias" : { - "type" : "string", - "description" : "The Keystore alias field contains a list of the available keystore aliases in API Gateway. If there are no configured keystore aliases, this field lists the default Integration Server keystore, DEFAULT_IS_KEYSTORE ." - }, - "keyAlias" : { - "type" : "string", - "description" : "The alias of the private key that is stored in the keystore specified by the keystore alias.\nThe Key alias field contains a list of the available aliases in the selected keystore. If there are no configured keystores, this field is empty" - } - } - } ] - }, - "KerberosCredentials" : { - "type" : "object", - "properties" : { - "clientPrincipal" : { - "type" : "string", - "description" : "a unique identity to which Kerberos can assign tickets" - }, - "clientPassword" : { - "type" : "string", - "description" : "password for the client principal" - }, - "servicePrincipal" : { - "type" : "string", - "description" : "a unique identifier of a service instance" - }, - "servicePrincipalNameForm" : { - "type" : "string", - "description" : "the format in which you want to specify the principal name of the service that is registered with the principal database", - "enum" : [ "HOST_BASED", "USERNAME_BASED" ] - }, - "requestDelegateToken" : { - "type" : "boolean", - "description" : "Boolean value whether the token needs to be delegated or not" - } - } - }, - "LocalIntrospectionConfig" : { - "type" : "object", - "properties" : { - "issuer" : { - "type" : "string", - "description" : "Third party issuer name" - }, - "trustStoreAlias" : { - "type" : "string", - "description" : "The truststore to be used by API Gateway when validating the token issued by the authorization server. Truststore is a repository that holds all the trusted public certificates" - }, - "certificateAlias" : { - "type" : "string", - "description" : "Select the certificate from the truststore that is used to validate the token." - }, - "jwksuri" : { - "type" : "string", - "description" : "JSON Web Key URI" - }, - "description" : { - "type" : "string", - "description" : "Third party issuer description" - } - } - }, - "Metadata" : { - "type" : "object", - "properties" : { - "authorizeURL" : { - "type" : "string", - "description" : "URL to get the approval from the resource owner" - }, - "accessTokenURL" : { - "type" : "string", - "description" : "URL to get the access token from the authorization server" - }, - "refreshTokenURL" : { - "type" : "string", - "description" : "URL to get the new access token from the refresh token" - } - } - }, - "OAuth2Endpoint" : { - "type" : "object", - "properties" : { - "endpoint" : { - "type" : "string", - "description" : "Client registration endpoint in the authorization server" - }, - "keyStoreAlias" : { - "type" : "string", - "description" : "Specify the keystore that needs to be used by API Gateway while sending the request to the authorization server. A keystore is a repository of private key and its corresponding public certificate" - }, - "keyAlias" : { - "type" : "string", - "description" : "The key alias is the private key that is used sign the request sent to the authorization server" - }, - "headers" : { - "type" : "object", - "additionalProperties" : { - "type" : "string" - } - }, - "https" : { - "type" : "boolean" - } - } - }, - "OAuth2Endpoints" : { - "type" : "object", - "properties" : { - "endpoints" : { - "type" : "object", - "additionalProperties" : { - "$ref" : "#/definitions/OAuth2Endpoint" - } - }, - "keyStoreAlias" : { - "type" : "string" - }, - "keyAlias" : { - "type" : "string" - } - } - }, - "OpenIDProviderAlias" : { - "allOf" : [ { - "$ref" : "#/definitions/Alias" - }, { - "type" : "object", - "properties" : { - "issuer" : { - "type" : "string" - }, - "authorizationEndpoint" : { - "type" : "string" - }, - "tokenEndpoint" : { - "type" : "string" - }, - "userinfoEndpoint" : { - "type" : "string" - }, - "jwksUri" : { - "type" : "string" - }, - "openIDScopes" : { - "type" : "array", - "items" : { - "type" : "string" - } - }, - "openIDResponseType" : { - "type" : "string", - "enum" : [ "code", "id_token", "token_id_token", "id_token_token" ] - }, - "clientId" : { - "type" : "string" - }, - "clientSecret" : { - "type" : "string" - }, - "prompt" : { - "type" : "string", - "enum" : [ "none", "login", "consent", "select_account" ] - }, - "openIDGrantType" : { - "type" : "string", - "enum" : [ "authorization_code" ] - }, - "openIDDisplayValue" : { - "type" : "string", - "enum" : [ "none", "page", "popup", "touch", "wap" ] - }, - "openIDTokenEndpointAuthMode" : { - "type" : "string", - "enum" : [ "client_secret_basic", "client_secret_post", "none" ] - }, - "maxAge" : { - "type" : "string" - }, - "redirectionEndpointHost" : { - "type" : "string" - }, - "redirectionEndpointPort" : { - "type" : "string" - }, - "uiLocales" : { - "type" : "string" - }, - "includeUserinfoClaims" : { - "type" : "boolean" - }, - "trustStoreAlias" : { - "type" : "string" - } - } - } ] - }, - "RemoteISConfig" : { - "type" : "object", - "properties" : { - "host" : { - "type" : "string", - "description" : "Host name or IP address of the remote server for which you are creating an alias" - }, - "port" : { - "type" : "integer", - "format" : "int32", - "example" : 5555, - "description" : "Port number on which the remote server listens for incoming requests from your server" - }, - "username" : { - "type" : "string", - "description" : "User name for a user account on the remote server. When you invoke a service using this alias, the remote server uses this user account for authentication and access control." - }, - "password" : { - "type" : "string", - "description" : "Password of the corresponding user in remote IS authorization server" - }, - "useSSL" : { - "type" : "boolean", - "description" : "Whether you want your server to connect to the remote server using Secure Sockets Layer (SSL)." - }, - "acl" : { - "type" : "string", - "description" : "ACL that governs which user groups on your server can use this alias for the remote server. Select an ACL from the drop down list. By default, only members of groups governed by the Internal ACL can use this alias." - }, - "timeout" : { - "type" : "integer", - "format" : "int32", - "description" : "Specifies the length of time (in minutes) that your server maintains an idle connection to a remote server." - }, - "keepAlive" : { - "type" : "integer", - "format" : "int32", - "description" : "Sets the default number of client keep alive connections to retain for a given target endpoint. If not specified, five keep alive connections are retained." - } - } - }, - "RemoteIntrospectionConfig" : { - "type" : "object", - "properties" : { - "introspectionEndpoint" : { - "type" : "string", - "description" : "Endpoint of the authorization server to do the introspection" - }, - "clientId" : { - "type" : "string", - "description" : "ClientId of a client in the authorization server" - }, - "clientSecret" : { - "type" : "string", - "description" : "Client Secret of the corresponding clientId in the authorization server" - }, - "user" : { - "type" : "string", - "description" : "A user in the API Gateway under whom the introspection endpoint is invoked" - } - } - }, - "SAMLIssuerAlias" : { - "allOf" : [ { - "$ref" : "#/definitions/Alias" - }, { - "type" : "object", - "properties" : { - "issuerCommunicationMode" : { - "type" : "string", - "description" : "Mode of communication to the STS", - "enum" : [ "NORMAL_CLIENT", "ACT_AS_DELEGATION" ] - }, - "issuerPolicy" : { - "type" : "string", - "description" : "The webMethods Integration Server service name" - }, - "issuerAuthScheme" : { - "type" : "string", - "description" : "The authentication type used for communicating to STS", - "enum" : [ "BASIC_AUTH", "WSS_USERNAME", "KERBEROS", "X509" ] - }, - "issuerAuthMode" : { - "type" : "string", - "description" : "Mode of communication", - "enum" : [ "NEW", "INCOMING_HTTP_BASIC_AUTH", "INCOMING_WSS_USER", "INCOMING_X509", "DELEGATE_INCOMING", "INCOMING_OAUTH_TOKEN", "INCOMING_JWT", "TRANSPARENT", "INCOMING_KERBEROS" ] - }, - "wssCredentials" : { - "$ref" : "#/definitions/WssCredentials" - }, - "kerberosCredentials" : { - "$ref" : "#/definitions/KerberosCredentials" - }, - "endpoint" : { - "type" : "string", - "description" : "The endpoint URI of the STS" - }, - "samlVersion" : { - "type" : "string", - "description" : "SAML version to be used for authentication", - "enum" : [ "SAML1_1", "SAML_2_0" ] - }, - "wsTrustVersion" : { - "type" : "string", - "description" : "WS-Trust version that API Gateway must use to send the RST to the SAML issuer", - "enum" : [ "WS_TRUST_1_0", "WS_TRUST_1_3" ] - }, - "appliesTo" : { - "type" : "string", - "description" : "Specify the scope for which this security token is required" - }, - "extendedParameters" : { - "type" : "object", - "description" : "Extensions to the element for requesting specific types of keys, algorithms, or key and algorithms, as specified by a given policy in the return token(s)", - "additionalProperties" : { - "type" : "string" - } - }, - "signAndEncryptConfig" : { - "$ref" : "#/definitions/SignAndEncryptConfig" - }, - "assertionId" : { - "type" : "string" - } - } - } ] - }, - "SOAPMessageSecurityAlias" : { - "allOf" : [ { - "$ref" : "#/definitions/Alias" - }, { - "type" : "object", - "properties" : { - "authType" : { - "type" : "string", - "description" : "Type of authentication that needs to be used", - "enum" : [ "WSS_USERNAME", "SAML", "KERBEROS", "ALIAS", "REMOVE_WSS_HEADERS", "NONE" ] - }, - "authMode" : { - "type" : "string", - "description" : "Mode of authentication", - "enum" : [ "NEW", "INCOMING_HTTP_BASIC_AUTH", "INCOMING_WSS_USER", "INCOMING_X509", "DELEGATE_INCOMING", "INCOMING_OAUTH_TOKEN", "INCOMING_JWT", "TRANSPARENT", "INCOMING_KERBEROS" ] - }, - "wssCredentials" : { - "$ref" : "#/definitions/WssCredentials" - }, - "kerberosCredentials" : { - "$ref" : "#/definitions/KerberosCredentials" - }, - "samlIssuerConfig" : { - "type" : "string", - "description" : "Saml issuer configuration name" - }, - "signAndEncryptConfig" : { - "$ref" : "#/definitions/SignAndEncryptConfig" - } - } - } ] - }, - "SSLConfig" : { - "type" : "object", - "properties" : { - "keyStoreAlias" : { - "type" : "string", - "description" : "Specify the keystore that needs to be used by API Gateway while sending the request to the authorization server. A keystore is a repository of private key and its corresponding public certificate" - }, - "keyAlias" : { - "type" : "string", - "description" : "The key alias is the private key that is used sign the request sent to the authorization server" - }, - "trustStoreAlias" : { - "type" : "string", - "description" : "The truststore to be used by API Gateway when validating the incoming response from the authorization server. Truststore is a repository that holds all the trusted public certificates" - } - } - }, - "Scope" : { - "type" : "object", - "properties" : { - "name" : { - "type" : "string", - "description" : "Name of the oauth2 scope" - }, - "description" : { - "type" : "string", - "description" : "Description of the oauth2 scope" - } - } - }, - "ServiceRegistryCommunication" : { - "type" : "object", - "properties" : { - "path" : { - "type" : "string", - "description" : "Resource path that will be appened with base endpoint while communicating with service registry" - }, - "httpMethod" : { - "type" : "string", - "description" : "HttpMethod that is used while communicating with the service registry", - "enum" : [ "GET", "POST", "PUT", "DELETE", "HEAD", "PATCH", "OPTIONS", "TRACE", "CUSTOM" ] - } - } - }, - "ServiceRegistryModel" : { - "allOf" : [ { - "$ref" : "#/definitions/Alias" - }, { - "type" : "object", - "properties" : { - "endpointURI" : { - "type" : "string", - "description" : "Endpoint that is used to communicate with the service registry" - }, - "heartBeatInterval" : { - "type" : "integer", - "format" : "int32", - "description" : "APIGateway will ping the service registry on the configured interval for every API" - }, - "username" : { - "type" : "string", - "description" : "Username that is used in the Basic authentication when communicating with the service registry" - }, - "password" : { - "type" : "string", - "description" : "Password that is used in the Basic authentication when communicating with the service registry" - }, - "keystoreAlias" : { - "type" : "string", - "description" : "A keystore is a repository of private key. This keystore contains the private key used for the SSL communication with the Service Registry. For information on how to configure the keystore aliases, refer API Gateway Administration swagger" - }, - "keyAlias" : { - "type" : "string", - "description" : "The key alias is the private key that is used for signing when using SSL communication with the Service Registry." - }, - "trustStoreAlias" : { - "type" : "string", - "description" : "A truststore is a repository of public keys. This truststore contains the public key of the Service Registry used for the SSL communication with the Service Registry. For information on how to configure the truststore aliases, refer API Gateway Administration swagger" - }, - "customHeaders" : { - "type" : "object", - "description" : "Custom headers that needs be sent while communicating with the service registry", - "additionalProperties" : { - "type" : "string" - } - }, - "discoveryInfo" : { - "$ref" : "#/definitions/ServiceRegistryCommunication" - }, - "registrationInfo" : { - "$ref" : "#/definitions/ServiceRegistryCommunication" - }, - "deRegistrationInfo" : { - "$ref" : "#/definitions/ServiceRegistryCommunication" - }, - "serviceRegistryType" : { - "type" : "string", - "description" : "It contains the information about the type of service registry", - "enum" : [ "SERVICE_CONSUL", "EUREKA" ] - }, - "ConnectionTimeout" : { - "type" : "integer", - "format" : "int32", - "description" : "The time interval (in seconds) after which a connection attempt times out while communicating with service registry" - }, - "readTimeout" : { - "type" : "integer", - "format" : "int32", - "description" : "The time interval (in seconds) after which a socket read attempt times out while communicating with service registry" - } - } - } ] - }, - "SignAndEncryptConfig" : { - "type" : "object", - "properties" : { - "keyStoreAlias" : { - "type" : "string", - "description" : "Specify the keystore that needs to be used by API Gateway while sending the request to the native API. A keystore is a repository of private key and its corresponding public certificate" - }, - "keyAlias" : { - "type" : "string", - "description" : "The key alias is the private key that is used sign the request sent to the native API" - }, - "truststoreAlias" : { - "type" : "string", - "description" : "The truststore to be used by API Gateway when sending the request to the native API. Truststore is a repository that holds all the trusted public certificates" - }, - "certificateAlias" : { - "type" : "string", - "description" : "Select the certificate from the truststore that is used to validate the request that is sent to the native API." - } - } - }, - "SimpleAlias" : { - "allOf" : [ { - "$ref" : "#/definitions/Alias" - }, { - "type" : "object", - "properties" : { - "value" : { - "type" : "string", - "description" : "value of the simple alias" - } - } - } ] - }, - "ThirdPartyOAuth2Alias" : { - "allOf" : [ { - "$ref" : "#/definitions/Alias" - }, { - "type" : "object", - "properties" : { - "providerName" : { - "type" : "string" - }, - "endpointDetails" : { - "$ref" : "#/definitions/OAuth2Endpoints" - }, - "authInfo" : { - "$ref" : "#/definitions/AuthInfo" - }, - "metadata" : { - "$ref" : "#/definitions/Metadata" - } - } - } ] - }, - "TokenAuth" : { - "allOf" : [ { - "$ref" : "#/definitions/AuthInfo" - }, { - "type" : "object", - "properties" : { - "tokenType" : { - "type" : "string", - "example" : "SSWS/Bearer", - "description" : "Type of token" - }, - "token" : { - "type" : "string", - "description" : "Corresponding token value" - } - } - } ] - }, - "TokenGeneratorConfig" : { - "type" : "object", - "properties" : { - "audience" : { - "type" : "string", - "description" : "Default audience value that needs to be added in the generated JWT" - }, - "expiry" : { - "type" : "integer", - "format" : "int64", - "description" : "Expiry interval of the JWT in minutes" - }, - "algorithm" : { - "type" : "string", - "description" : "Type of algorithm that needs to be used for signing the JWT", - "enum" : [ "RS256", "RS384", "RS512" ] - }, - "accessTokenExpInterval" : { - "type" : "integer", - "format" : "int32", - "description" : "Expiry interval in seconds for the generated access token " - }, - "authCodeExpInterval" : { - "type" : "integer", - "format" : "int32", - "description" : "Expiry interval in seconds for the generated authorization code in Authorization code grant type" - } - } - }, - "TransformationAlias" : { - "allOf" : [ { - "$ref" : "#/definitions/Alias" - }, { - "type" : "object", - "properties" : { - "fileName" : { - "type" : "string", - "description" : "the name of the file" - }, - "content" : { - "type" : "string", - "description" : "content of the file" - } - } - } ] - }, - "WebmethodsAlias" : { - "allOf" : [ { - "$ref" : "#/definitions/Alias" - }, { - "type" : "object", - "properties" : { - "serviceName" : { - "type" : "string", - "description" : "the webMethods Integration Server service name" - }, - "runAsUser" : { - "type" : "string", - "description" : "User in gateway under whom you want to invoke this service" - }, - "complyToISSpec" : { - "type" : "boolean", - "description" : "A boolean value wheather the given service complies to the IS sepcification" - } - } - } ] - }, - "WssCredentials" : { - "type" : "object", - "properties" : { - "userName" : { - "type" : "string", - "description" : "a username used to generate the WSS username token" - }, - "password" : { - "type" : "string", - "description" : "password for the username" - }, - "passwordType" : { - "type" : "string", - "description" : "type of password", - "enum" : [ "NONE", "TEXT", "DIGEST" ] - } - } - } - } -} \ No newline at end of file From 0baa0b7df09e63b5ac47f170aba62511e78fd91d Mon Sep 17 00:00:00 2001 From: Dhivakar Asokan <48990091+dhivakar-asokan@users.noreply.github.com> Date: Thu, 21 May 2020 20:29:58 +0530 Subject: [PATCH 03/22] Delete APIGatewayApplication.json --- apigatewayservices/APIGatewayApplication.json | 1378 ----------------- 1 file changed, 1378 deletions(-) delete mode 100644 apigatewayservices/APIGatewayApplication.json diff --git a/apigatewayservices/APIGatewayApplication.json b/apigatewayservices/APIGatewayApplication.json deleted file mode 100644 index f47ef53..0000000 --- a/apigatewayservices/APIGatewayApplication.json +++ /dev/null @@ -1,1378 +0,0 @@ -{ - "swagger" : "2.0", - "info" : { - "description" : "API Gateway Application Management Service allows you to manage the Applications in API Gateway. Any user with the 'Manage applications' functional privilege can manage the APIs in the API Gateway. By default, the users who are part of either API-Gateway-Providers or API-Gateway-Administrators groups will have this privilege.\n\n An application defines the precise identifiers by which messages from a particular consumer application is recognized at run time. The identifiers can be, for example, user name in HTTP headers, a range of IP addresses, such that API Gateway can identify or authenticate the consumers that are requesting an API.\n\n. The ability of API Gateway to relate a request to a specific consumer application enables it to:\n\n 1. Control access to an API at run time (that is, allow only authorized consumer applications to invoke an API).\n\n 2. Monitor an API for violations of a Service-Level Agreement (SLA) for a specified application.\n\n 3. Indicate the consumer application to which a logged transaction event belongs.\n\n\n\n An application has the following attributes for specifying the identifiers:\n\n 1. IP address, which specifies one or more IP addresses that identify requests from a particular consumer application. Example: 192.168.0.10\n\n This attribute is queried when the Identify and Authorize Application policy is configured to identify consumer applications by IP address.\n\n 2. JWT claims set, which specifies one or more claims that identify requests from a particular consumer application. The claims are a set of name-value pairs that provide sufficient information about the application. Example: sub = Administrator.\n\n This attribute is queried when the Identify and Authorize Application policy is configured to identify consumer applications by JSON Web Token (JWT).\n\n 3. Consumer certificate, which specifies the X.509 certificates that identify requests from a particular consumer.\n\n This attribute is queried when the Identify and authenticate consumer policy is configured to identify the consumer applications by a consumer certificate.\n\n 4. Identification token, which specifies the host names, user names or other distinguishing strings that identify requests from a particular consumer application.\n\n This attribute is queried when the Identify and authenticate consumer policy action is configured to identify consumer applications by host name, HTTP user name, and WSS user name.\n\n \n\n As an API provider or an API Gateway Administrator you can create and manage applications, and register applications with the APIs.\n\n These are the high level stages of managing and using an application:\n\n 1. API developers request the API Gateway administrators to create an application for access as per the required identification criteria.\n\n 2. API Gateway provider or administrator validates the request and creates a new application, there by provisioning the application specific access tokens (API access key and OAuth credentials).\n\n 3. API Developer, upon finding a suitable API, sends a request to API Gateway for consumption by providing the application details.\n\n 4. After validating the request, API Gateway provider or administrator associates the application with the API. Keys are generated for applications and not for every API that the application consumes. \n\n Note: The approval process, if any, is handled by the requesting application and not handled by API Gateway.\n\n 5. The API developer can then use the application with the proper identifier (such as the access key or identifier) to access the API. \n\n Strategies: \n\n A strategy is a way to authenticate the incoming request and provides multiple authentication mechanisms or multiple authorization servers for a single authentication scheme. API Gateway identifies the application and validates the token submitted through the strategy configured in the application. You can create multiple strategies authorized by an API for an application. For example, in case of OAuth authentication scheme, you want the application to support both OKTA and PINGFederate or OKTA with multiple tenants. This can be configured as OAuth strategy for the application.", - "version" : "10.7", - "title" : "API Gateway Application Management Service" - }, - "host" : "localhost:5555", - "basePath" : "/rest/apigateway", - "schemes" : [ "http" ], - "consumes" : [ "plain/text" ], - "produces" : [ "application/json" ], - "paths" : { - "/applications" : { - "get" : { - "description" : "The method retrieves a list of available applications in API Gateway.", - "operationId" : "getApplications", - "produces" : [ "application/json" ], - "parameters" : [ ], - "responses" : { - "200" : { - "description" : "This status code indicates that a list of the available applications is retrieved successfully.", - "examples" : { - "application/json" : "{\n \"applications\": [\n {\n \"name\": \"TestSampleApp\",\n \"description\": null,\n \"contactEmails\": [],\n \"identifiers\": [\n {\n \"id\": \"3ce6f4df-e773-4fdb-bed3-3d63b5cb520c\",\n \"name\": \"Username\",\n \"key\": \"httpBasicAuth\",\n \"value\": [\n \"Administrator\"\n ]\n }\n ],\n \"siteURLs\": [],\n \"jsOrigins\": [],\n \"authStrategyIds\": [\n \"81df9682-6a28-4ebc-92fd-2c486d3f75c2\"\n ],\n \"version\": \"1.0\",\n \"id\": \"803b7f16-45c6-4b1c-be26-4da053d40640\",\n \"created\": \"2018-12-04 05:27:56 GMT\",\n \"lastupdated\": null,\n \"owner\": \"Administrator\",\n \"consumingAPIs\": [],\n \"accessTokens\": {\n \"apiAccessKey_credentials\": {\n \"apiAccessKey\": \"f293cbb5cb0f1367ecc55b4c5b1717dad4073f77d2bde869cf8ee0162cc08f38\",\n \"expirationInterval\": null,\n \"expirationDate\": null,\n \"expired\": false\n },\n \"oauth_credentials\": {\n \"clientID\": null,\n \"clientSecret\": null,\n \"clientName\": null,\n \"scopes\": null,\n \"token_lifetime\": null,\n \"token_refresh_limit\": null,\n \"redirect_uris\": [],\n \"Type\": \"confidential\"\n }\n }\n ,\r\n\t\t\t\"teams\": [\r\n\t\t\t\t{\r\n\t\t\t\t\t\"id\": \"Administrators\",\r\n\t\t\t\t\t\"name\": \"Administrators\",\r\n\t\t\t\t\t\"canDelete\": \"false\"\r\n\t\t\t\t},\r\n\t\t\t\t{\r\n\t\t\t\t\t\"id\": \"Default\",\r\n\t\t\t\t\t\"name\": \"Default\",\r\n\t\t\t\t\t\"canDelete\": \"true\"\r\n\t\t\t\t}\r\n\t\t\t] }\n ]\n}" - }, - "schema" : { - "$ref" : "#/definitions/Application" - } - }, - "401" : { - "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." - } - }, - "security" : [ { - "Basic" : [ ] - } ] - }, - "post" : { - "description" : "The method creates an application in API Gateway.", - "operationId" : "createApplication", - "consumes" : [ "application/json" ], - "produces" : [ "application/json" ], - "parameters" : [ { - "in" : "body", - "name" : "body", - "description" : "This parameter describes the request payload of an application that is to be created in API Gateway.", - "required" : true, - "schema" : { - "$ref" : "#/definitions/Application" - }, - "x-examples" : { - "application/json" : "{\"id\":\"\",\"name\":\"TestApp\",\"description\":null,\"version\":\"1.0\",\"contactEmails\":[],\"siteURLs\":[],\"identifiers\":[{\"value\":[\"admin\"],\"name\":\"Username\",\"key\":\"httpBasicAuth\"}],\"consumingAPIs\":[],\"owner\":null,\r\n\t\"teams\": [\r\n\t\t{\r\n\t\t\t\"id\": \"Default\"\r\n\t\t}\r\n\t]\r\n}" - } - } ], - "responses" : { - "200" : { - "description" : "This status code indicates that the application has been successfully created in API Gateway.", - "examples" : { - "application/json" : "{\n \"name\": \"TestApp\",\n \"description\": null,\n \"contactEmails\": [],\n \"identifiers\": [\n {\n \"id\": \"820332c8-7467-4340-bef8-dae595c69f7b\",\n \"name\": \"Username\",\n \"key\": \"httpBasicAuth\",\n \"value\": [\n \"admin\"\n ]\n }\n ],\n \"siteURLs\": [],\n \"jsOrigins\": [],\n \"authStrategyIds\": [],\n \"version\": \"1.0\",\n \"id\": \"79251257-1ea5-4df7-a8bf-a345ea835592\",\n \"created\": \"2018-12-04 05:33:20 GMT\",\n \"lastupdated\": null,\n \"owner\": \"Administrator\",\n \"consumingAPIs\": [],\n \"accessTokens\": {\n \"apiAccessKey_credentials\": {\n \"apiAccessKey\": \"dad584e3b45f90db5baab4d52a24c2ff9201e5a5e48eaea0740bb4acf19fa937\",\n \"expirationInterval\": null,\n \"expirationDate\": null,\n \"expired\": false\n },\n \"oauth_credentials\": {\n \"clientID\": null,\n \"clientSecret\": null,\n \"clientName\": null,\n \"scopes\": null,\n \"token_lifetime\": null,\n \"token_refresh_limit\": null,\n \"redirect_uris\": [],\n \"Type\": \"confidential\"\n }\n }\n}" - }, - "schema" : { - "$ref" : "#/definitions/Application" - } - }, - "400" : { - "description" : "This status code indicates that an application with the given ID already exists in API Gateway" - }, - "401" : { - "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." - } - }, - "security" : [ { - "Basic" : [ ] - } ] - }, - "delete" : { - "description" : "The method deletes the specified application in API Gateway.", - "operationId" : "deleteApplications", - "produces" : [ "application/json" ], - "parameters" : [ { - "name" : "ids", - "in" : "query", - "description" : "This parameter specifies the ID of an application that is to be deleted in API Gateway.", - "required" : false, - "type" : "string" - } ], - "responses" : { - "401" : { - "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." - }, - "204" : { - "description" : "This status code indicates that the specified application has been successfully deleted from API Gateway." - }, - "404" : { - "description" : "This status code indicates that an application with the given ID could not be found in API Gateway." - } - }, - "security" : [ { - "Basic" : [ ] - } ] - } - }, - "/applications/{applicationId}/apis" : { - "get" : { - "description" : "The method retrieves a list of registered APIs for the specified application in API Gateway.", - "operationId" : "getRegisteredApis", - "produces" : [ "application/json" ], - "parameters" : [ { - "name" : "applicationId", - "in" : "path", - "description" : "This parameter specifies the ID of an application whose registered APIs are to be retrieved in API Gateway.", - "required" : true, - "type" : "string" - } ], - "responses" : { - "200" : { - "description" : "This status code indicates that a list of registered APIs for the application is retrieved successfully.", - "examples" : { - "application/json" : "{\n \"apiIDs\": [\n \"2aa651f4-2696-425b-96c4-440ad78b0305\"\n ]\n}" - } - }, - "404" : { - "description" : "This status code indicates that an application with the given ID could not be found in API Gateway." - }, - "401" : { - "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." - } - }, - "security" : [ { - "Basic" : [ ] - } ] - }, - "post" : { - "description" : "This HTTP request registers the APIs with the specified application in API Gateway.", - "operationId" : "registerApis", - "consumes" : [ "application/json" ], - "produces" : [ "application/json" ], - "parameters" : [ { - "in" : "body", - "name" : "body", - "description" : "This parameter specifies the IDs of the APIs for registering in an application in API Gateway.", - "required" : true, - "schema" : { - "type" : "array", - "items" : { - "type" : "string" - } - }, - "x-examples" : { - "application/json" : "{\"apiIDs\":[\"3de85431-d45b-418d-b5aa-0be5c3b5714d\"]}" - } - }, { - "name" : "applicationId", - "in" : "path", - "description" : "This parameter specifies the ID of an application for registering APIs in API Gateway.", - "required" : true, - "type" : "string" - } ], - "responses" : { - "200" : { - "description" : "This status code indicates that the given APIs have been successfully registered with the specified application in API Gateway.", - "examples" : { - "application/json" : "{}" - } - }, - "400" : { - "description" : "This status code indicates that an application with the given ID could not be found in API Gateway" - }, - "401" : { - "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." - } - }, - "security" : [ { - "Basic" : [ ] - } ] - }, - "put" : { - "description" : "This HTTP request updates the registered APIs of the specified application.", - "operationId" : "updateRegisteredApis", - "consumes" : [ "application/json" ], - "produces" : [ "application/json" ], - "parameters" : [ { - "in" : "body", - "name" : "body", - "description" : "This parameter specifies the ID of a registered API that is to be updated in API Gateway.", - "required" : true, - "schema" : { - "type" : "array", - "items" : { - "type" : "string" - } - }, - "x-examples" : { - "application/json" : "{\"apiIDs\":[\"3de85431-d45b-418d-b5aa-0be5c3b5714d\"]}" - } - }, { - "name" : "applicationId", - "in" : "path", - "description" : "This parameter specifies the ID of an application for updating the details of the registered APIs in API Gateway.", - "required" : true, - "type" : "string" - } ], - "responses" : { - "200" : { - "description" : "This status code indicates that the registered API has been successfully updated in API Gateway." - }, - "400" : { - "description" : "This status code indicates that an application with the given ID could not be found in API Gateway." - }, - "401" : { - "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." - } - }, - "security" : [ { - "Basic" : [ ] - } ] - }, - "delete" : { - "description" : "The method unregisters the APIs from the specified application in API Gateway.", - "operationId" : "unregisterApis", - "produces" : [ "application/json" ], - "parameters" : [ { - "name" : "apiIDs", - "in" : "query", - "description" : "This parameter specifies the IDs of APIs that are to be unregistered from the specified application in API Gateway.", - "required" : true, - "type" : "string" - }, { - "name" : "applicationId", - "in" : "path", - "description" : "This parameter specifies the ID of an application for unregistering the associated APIs in API Gateway.", - "required" : true, - "type" : "string" - } ], - "responses" : { - "401" : { - "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." - }, - "204" : { - "description" : "This status code indicates that APIs are successfully unregistered from the specified application in API Gateway." - }, - "404" : { - "description" : "This status code indicates that an application with the given ID could not be found in API Gateway." - } - }, - "security" : [ { - "Basic" : [ ] - } ] - } - }, - "/applications/{applicationId}/accessTokens" : { - "get" : { - "description" : "The method retrieves a map of access token endpoints for all the authorization servers configured", - "operationId" : "getAccessTokenEndpoints", - "produces" : [ "application/json" ], - "parameters" : [ { - "name" : "applicationId", - "in" : "path", - "description" : "This parameter specifies the ID of an application whose access token endpoints are to be retrieved from API Gateway.", - "required" : true, - "type" : "string" - } ], - "responses" : { - "200" : { - "description" : "This status code indicates that a list of access token endpoints for the application are retrieved successfully.", - "examples" : { - "application/json" : "{\n \"local\": {\n \"uris\": {\n \"authorizeUrl\": \"http://vm:5555/invoke/pub.apigateway.oauth2/authorize\",\n \"accessTokenUrl\": \"http://vm:5555/invoke/pub.apigateway.oauth2/getAccessToken\",\n \"refreshTokenUrl\": \"http://vm:5555/invoke/pub.oauth/refreshAccessToken\"\n }\n }\n}" - } - }, - "404" : { - "description" : "This status code indicates that an application with the given ID could not be found in API Gateway." - }, - "401" : { - "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." - } - }, - "security" : [ { - "Basic" : [ ] - } ] - }, - "post" : { - "description" : "The method regenarates the access tokens of an application", - "operationId" : "regenerateAccessTokens", - "consumes" : [ "application/json" ], - "produces" : [ "application/json" ], - "parameters" : [ { - "name" : "applicationId", - "in" : "path", - "description" : "This parameter specifies the ID of an application for generating the access Tokens in API Gateway.", - "required" : true, - "type" : "string" - }, { - "in" : "body", - "name" : "body", - "description" : "This parameter specifies the type of token to be regenerated.", - "required" : true, - "schema" : { - "type" : "string" - } - } ], - "responses" : { - "200" : { - "description" : "This status code indicates that the access tokens are successfully regenerated for the application in API Gateway." - }, - "400" : { - "description" : "This status code indicates that an application with the given ID could not be found in API Gateway" - }, - "401" : { - "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." - } - }, - "security" : [ { - "Basic" : [ ] - } ] - }, - "put" : { - "operationId" : "updateAccessTokens", - "consumes" : [ "application/json" ], - "produces" : [ "application/json" ], - "parameters" : [ { - "name" : "applicationId", - "in" : "path", - "description" : "This parameter specifies the ID of an application for updating the access tokens.", - "required" : true, - "type" : "string" - } ], - "responses" : { - "200" : { - "description" : "This status code indicates access tokens are successfully updated in API Gateway." - }, - "400" : { - "description" : "This status code indicates that an application with the given ID could not be found in API Gateway." - }, - "401" : { - "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." - } - }, - "security" : [ { - "Basic" : [ ] - } ] - }, - "delete" : { - "description" : "The method clears the access tokens from the specified application in API Gateway.", - "operationId" : "clearAccessTokens", - "produces" : [ "application/json" ], - "parameters" : [ { - "name" : "applicationId", - "in" : "path", - "description" : "This parameter specifies the ID of an application for which the access tokesn needs to cleared", - "required" : true, - "type" : "string" - } ], - "responses" : { - "401" : { - "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." - }, - "204" : { - "description" : "This status code indicates that APIs are successfully unregistered from the specified application in API Gateway." - }, - "404" : { - "description" : "This status code indicates that an application with the given ID could not be found in API Gateway." - } - }, - "security" : [ { - "Basic" : [ ] - } ] - } - }, - "/applications/{applicationId}" : { - "get" : { - "description" : "The method retrieves the details of a specified application in API Gateway", - "operationId" : "getApplication", - "produces" : [ "application/json" ], - "parameters" : [ { - "name" : "applicationId", - "in" : "path", - "description" : "This parameter specifies the ID of an application whose details are to be retrieved in API Gateway.", - "required" : true, - "type" : "string" - } ], - "responses" : { - "200" : { - "description" : "This status code indicates that the details of the specified application are retrieved successfully.", - "examples" : { - "application/json" : "{\n \"applications\": [\n {\n \"name\": \"TestApp\",\n \"description\": null,\n \"contactEmails\": [],\n \"identifiers\": [\n {\n \"id\": \"820332c8-7467-4340-bef8-dae595c69f7b\",\n \"name\": \"Username\",\n \"key\": \"httpBasicAuth\",\n \"value\": [\n \"admin\"\n ]\n }\n ],\n \"siteURLs\": [],\n \"jsOrigins\": [],\n \"authStrategyIds\": [],\n \"version\": \"1.0\",\n \"id\": \"79251257-1ea5-4df7-a8bf-a345ea835592\",\n \"created\": \"2018-12-04 05:33:20 GMT\",\n \"lastupdated\": null,\n \"owner\": \"Administrator\",\n \"consumingAPIs\": [],\n \"accessTokens\": {\n \"apiAccessKey_credentials\": {\n \"apiAccessKey\": \"eb3fcb16-89bd-4d0b-b45b-c1257686e4d6\",\n \"expirationInterval\": null,\n \"expirationDate\": null,\n \"expired\": false\n },\n \"oauth_credentials\": {\n \"clientID\": null,\n \"clientSecret\": null,\n \"clientName\": null,\n \"scopes\": null,\n \"token_lifetime\": null,\n \"token_refresh_limit\": null,\n \"redirect_uris\": [],\n \"Type\": \"confidential\"\n }\n }\n }\n ]\n}" - }, - "schema" : { - "$ref" : "#/definitions/Application" - } - }, - "404" : { - "description" : "This status code indicates that an application with the given ID could not be found in API Gateway." - }, - "401" : { - "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." - } - }, - "security" : [ { - "Basic" : [ ] - } ] - }, - "put" : { - "description" : "This HTTP request updates a specified application in API Gateway.", - "operationId" : "updateApplication", - "consumes" : [ "application/json" ], - "produces" : [ "application/json" ], - "parameters" : [ { - "in" : "body", - "name" : "body", - "description" : "This parameter describes the request payload of an application that is to be updated in API Gateway.", - "required" : true, - "schema" : { - "$ref" : "#/definitions/Application" - }, - "x-examples" : { - "application/json" : "{\"id\":\"221aa46e-501d-4ae8-911f-34458e062e63\",\"name\":\"TestApp\",\"description\":null,\"version\":\"1.0\",\"contactEmails\":[],\"siteURLs\":[],\"identifiers\":[{\"value\":[\"admin\"],\"name\":\"Username\",\"key\":\"httpBasicAuth\"}],\"consumingAPIs\":[],\"owner\":null,\"accessTokens\":{\"apiAccessKey_credentials\":{\"apiAccessKey\":\"a6e43495-f981-43da-8f6a-ff8cb5689864\",\"expirationInterval\":null},\"oauth_credentials\":{\"Type\":\"confidential\",\"clientID\":\"a8271b2d-d903-4869-b571-c21088ac4b8d\",\"clientSecret\":\"13e2b1ca-befb-4fe3-909e-ed9fdb0a6748\",\"clientName\":\"TestApp-a1f3b232-4018-44c9-a086-77804fd55dd9\",\"scopes\":[\"dd5b733f-b31e-4f1d-86be-97364865c70b\",\"3de85431-d45b-418d-b5aa-0be5c3b5714d\"],\"redirect_uris\":[\"https://placeholder_redirect_uri\"],\"token_lifetime\":\"3600\",\"token_refresh_limit\":\"100\",\"accessTokenRequestURI\":null}}}" - } - }, { - "name" : "applicationId", - "in" : "path", - "description" : "This parameter specifies the ID of an application that is to be updated in API Gateway.", - "required" : true, - "type" : "string" - } ], - "responses" : { - "200" : { - "description" : "This status code indicates that the specified application has been successfully updated in API Gateway.", - "schema" : { - "$ref" : "#/definitions/Application" - } - }, - "400" : { - "description" : "This status code indicates that the specified application could not be updated" - }, - "401" : { - "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." - } - }, - "security" : [ { - "Basic" : [ ] - } ] - }, - "patch" : { - "description" : "This HTTP PATCH request suspends the specified application in API Gateway.", - "operationId" : "patchApplication", - "consumes" : [ "application/json" ], - "produces" : [ "application/json" ], - "parameters" : [ { - "in" : "body", - "name" : "body", - "description" : "This parameter describes the request payload of an application that is to be updated in API Gateway.", - "required" : true, - "schema" : { - "$ref" : "#/definitions/Application" - }, - "x-examples" : { - "application/json" : "{\"isSuspended\":\"true\"}" - } - }, { - "name" : "applicationId", - "in" : "path", - "description" : "This parameter specifies the ID of an application that is to be updated in API Gateway.", - "required" : true, - "type" : "string" - } ], - "responses" : { - "200" : { - "description" : "This status code indicates that the specified application has been successfully updated in API Gateway.", - "schema" : { - "$ref" : "#/definitions/Application" - } - }, - "400" : { - "description" : "This status code indicates that the specified application could not be updated" - }, - "401" : { - "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." - } - }, - "security" : [ { - "Basic" : [ ] - } ] - } - }, - "/applications/_search" : { - "get" : { - "description" : "The method retrieves a list of available applications in API Gateway based on the search query parameters.", - "operationId" : "searchApplications", - "produces" : [ "application/json" ], - "parameters" : [ { - "name" : "ids", - "in" : "query", - "description" : "This parameter specifies the IDs of applications whose details are to be retrieved in API Gateway.", - "required" : false, - "type" : "string" - }, { - "name" : "idsToExclude", - "in" : "query", - "description" : "This parameter specifies the IDs of applications whose details are to be removed while retrieving other applications in API Gateway.", - "required" : false, - "type" : "string" - }, { - "name" : "from", - "in" : "query", - "description" : "This parameter specifies the last updated date in milliseconds. The applications whose last updated date greater than or equal to this are to be retrieved in API Gateway.", - "required" : false, - "type" : "number" - } ], - "responses" : { - "200" : { - "description" : "This status code indicates that the details of the specified applications are retrieved successfully.", - "schema" : { - "$ref" : "#/definitions/Application" - } - }, - "404" : { - "description" : "This status code indicates that an application with the given search parameters could not be found in API Gateway." - }, - "401" : { - "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." - } - }, - "security" : [ { - "Basic" : [ ] - } ] - } - }, - "/strategies" : { - "get" : { - "description" : "The method retrieves a list of all strategies in API Gateway.", - "operationId" : "getStrategies", - "produces" : [ "application/json" ], - "parameters" : [ ], - "responses" : { - "200" : { - "description" : "This status code indicates that the list of strategies is successfully retrieved.", - "examples" : { - "application/json" : "{\n \"strategies\": [\n {\n \"id\": \"e1f151e1-3210-4283-992b-b3f1d1cf6a92\",\n \"type\": \"OAUTH2\",\n \"authServerAlias\": \"local\",\n \"name\": \"test-oauth2-strategy\",\n \"description\": \"\",\n \"clientId\": \"e65b0fe2-d73d-4ea7-a92a-20c949e08235\",\n \"dcrConfig\": {\n \"allowedGrantTypes\": [\n \"authorization_code\",\n \"password\"\n ],\n \"applicationType\": \"WEB\",\n \"clientType\": \"PUBLIC\",\n \"clientName\": \"test-oauth2-strategy\",\n \"clientVersion\": \"1.0\",\n \"expirationInterval\": \"3600\",\n \"refreshCount\": \"0\",\n \"redirectUris\": [\n \"https://redirect.uri\"\n ]\n },\n \"clientRegistration\": {\n \"clientId\": \"e65b0fe2-d73d-4ea7-a92a-20c949e08235\",\n \"name\": \"test-oauth2-strategy\",\n \"version\": \"1.0\",\n \"type\": \"public\",\n \"tokenLifetime\": 3600,\n \"tokenRefreshLimit\": 0,\n \"clientSecret\": \"f3d2edb1-0bf4-47a8-9e34-775c1a943e70\",\n \"enabled\": true,\n \"redirectUris\": [\n \"https://redirect.uri\"\n ],\n \"clScopes\": [],\n \"authCodeAllowed\": true,\n \"implicitAllowed\": false,\n \"clientCredentialsAllowed\": false,\n \"resourceOwnerAllowed\": true\n }\n }\n ]\n}" - }, - "schema" : { - "$ref" : "#/definitions/OneOfStrategyModel" - } - }, - "401" : { - "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." - } - }, - "security" : [ { - "Basic" : [ ] - } ] - }, - "post" : { - "description" : "The method creates a strategy in API Gateway. The API request body must contain the payload for the strategy", - "operationId" : "createStrategy", - "consumes" : [ "application/json" ], - "produces" : [ "application/json" ], - "parameters" : [ { - "in" : "body", - "name" : "body", - "description" : "This parameter describes the request payload of a strategy that is to be created in API Gateway.", - "required" : true, - "schema" : { - "$ref" : "#/definitions/OneOfStrategyModel" - }, - "x-examples" : { - "application/json" : "{\n\"name\": \"Test\",\n\"description\": \"\",\n\"authServerAlias\": \"local\",\n\"type\": \"OAUTH2\",\n\"dcrConfig\": {\n\"allowedGrantTypes\": [\"authorization_code\",\n\"password\",\n\"implicit\"],\n\"scopes\": [],\n\"redirectUris\": [\"http://vm:5555/redirect\"],\n\"authServer\": \"local\",\n\"applicationType\": \"WEB\",\n\"clientType\": \"PUBLIC\",\n\"expirationInterval\": 3600,\n\"refreshCount\": \"0\"\n}\n} " - } - } ], - "responses" : { - "200" : { - "description" : "The method creates a strategy in API Gateway. The API request body must contain the payload for the strategy", - "examples" : { - "application/json" : "{\n \"strategy\": {\n \"id\": \"370f88ca-205e-45df-8e16-998088f32dc2\",\n \"type\": \"OAUTH2\",\n \"authServerAlias\": \"local\",\n \"name\": \"Test\",\n \"description\": \"\",\n \"clientId\": \"2b54de1c-a8fa-4965-a832-cacf6b656012\",\n \"dcrConfig\": {\n \"allowedGrantTypes\": [\n \"authorization_code\",\n \"password\",\n \"implicit\"\n ],\n \"applicationType\": \"WEB\",\n \"clientType\": \"PUBLIC\",\n \"clientName\": \"Test\",\n \"clientVersion\": \"1.0\",\n \"expirationInterval\": \"3600\",\n \"refreshCount\": \"0\",\n \"redirectUris\": [\n \"http://vm:5555/redirect\"\n ]\n },\n \"clientRegistration\": {\n \"clientId\": \"2b54de1c-a8fa-4965-a832-cacf6b656012\",\n \"name\": \"Test\",\n \"version\": \"1.0\",\n \"type\": \"public\",\n \"tokenLifetime\": 3600,\n \"tokenRefreshLimit\": 0,\n \"clientSecret\": \"6a3d98c3-e5b0-47fc-9acf-b454401cd87d\",\n \"enabled\": true,\n \"redirectUris\": [\n \"http://vm:5555/redirect\"\n ],\n \"clScopes\": [],\n \"authCodeAllowed\": true,\n \"implicitAllowed\": true,\n \"clientCredentialsAllowed\": false,\n \"resourceOwnerAllowed\": true\n }\n }\n}" - }, - "schema" : { - "$ref" : "#/definitions/OneOfStrategyModel" - } - }, - "400" : { - "description" : "This status code indicates that a strategy with the given ID already exists in API Gateway" - }, - "401" : { - "description" : "This status code indicates that either the user didn't provide right credentials or the user doesn't have required privileges to access this API." - } - }, - "security" : [ { - "Basic" : [ ] - } ] - }, - "delete" : { - "description" : "The method deletes the specified strategy in API Gateway.", - "operationId" : "deleteStrategy", - "produces" : [ "application/json" ], - "parameters" : [ { - "name" : "ids", - "in" : "query", - "description" : "This parameter specifies the ID of a strategy that is to be deleted in API Gateway.", - "required" : false, - "type" : "string" - } ], - "responses" : { - "401" : { - "description" : "This status code indicates that either the user didn't provide right credentials or the user doesn't have required privileges to access this API." - }, - "204" : { - "description" : "This status code indicates that the specified strategy has been successfully deleted from API Gateway." - }, - "404" : { - "description" : "This status code indicates that a strategy with the given ID could not be found in API Gateway." - } - }, - "security" : [ { - "Basic" : [ ] - } ] - } - }, - "/strategies/{strategyId}" : { - "get" : { - "description" : "The method retrieves the details of a specified strategy in API Gateway", - "operationId" : "getStrategy", - "produces" : [ "application/json" ], - "parameters" : [ { - "name" : "strategyId", - "in" : "path", - "description" : "This parameter specifies the ID of a strategy whose details are to be retrieved in API Gateway.", - "required" : true, - "type" : "string" - } ], - "responses" : { - "200" : { - "description" : "This status code indicates that the details of the specified strategy are retrieved successfully.", - "examples" : { - "application/json" : "{\n \"strategy\": {\n \"id\": \"a2641013-701c-420d-9eba-30cd9da1f0f5\",\n \"type\": \"OAUTH2\",\n \"authServerAlias\": \"local\",\n \"name\": \"testapp-$sys-default-oauth\",\n \"clientId\": \"5b5e2fee-b786-4abe-9fd4-584c265d260a\",\n \"dcrConfig\": {\n \"allowedGrantTypes\": [\n \"implicit\",\n \"client_credentials\",\n \"authorization_code\"\n ],\n \"clientType\": \"CONFIDENTIAL\",\n \"clientName\": \"4425af88-a80d-4f6c-b6e0-84008c720889\",\n \"clientVersion\": \"1.0\",\n \"expirationInterval\": \"3600\",\n \"redirectUris\": []\n },\n \"clientRegistration\": {\n \"clientId\": \"5b5e2fee-b786-4abe-9fd4-584c265d260a\",\n \"name\": \"4425af88-a80d-4f6c-b6e0-84008c720889\",\n \"version\": \"1.0\",\n \"type\": \"confidential\",\n \"tokenLifetime\": 3600,\n \"tokenRefreshLimit\": 0,\n \"clientSecret\": \"1bd1bcd0-7eb2-4aa9-a50a-41c038ad92b2\",\n \"enabled\": true,\n \"redirectUris\": [\n \"https://placeholder_redirect_uri\"\n ],\n \"clScopes\": [],\n \"authCodeAllowed\": true,\n \"implicitAllowed\": true,\n \"clientCredentialsAllowed\": true,\n \"resourceOwnerAllowed\": false\n }\n }\n}" - }, - "schema" : { - "$ref" : "#/definitions/OneOfStrategyModel" - } - }, - "404" : { - "description" : "This status code indicates that a strategy with the given ID could not be found in API Gateway." - }, - "401" : { - "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." - } - }, - "security" : [ { - "Basic" : [ ] - } ] - }, - "put" : { - "description" : "This REST operation is used to update a strategy", - "operationId" : "updateStrategy", - "consumes" : [ "application/json" ], - "produces" : [ "application/json" ], - "parameters" : [ { - "in" : "body", - "name" : "body", - "description" : "This parameter describes the request payload of a strategy that is to be updated in API Gateway.", - "required" : true, - "schema" : { - "$ref" : "#/definitions/OneOfStrategyModel" - }, - "x-examples" : { - "application/json" : " {\n \"type\": \"OAUTH2\",\n \"authServerAlias\": \"local\",\n \"name\": \"testapp-$sys-default-oauth\",\n \"clientId\": \"5b5e2fee-b786-4abe-9fd4-584c265d260a\",\n \"dcrConfig\": {\n \"allowedGrantTypes\": [\n \"implicit\",\n \"client_credentials\",\n \"authorization_code\"\n ],\n \"clientType\": \"CONFIDENTIAL\",\n \"clientName\": \"4425af88-a80d-4f6c-b6e0-84008c720889\",\n \"clientVersion\": \"1.0\",\n \"expirationInterval\": \"3600\",\n \"redirectUris\": []\n },\n \"clientRegistration\": {\n \"clientId\": \"5b5e2fee-b786-4abe-9fd4-584c265d260a\",\n \"name\": \"4425af88-a80d-4f6c-b6e0-84008c720889\",\n \"version\": \"1.0\",\n \"type\": \"confidential\",\n \"tokenLifetime\": 3600,\n \"tokenRefreshLimit\": 0,\n \"clientSecret\": \"1bd1bcd0-7eb2-4aa9-a50a-41c038ad92b2\",\n \"enabled\": true,\n \"redirectUris\": [\n \"https://placeholder_redirect_uri\"\n ],\n \"clScopes\": [],\n \"authCodeAllowed\": true,\n \"implicitAllowed\": true,\n \"clientCredentialsAllowed\": true,\n \"resourceOwnerAllowed\": false\n }\n }\n" - } - }, { - "name" : "strategyId", - "in" : "path", - "description" : "This parameter specifies the ID of a strategy that is to be updated in API Gateway.", - "required" : true, - "type" : "string" - } ], - "responses" : { - "200" : { - "description" : "This status code indicates that the specified strategy has been successfully updated in API Gateway.", - "examples" : { - "application/json" : "{\n \"strategy\": {\n \"id\": \"a2641013-701c-420d-9eba-30cd9da1f0f5\",\n \"type\": \"OAUTH2\",\n \"authServerAlias\": \"local\",\n \"name\": \"testapp-$sys-default-oauth\",\n \"clientId\": \"5b5e2fee-b786-4abe-9fd4-584c265d260a\",\n \"dcrConfig\": {\n \"allowedGrantTypes\": [\n \"implicit\",\n \"client_credentials\",\n \"authorization_code\"\n ],\n \"clientType\": \"CONFIDENTIAL\",\n \"clientName\": \"4425af88-a80d-4f6c-b6e0-84008c720889\",\n \"clientVersion\": \"1.0\",\n \"expirationInterval\": \"3600\",\n \"redirectUris\": []\n },\n \"clientRegistration\": {\n \"clientId\": \"5b5e2fee-b786-4abe-9fd4-584c265d260a\",\n \"name\": \"4425af88-a80d-4f6c-b6e0-84008c720889\",\n \"version\": \"1.0\",\n \"type\": \"confidential\",\n \"tokenLifetime\": 3600,\n \"tokenRefreshLimit\": 0,\n \"clientSecret\": \"1bd1bcd0-7eb2-4aa9-a50a-41c038ad92b2\",\n \"enabled\": true,\n \"redirectUris\": [],\n \"clScopes\": [],\n \"authCodeAllowed\": true,\n \"implicitAllowed\": true,\n \"clientCredentialsAllowed\": true,\n \"resourceOwnerAllowed\": false\n }\n }\n}" - }, - "schema" : { - "$ref" : "#/definitions/OneOfStrategyModel" - } - }, - "400" : { - "description" : "This status code indicates that the specified strategy could not be updated" - }, - "401" : { - "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." - } - }, - "security" : [ { - "Basic" : [ ] - } ] - } - }, - "/strategies/{strategyId}/refreshCredentials" : { - "put" : { - "description" : "The method refreshes the credentials of a strategy in API Gateway.", - "operationId" : "refreshCredentials", - "consumes" : [ "application/json" ], - "produces" : [ "application/json" ], - "parameters" : [ { - "name" : "strategyId", - "in" : "path", - "description" : "This parameter specifies the ID of a strategy that is to be updated in API Gateway.", - "required" : true, - "type" : "string" - } ], - "responses" : { - "200" : { - "description" : "This status code indicates that the specified strategy has been successfully updated in API Gateway.", - "schema" : { - "$ref" : "#/definitions/OneOfStrategyModel" - } - }, - "400" : { - "description" : "This status code indicates that the specified strategy could not be updated" - }, - "401" : { - "description" : "This status code indicates that either the user didn't provide right credentials or the user doesn't have required privileges to access this API." - } - }, - "security" : [ { - "Basic" : [ ] - } ] - } - } - }, - "securityDefinitions" : { - "Basic" : { - "description" : "API Gateway Administrator and API Gateway provider", - "type" : "basic" - } - }, - "definitions" : { - "APIAccessKey" : { - "type" : "object", - "properties" : { - "apiAccessKey" : { - "type" : "string", - "description" : "API access key" - }, - "expirationInterval" : { - "type" : "string", - "description" : "expiration interval of the api key" - }, - "expirationDate" : { - "type" : "string", - "description" : "expiration date of the api key" - } - } - }, - "Application" : { - "type" : "object", - "properties" : { - "applicationID" : { - "type" : "string", - "description" : "unique identifier of an application" - }, - "name" : { - "type" : "string", - "description" : "name of the application" - }, - "description" : { - "type" : "string", - "description" : "description of the application" - }, - "owner" : { - "type" : "string", - "description" : "owner of the application" - }, - "identifiers" : { - "type" : "array", - "description" : "list of all application identifiers", - "items" : { - "$ref" : "#/definitions/ApplicationIdentifier" - } - }, - "contactEmails" : { - "type" : "array", - "description" : "list of email contacts", - "items" : { - "type" : "string" - } - }, - "iconbyteArray" : { - "type" : "string", - "description" : "application icon byte array" - }, - "accessTokens" : { - "$ref" : "#/definitions/ApplicationToken" - }, - "creationDate" : { - "type" : "string", - "description" : "application creation time" - }, - "lastModified" : { - "type" : "string", - "description" : "last modified time of the application" - }, - "lastUpdated" : { - "type" : "integer", - "format" : "int64", - "description" : "last modified time of the application in milliseconds" - }, - "siteURLs" : { - "type" : "array", - "description" : "list of all site URLs", - "items" : { - "type" : "string" - } - }, - "jsOrigins" : { - "type" : "array", - "description" : "list of all javascript origins", - "items" : { - "type" : "string" - } - }, - "version" : { - "type" : "string" - }, - "isSuspended" : { - "type" : "boolean", - "description" : "holds the suspended state of an application" - }, - "authStrategyIds" : { - "type" : "array", - "uniqueItems" : true, - "items" : { - "type" : "string" - } - }, - "subscription" : { - "type" : "boolean" - } - } - }, - "ApplicationIdentifier" : { - "type" : "object", - "properties" : { - "id" : { - "type" : "string", - "description" : "unique identifier of the application identifier" - }, - "key" : { - "type" : "string", - "description" : "identifier type" - }, - "name" : { - "type" : "string", - "description" : "name of the identifier" - }, - "value" : { - "type" : "array", - "description" : "list of identifier values", - "items" : { - "type" : "string" - } - } - } - }, - "ApplicationToken" : { - "type" : "object", - "properties" : { - "apiAccessKey" : { - "$ref" : "#/definitions/APIAccessKey" - }, - "oauth2Token" : { - "$ref" : "#/definitions/OAuth2Token" - } - } - }, - "OAuth2Token" : { - "type" : "object", - "properties" : { - "type" : { - "type" : "string", - "description" : "type of the oauth2 client" - }, - "clientId" : { - "type" : "string", - "description" : "unique identifier of the oauth2 client" - }, - "clientSecret" : { - "type" : "string", - "description" : "the client secret" - }, - "clientName" : { - "type" : "string", - "description" : "the name of the client" - }, - "scopes" : { - "type" : "array", - "description" : "the scopes associated with the client", - "items" : { - "type" : "string" - } - }, - "expirationInterval" : { - "type" : "string", - "description" : "the expiration interval" - }, - "refreshCount" : { - "type" : "string", - "description" : "number of times an access token can be refreshed" - }, - "redirectUris" : { - "type" : "array", - "description" : "list of redirect uris", - "items" : { - "type" : "string" - } - } - } - }, - "ClientRegistration" : { - "type" : "object", - "properties" : { - "clientId" : { - "type" : "string" - }, - "name" : { - "type" : "string" - }, - "version" : { - "type" : "string" - }, - "type" : { - "type" : "string" - }, - "tokenLifetime" : { - "type" : "integer", - "format" : "int32" - }, - "tokenRefreshLimit" : { - "type" : "integer", - "format" : "int32" - }, - "clientSecret" : { - "type" : "string" - }, - "enabled" : { - "type" : "boolean" - }, - "notes" : { - "type" : "string" - }, - "redirectUris" : { - "type" : "array", - "items" : { - "type" : "string" - } - }, - "clScopes" : { - "type" : "array", - "items" : { - "type" : "string" - } - }, - "authCodeAllowed" : { - "type" : "boolean" - }, - "implicitAllowed" : { - "type" : "boolean" - }, - "clientCredentialsAllowed" : { - "type" : "boolean" - }, - "resourceOwnerAllowed" : { - "type" : "boolean" - }, - "approvalpgTitle" : { - "type" : "string" - }, - "approvalpgHeading" : { - "type" : "string" - }, - "approvalpgLogoFilename" : { - "type" : "string" - }, - "approvalpgFooter" : { - "type" : "string" - }, - "approvalpgFilename" : { - "type" : "string" - } - } - }, - "DynamicClientRegistrationConfig" : { - "type" : "object", - "properties" : { - "allowedGrantTypes" : { - "type" : "array", - "description" : "grant types to be allowed for this client", - "items" : { - "type" : "string", - "enum" : [ "authorization_code", "password", "client_credentials", "refresh_token", "implicit" ] - } - }, - "applicationType" : { - "type" : "string", - "description" : "type of the application", - "enum" : [ "WEB", "NATIVE", "USER_AGENT_BASED" ] - }, - "clientType" : { - "type" : "string", - "description" : "specifies whether the client is either public or confidential client", - "enum" : [ "PUBLIC", "CONFIDENTIAL" ] - }, - "clientId" : { - "type" : "string", - "description" : "The client id" - }, - "clientSecret" : { - "type" : "string", - "description" : "The client secret" - }, - "clientName" : { - "type" : "string", - "description" : "The client name" - }, - "clientVersion" : { - "type" : "string", - "description" : "The client version" - }, - "expirationInterval" : { - "type" : "string", - "description" : "Token expiry time" - }, - "refreshCount" : { - "type" : "string", - "description" : "The number of times token can be refreshed" - }, - "scopes" : { - "type" : "array", - "description" : "The scopes associated with this client", - "items" : { - "type" : "string" - } - }, - "redirectUris" : { - "type" : "array", - "description" : "The redirect uris", - "items" : { - "type" : "string" - } - } - } - }, - "GatewaySecret" : { - "type" : "object" - }, - "JWTAuthStrategy" : { - "type" : "object", - "properties" : { - "id" : { - "type" : "string", - "description" : "A unique ID for the strategy", - "readOnly" : true - }, - "type" : { - "type" : "string", - "description" : "The type of the strategy", - "enum" : [ "JWT_RSA", "JWT_HSA", "OPENID_CONNECT_RSA", "OPENID_CONNECT_HSA", "OAUTH2", "OAUTH2_LOCAL_RSA", "OAUTH2_LOCAL_HSA", "COMPOSITE" ] - }, - "authServerAlias" : { - "type" : "string", - "description" : "The name of the authorization server alias" - }, - "name" : { - "type" : "string", - "description" : "The name of the strategy" - }, - "description" : { - "type" : "string" - }, - "audience" : { - "type" : "string" - } - } - }, - "JWTHSAuthStrategy" : { - "type" : "object", - "properties" : { - "id" : { - "type" : "string", - "description" : "A unique ID for the strategy", - "readOnly" : true - }, - "type" : { - "type" : "string", - "description" : "The type of the strategy", - "enum" : [ "JWT_RSA", "JWT_HSA", "OPENID_CONNECT_RSA", "OPENID_CONNECT_HSA", "OAUTH2", "OAUTH2_LOCAL_RSA", "OAUTH2_LOCAL_HSA", "COMPOSITE" ] - }, - "authServerAlias" : { - "type" : "string", - "description" : "The name of the authorization server alias" - }, - "name" : { - "type" : "string", - "description" : "The name of the strategy" - }, - "description" : { - "type" : "string" - }, - "audience" : { - "type" : "string" - }, - "secret" : { - "$ref" : "#/definitions/GatewaySecret" - } - } - }, - "JWTRSAuthStrategy" : { - "type" : "object", - "properties" : { - "id" : { - "type" : "string", - "description" : "A unique ID for the strategy", - "readOnly" : true - }, - "type" : { - "type" : "string", - "description" : "The type of the strategy", - "enum" : [ "JWT_RSA", "JWT_HSA", "OPENID_CONNECT_RSA", "OPENID_CONNECT_HSA", "OAUTH2", "OAUTH2_LOCAL_RSA", "OAUTH2_LOCAL_HSA", "COMPOSITE" ] - }, - "authServerAlias" : { - "type" : "string", - "description" : "The name of the authorization server alias" - }, - "name" : { - "type" : "string", - "description" : "The name of the strategy" - }, - "description" : { - "type" : "string" - }, - "audience" : { - "type" : "string" - } - } - }, - "OAuth2LocalHSIntrospectionStrategy" : { - "type" : "object", - "properties" : { - "id" : { - "type" : "string", - "description" : "A unique ID for the strategy", - "readOnly" : true - }, - "type" : { - "type" : "string", - "description" : "The type of the strategy", - "enum" : [ "JWT_RSA", "JWT_HSA", "OPENID_CONNECT_RSA", "OPENID_CONNECT_HSA", "OAUTH2", "OAUTH2_LOCAL_RSA", "OAUTH2_LOCAL_HSA", "COMPOSITE" ] - }, - "authServerAlias" : { - "type" : "string", - "description" : "The name of the authorization server alias" - }, - "name" : { - "type" : "string", - "description" : "The name of the strategy" - }, - "description" : { - "type" : "string" - }, - "clientId" : { - "type" : "string" - }, - "dcrConfig" : { - "$ref" : "#/definitions/DynamicClientRegistrationConfig" - }, - "clientRegistration" : { - "$ref" : "#/definitions/ClientRegistration" - }, - "jwtAuthStrategy" : { - "$ref" : "#/definitions/JWTAuthStrategy" - }, - "secret" : { - "$ref" : "#/definitions/GatewaySecret" - }, - "audience" : { - "type" : "string" - } - } - }, - "OAuth2LocalRSIntrospectionStrategy" : { - "type" : "object", - "properties" : { - "id" : { - "type" : "string", - "description" : "A unique ID for the strategy", - "readOnly" : true - }, - "type" : { - "type" : "string", - "description" : "The type of the strategy", - "enum" : [ "JWT_RSA", "JWT_HSA", "OPENID_CONNECT_RSA", "OPENID_CONNECT_HSA", "OAUTH2", "OAUTH2_LOCAL_RSA", "OAUTH2_LOCAL_HSA", "COMPOSITE" ] - }, - "authServerAlias" : { - "type" : "string", - "description" : "The name of the authorization server alias" - }, - "name" : { - "type" : "string", - "description" : "The name of the strategy" - }, - "description" : { - "type" : "string" - }, - "clientId" : { - "type" : "string" - }, - "dcrConfig" : { - "$ref" : "#/definitions/DynamicClientRegistrationConfig" - }, - "clientRegistration" : { - "$ref" : "#/definitions/ClientRegistration" - }, - "jwtAuthStrategy" : { - "$ref" : "#/definitions/JWTAuthStrategy" - }, - "audience" : { - "type" : "string" - } - } - }, - "OAuth2RemoteIntrospectionAuthStrategy" : { - "type" : "object", - "properties" : { - "id" : { - "type" : "string", - "description" : "A unique ID for the strategy", - "readOnly" : true - }, - "type" : { - "type" : "string", - "description" : "The type of the strategy", - "enum" : [ "JWT_RSA", "JWT_HSA", "OPENID_CONNECT_RSA", "OPENID_CONNECT_HSA", "OAUTH2", "OAUTH2_LOCAL_RSA", "OAUTH2_LOCAL_HSA", "COMPOSITE" ] - }, - "authServerAlias" : { - "type" : "string", - "description" : "The name of the authorization server alias" - }, - "name" : { - "type" : "string", - "description" : "The name of the strategy" - }, - "description" : { - "type" : "string" - }, - "clientId" : { - "type" : "string" - }, - "dcrConfig" : { - "$ref" : "#/definitions/DynamicClientRegistrationConfig" - }, - "clientRegistration" : { - "$ref" : "#/definitions/ClientRegistration" - }, - "audience" : { - "type" : "string" - } - } - }, - "OneOfStrategyModel" : { - "type" : "object", - "properties" : { - "JWT_HSA" : { - "$ref" : "#/definitions/JWTHSAuthStrategy" - }, - "JWT_RSA" : { - "$ref" : "#/definitions/JWTRSAuthStrategy" - }, - "OPENID_CONNECT_HSA" : { - "$ref" : "#/definitions/OAuth2LocalHSIntrospectionStrategy" - }, - "OPENID_CONNECT_RSA" : { - "$ref" : "#/definitions/OAuth2LocalRSIntrospectionStrategy" - }, - "OAUTH2" : { - "$ref" : "#/definitions/OAuth2RemoteIntrospectionAuthStrategy" - }, - "OAUTH2_LOCAL_RSA" : { - "$ref" : "#/definitions/OpenIDConnectRSAuthStrategy" - }, - "OAUTH2_LOCAL_HSA" : { - "$ref" : "#/definitions/OpenIDConnectHSAuthStrategy" - } - } - }, - "OpenIDConnectHSAuthStrategy" : { - "type" : "object", - "properties" : { - "id" : { - "type" : "string", - "description" : "A unique ID for the strategy", - "readOnly" : true - }, - "type" : { - "type" : "string", - "description" : "The type of the strategy", - "enum" : [ "JWT_RSA", "JWT_HSA", "OPENID_CONNECT_RSA", "OPENID_CONNECT_HSA", "OAUTH2", "OAUTH2_LOCAL_RSA", "OAUTH2_LOCAL_HSA", "COMPOSITE" ] - }, - "authServerAlias" : { - "type" : "string", - "description" : "The name of the authorization server alias" - }, - "name" : { - "type" : "string", - "description" : "The name of the strategy" - }, - "description" : { - "type" : "string" - }, - "clientId" : { - "type" : "string" - }, - "dcrConfig" : { - "$ref" : "#/definitions/DynamicClientRegistrationConfig" - }, - "clientRegistration" : { - "$ref" : "#/definitions/ClientRegistration" - }, - "jwtAuthStrategy" : { - "$ref" : "#/definitions/JWTAuthStrategy" - }, - "secret" : { - "$ref" : "#/definitions/GatewaySecret" - }, - "audience" : { - "type" : "string" - } - } - }, - "OpenIDConnectRSAuthStrategy" : { - "type" : "object", - "properties" : { - "id" : { - "type" : "string", - "description" : "A unique ID for the strategy", - "readOnly" : true - }, - "type" : { - "type" : "string", - "description" : "The type of the strategy", - "enum" : [ "JWT_RSA", "JWT_HSA", "OPENID_CONNECT_RSA", "OPENID_CONNECT_HSA", "OAUTH2", "OAUTH2_LOCAL_RSA", "OAUTH2_LOCAL_HSA", "COMPOSITE" ] - }, - "authServerAlias" : { - "type" : "string", - "description" : "The name of the authorization server alias" - }, - "name" : { - "type" : "string", - "description" : "The name of the strategy" - }, - "description" : { - "type" : "string" - }, - "clientId" : { - "type" : "string" - }, - "dcrConfig" : { - "$ref" : "#/definitions/DynamicClientRegistrationConfig" - }, - "clientRegistration" : { - "$ref" : "#/definitions/ClientRegistration" - }, - "jwtAuthStrategy" : { - "$ref" : "#/definitions/JWTAuthStrategy" - }, - "audience" : { - "type" : "string" - } - } - } - } -} \ No newline at end of file From 450b6e78241264ca883f936ecb96774eec57ac48 Mon Sep 17 00:00:00 2001 From: Dhivakar Asokan <48990091+dhivakar-asokan@users.noreply.github.com> Date: Thu, 21 May 2020 20:30:03 +0530 Subject: [PATCH 04/22] Delete APIGatewayArchive.json --- apigatewayservices/APIGatewayArchive.json | 517 ---------------------- 1 file changed, 517 deletions(-) delete mode 100644 apigatewayservices/APIGatewayArchive.json diff --git a/apigatewayservices/APIGatewayArchive.json b/apigatewayservices/APIGatewayArchive.json deleted file mode 100644 index 5a73c6f..0000000 --- a/apigatewayservices/APIGatewayArchive.json +++ /dev/null @@ -1,517 +0,0 @@ -{ - "swagger" : "2.0", - "info" : { - "description" : "The API Gateway archive service exposes the interface to the API Gateway export archives. An API Gateway export archive is a ZIP file that contains APIs, policies, global policies, users, groups, access profiles, aliases, keystores, trustores, ports, JMS connections, JMS providers, JMS triggers, service registries, various administrative configurations like approval configurations, keystore/trustore configurations, cache configurations, log configurations, LDAP configurations, user account settings and all the other assets in API Gateway. You can use this service to export/import all type of assets into API Gateway. \n\n In general, for any asset being exported, all the dependent assets are automatically exported. For example, when exporting APIs, the export archive contains the APIs, the API level policies, the policy actions associated with the API level policies, and the aliases referenced by the policy actions. Additionally, the archive may also contain the applications registered to the exported APIs.\n When exporting global policy the archive contains the global policies, the policy actions associated with the global policies, and the aliases referenced to the policy actions.\n When exporting approval configuration the archive contains the approval configuration and the access profile associated with the approval configuration. \n When exporting port the archive contains the port, the keystore and trustore associated with the port. \n When exporting LDAP configuration the archive contains the LDAP configuration, the group associated with the LDAP configuration. \n\nEach artifact in an archive is associated with a universally unique identifier (UUID) across all API Gateway installations. When importing an archive, the UUID helps in determining whether the corresponding artifact is already available in API Gateway. In such a situation, you can specify whether to overwrite an already existing artifact during the import process. \n\n Any user with the 'Export assets' functional privilege can export archives in API Gateway and any user with the 'Import assets' privilege can import the archives. By default, the users who are part of API-Gateway-Administrators group will have these privileges.", - "version" : "10.7", - "title" : "API Gateway Archive Service" - }, - "host" : "localhost:5555", - "basePath" : "/rest/apigateway", - "schemes" : [ "http" ], - "consumes" : [ "application/json", "application/zip" ], - "produces" : [ "application/json", "application/zip" ], - "paths" : { - "/archive" : { - "get" : { - "description" : "The GET method exports an archive. The result of the GET request is an archive in a ZIP format. \n This Method supports exporting API, Application, Alias,Policy, Policy Action, Keystore, Truststore, Kerberos, User, Group, Team, JMS Connection, JNDI Provider, JMS Trigger, Webservice Endpoint Alias, Approval Configuration, Outbound Proxy, URL alias, Plan and Package. \n This GET method can be used for exporting specific type of assets and its optional/soft dependant assets by specifying the asset name and corresponding include options in query parameter. \n For example, for an API, the Application assets (used by the API) are soft dependant of that API. To export the dependant applications of an API use the query param 'include-applications'.If 'include-applications' is not provided, the export archive will contains only the APIs. \n Refer 'Parameters' section for the usage of each include parameters.\n\n\n Use the POST /archive method to export all the assets in API Gateway.", - "operationId" : "exportApiGatewayAssets", - "consumes" : [ "application/json" ], - "produces" : [ "multipart/form-data" ], - "parameters" : [ { - "name" : "include-applications", - "in" : "query", - "description" : "This parameter indicates whether you want to export the applications associated with the\nAPIs", - "required" : false, - "type" : "string", - "x-example" : "include-applications=true" - }, { - "name" : "include-users", - "in" : "query", - "description" : "This parameter indicates whether you want to export users associated with the groups and/or with the password expiry settings", - "required" : false, - "type" : "string", - "x-example" : "include-users=true" - }, { - "name" : "include-groups", - "in" : "query", - "description" : "This parameter indicates whether you want to export groups associated with the teams", - "required" : false, - "type" : "string", - "x-example" : "include-groups=true" - }, { - "name" : "include-truststores", - "in" : "query", - "description" : "This parameter indicates whether you want to export truststore alias associated with the email configuration", - "required" : false, - "type" : "string", - "x-example" : "include-truststores=true" - }, { - "name" : "policies", - "in" : "query", - "description" : "This parameter identifies the policies to be exported. The wildcard \"*\" selects all the policies. \nFor example a single policy can be exported with its id using the following request:\nGET /rest/apigateway/archive?policies=07b8d7b7-20b7-422e-8464-4b19d405c41a\n\nWhereas, all the policies can be exported using the following request:\nGET /rest/apigateway/archive?policies=*", - "required" : false, - "type" : "array", - "items" : { - "type" : "string" - }, - "collectionFormat" : "multi", - "x-example" : "policies=07b8d7b7-20b7-422e-8464-4b19d405c41a" - }, { - "name" : "apis", - "in" : "query", - "description" : "This parameter identifies the APIs to be exported. The wildcard \"*\" selects all the APIs. \nFor example a single API can be exported using the following request:\nGET /rest/apigateway/archive?apis=e2996867-af49-4ac6-98e7-cba48837c13e\n\nWhereas, all the APIs can be exported using the following request:\nGET /rest/apigateway/archive?apis=*", - "required" : false, - "type" : "array", - "items" : { - "type" : "string" - }, - "collectionFormat" : "multi", - "x-example" : "apis=e2996867-af49-4ac6-98e7-cba48837c13e" - }, { - "name" : "aliases", - "in" : "query", - "description" : "This parameter identifies the aliases to be exported. \nThe wildcard \"*\" selects all aliases.\nFor example, a single alias can be exported using the following requrest:\nGET /rest/apigateway/archive?aliases=d1885756-9e38-39b5-87d6-ba937726b02d\n\nWhereas, all the APIs can be exported using the following request:\nGET /rest/apigateway/archive?alias=*", - "required" : false, - "type" : "array", - "items" : { - "type" : "string" - }, - "collectionFormat" : "multi", - "x-example" : "aliases=d1885756-9e38-39b5-87d6-ba937726b02d" - }, { - "name" : "applications", - "in" : "query", - "description" : "This parameter identifies the applications to be exported. \nThe wildcard \"*\" selects all applications.\nFor example, a single application can be exported using the following requrest:\nGET /rest/apigateway/archive?applications=d1885756-9e38-39b5-87d6-ba937726b02d\n\nWhereas, all the applications can be exported using the following request:\nGET /rest/apigateway/archive?applications=*", - "required" : false, - "type" : "array", - "items" : { - "type" : "string" - }, - "collectionFormat" : "multi", - "x-example" : "applications=d1885756-9e38-39b5-87d6-ba937726b02d" - }, { - "name" : "policyActions", - "in" : "query", - "description" : "This parameter identifies the policy actions to be exported. \nThe wildcard \"*\" selects all policy actions.\nFor example, a single policy action can be exported using the following request:\n GET /rest/apigateway/archive?policyActions=20ca1e24-d6b2-430d-adf8-7a53a6cbaa53\n\nWhereas, all the policy actions can be exported using the following request:\nGET /rest/apigateway/archive?policyActions=*", - "required" : false, - "type" : "array", - "items" : { - "type" : "string" - }, - "collectionFormat" : "multi", - "x-example" : "policyActions=20ca1e24-d6b2-430d-adf8-7a53a6cbaa53,c98805c4-9c05-47c0-84f0-c0855c0a9032" - }, { - "name" : "approvalConfigurations", - "in" : "query", - "description" : "This parameter identifies the approval configurations to be exported. \nThe wildcard \"*\" selects all approval configurations.\nFor example, a single approval configuration can be exported using the following request:\nGET /rest/apigateway/archive?approvalConfigurations=createApplication\n\nWhereas, all the approval configurations can be exported using the following request:\n GET /rest/apigateway/archive?approvalConfigurations=*", - "required" : false, - "type" : "array", - "items" : { - "type" : "string", - "enum" : [ "createApplication", "updateApplication", "registerApplication", "subscribePackage" ] - }, - "collectionFormat" : "multi", - "x-example" : "approvalConfigurations=createApplication" - }, { - "name" : "outboundProxies", - "in" : "query", - "description" : "This parameter identifies the outbound proxy aliases to be exported. outbound proxy aliases are idetified with it's name.\nThe wildcard \"*\" selects all the outbound proxy aliases. \nFor example a single outbound proxy alias can be exported using the following request:\nGET /rest/apigateway/archive?outboundProxies=testOutboundProxyAlias\n\nWhereas, all the outbound proxy aliases can be exported using the following request:\nGET /rest/apigateway/archive?outboundProxies=*", - "required" : false, - "type" : "array", - "items" : { - "type" : "string" - }, - "collectionFormat" : "multi", - "x-example" : "outboundProxies=testOutboundProxyAlias" - }, { - "name" : "urlAliases", - "in" : "query", - "description" : "This parameter identifies the URL aliases to be exported. URL aliases are idetified with it's name.\nThe wildcard \"*\" selects all the URL aliases. \nFor example, a single URL alias can be exported using the following request:\nGET /rest/apigateway/archive?urlAliases=testUrlAlias\n\nWhereas, all the URL aliases can be exported using the following request:\nGET /rest/apigateway/archive?testUrlAlias=*", - "required" : false, - "type" : "array", - "items" : { - "type" : "string" - }, - "collectionFormat" : "multi", - "x-example" : "urlAliases=testUrlAlias" - }, { - "name" : "keyStores", - "in" : "query", - "description" : "This parameter identifies the keystore aliases to be exported. Keystore aliases are idetified with it's name.\nThe wildcard \"*\" selects all the keystore aliases. \nFor example, a single keystore alias can be exported using the following request:\nGET /rest/apigateway/archive?keyStores=test_keystore\n\nWhereas, all the keystore aliases can be exported using the following request:\nGET /rest/apigateway/archive?keyStores=*", - "required" : false, - "type" : "array", - "items" : { - "type" : "string" - }, - "collectionFormat" : "multi", - "x-example" : "keyStores=test_keystore" - }, { - "name" : "trustStores", - "in" : "query", - "description" : "This parameter identifies the truststore aliases to be exported. Truststore aliases are idetified with it's name.\nThe wildcard \"*\" selects all the truststore aliases. \nFor example, a single truststore alias can be exported using the following request:\nGET /rest/apigateway/archive?trustStores=test_truststore\n\nWhereas, all the truststore aliases can be exported using the following request:\nGET /rest/apigateway/archive?trustStores=*", - "required" : false, - "type" : "array", - "items" : { - "type" : "string" - }, - "collectionFormat" : "multi", - "x-example" : "trustStores=test_truststore" - }, { - "name" : "JNDIProviderAliases", - "in" : "query", - "description" : "This parameter identifies the JNDI provider aliases to be exported. JNDI provider aliases are idetified with it's name.\nThe wildcard \"*\" selects all the JNDI provider aliases. \nFor example, a single JNDI provider alias can be exported using the following request:\nGET /rest/apigateway/archive?JNDIProviderAliases=test_jndiProviderAlias\n\nWhereas, all the JNDI provider aliases can be exported using the following request:\nGET /rest/apigateway/archive?JNDIProviderAliases=*", - "required" : false, - "type" : "array", - "items" : { - "type" : "string" - }, - "collectionFormat" : "multi", - "x-example" : "JNDIProviderAliases=test_jndiProviderAlias" - }, { - "name" : "JMSConnectionAliases", - "in" : "query", - "description" : "This parameter identifies the JMS connection aliases to be exported. JMS connection aliases are idetified with it's name.\nThe wildcard \"*\" selects all the JNDI provider aliases. \nFor example, a single JNDI provider alias can be exported using the following request:\nGET /rest/apigateway/archive?JMSConnectionAliases=test_jmsConnectionAlias\n\nWhereas, all the JMS connection aliases can be exported using the following request:\nGET /rest/apigateway/archive?JMSConnectionAliases=*", - "required" : false, - "type" : "array", - "items" : { - "type" : "string" - }, - "collectionFormat" : "multi", - "x-example" : "JMSConnectionAliases=test_jmsConnectionAlias" - }, { - "name" : "JMSTriggers", - "in" : "query", - "description" : "This parameter identifies the JMS triggers to be exported. JMS triggers are idetified with it's name.\nThe wildcard \"*\" selects all the JMS triggers. \nFor example, a single JMS trigger can be exported using the following request:\nGET /rest/apigateway/archive?JMSTriggers=test_jmsTrigger\n\nWhereas, all the JMS triggers can be exported using the following request:\nGET /rest/apigateway/archive?JMSTriggers=*", - "required" : false, - "type" : "array", - "items" : { - "type" : "string" - }, - "collectionFormat" : "multi", - "x-example" : "JMSTriggers=test_jmsTrigger" - }, { - "name" : "webserviceEndpointAliases", - "in" : "query", - "description" : "This parameter identifies the 'web service endpoint' aliases to be exported. Web service endpoint aliases are idetified with it's name.\nThe wildcard \"*\" selects all the web service endpoint aliases. \nFor example, a single web service endpoint alias can be exported using the following request:\nGET /rest/apigateway/archive?webserviceEndpointAliases=test_wsEndpointAlias\n\nWhereas, all the JMS triggers can be exported using the following request:\nGET /rest/apigateway/archive?webserviceEndpointAliases=*", - "required" : false, - "type" : "array", - "items" : { - "type" : "string" - }, - "collectionFormat" : "multi", - "x-example" : "webserviceEndpointAliases=test_wsEndpointAlias" - }, { - "name" : "users", - "in" : "query", - "description" : "This parameter identifies the users to be exported. \nThe wildcard \"*\" selects all the users. \nFor example, a single user can be exported using the following request:\nGET /rest/apigateway/archive?users=7a6d3d40-44d8-4ab1-83df-5be63cdbae54\n\nWhereas, all the users can be exported using the following request:\nGET /rest/apigateway/archive?users=*", - "required" : false, - "type" : "array", - "items" : { - "type" : "string" - }, - "collectionFormat" : "multi", - "x-example" : "users=7a6d3d40-44d8-4ab1-83df-5be63cdbae54" - }, { - "name" : "groups", - "in" : "query", - "description" : "This parameter identifies the groups to be exported. \nThe wildcard \"*\" selects all the groups. \nFor example, a single group can be exported using the following request:\nGET /rest/apigateway/archive?groups=d6b38ff8-59a8-47bf-9fba-0bdb24ee5b48\n\nWhereas, all the groups can be exported using the following request:\nGET /rest/apigateway/archive?groups=*", - "required" : false, - "type" : "array", - "items" : { - "type" : "string" - }, - "collectionFormat" : "multi", - "x-example" : "groups=d6b38ff8-59a8-47bf-9fba-0bdb24ee5b48" - }, { - "name" : "accessProfiles", - "in" : "query", - "description" : "This parameter identifies the teams to be exported. \nThe wildcard \"*\" selects all the teams. \nFor example, a single team can be exported using the following request:\nGET /rest/apigateway/archive?accessProfiles=d6b38ff8-59a8-47bf-9fba-0bdb24ee5b48\n\nWhereas, all the teams can be exported using the following request:\nGET /rest/apigateway/archive?accessProfiles=*", - "required" : false, - "type" : "array", - "items" : { - "type" : "string" - }, - "collectionFormat" : "multi", - "x-example" : "accessProfiles=836fd806-4845-452f-9d7a-7e619e40a70e" - }, { - "name" : "kerberosSetting", - "in" : "query", - "description" : "This parameter identifies the kerberos configuration to be exported.\nThe kerberos configuration can be exported using the following request:\nGET /rest/apigateway/archive?kerberosSetting=kerberosSetting", - "required" : false, - "type" : "string", - "x-example" : "kerberosSetting=kerberosSetting", - "enum" : [ "kerberosSetting" ] - }, { - "name" : "plans", - "in" : "query", - "description" : "This parameter identifies the plans to be exported. \nThe wildcard \"*\" selects all the plans. \nFor example, a single plan can be exported using the following request:\nGET /rest/apigateway/archive?plans=86d58023-be4b-4735-a08f-14e78131ce4a\n\nWhereas, all the plans can be exported using the following request:\nGET /rest/apigateway/archive?plans=*", - "required" : false, - "type" : "array", - "items" : { - "type" : "string" - }, - "collectionFormat" : "multi", - "x-example" : "plans=86d58023-be4b-4735-a08f-14e78131ce4a" - }, { - "name" : "packages", - "in" : "query", - "description" : "This parameter identifies the packages to be exported. \nThe wildcard \"*\" selects all the packages. \nFor example, a single package can be exported using the following request:\nGET /rest/apigateway/archive?packages=73c93393-1477-4a99-9e44-c9b3e679de0c\n\nWhereas, all the packages can be exported using the following request:\nGET /rest/apigateway/archive?packages=*", - "required" : false, - "type" : "array", - "items" : { - "type" : "string" - }, - "collectionFormat" : "multi", - "x-example" : "packages=73c93393-1477-4a99-9e44-c9b3e679de0c" - }, { - "name" : "configurations", - "in" : "query", - "description" : "This parameter identifies the configurations to be exported. \nThe wildcard \"*\" selects all the configurations. \nFor example, a single configuration can be exported using the following request:\nGET /rest/apigateway/archive?configurations=loadBalancer,customContentTypes\n\nWhereas, all the configurations can be exported using the following request:\nGET /rest/apigateway/archive?configurations=*", - "required" : false, - "type" : "array", - "items" : { - "type" : "string", - "enum" : [ "loadBalancer", "keystore", "mobileApp", "extended", "samlsso", "misc", "dashboard", "customContentTypes", "errorProcessing", "auditlogDestinationConfig", "gatewayDestinationConfig", "jdbcDestinationConfig", "desDestinationConfig", "elasticsearchDestinationConfig", "snmpDestinationConfig", "emailDestinationConfig", "apiPortalDestinationConfig", "samlIssuer", "logConfig", "passwordRestrictions", "passwordExpiry", "accountLockSettings", "ldapConfig", "settings", "cache", "apiCallBackSettings" ] - }, - "collectionFormat" : "multi", - "x-example" : "configurations=loadBalancer,customContentTypes" - } ], - "responses" : { - "200" : { - "description" : "This response indicates that the archive is created successfully. The response body is the zipped archive." - }, - "401" : { - "description" : "This response indicates that invalid credentials have been provided for the request." - }, - "400" : { - "description" : "This response indicates that a request is incorrect. This can be due to identifiers that cannot be resolved." - }, - "500" : { - "description" : "This response indicates that the server has encountered an error while exporting API Gateway Asset" - } - }, - "security" : [ { - "Basic" : [ ] - } ] - }, - "post" : { - "description" : "This method can be used for importing the API Gateway archive as well as exporting the assets as an archive. If the request is made with x-HTTP-Method-Override HTTP header with value as GET, then this method will export asset. It will require the body param using which you can specify the filtering criteria and include options for the API Gateway assets that need to be exported. \n\n If the HTTP header is not specified, then this method can be used to import the API Gateway archive. You can control the import settings with overwrite and preserveAssetState query parameters.\n\n Here are some sample payloads for different export scenarios. \n\n 1. Export all API Gateway assets. \n Payload: {} \n\n 2. Export all APIs \n Payload: { \"types\": [\"api\"] } \n\n 3. Export all APIs with registered Application \n Payload: {\r\n\"types\" : [\"api\"],\r\n\"includeOptions\" :{\r\n\"includeApplications\" :false\r\n}\r\n} \n\n 4. Export only APIs with name contains \"API Gateway\" \n Payload: {\r\n\"types\" : [\"api\"],\r\n\"scope\" : [\r\n{\"attributeName\" : \"apiName\",\r\n\"keyword\" : \".*API Gateway.*\"\r\n}],\r\n\"includeOptions\" :{\r\n\"includeApplications\" :false\r\n}\r\n} \n\n 5. Export API with specific ids only \n Payload: {\r\n\"types\" : [\"api\"],\r\n\"scope\" : [\r\n{\"attributeName\" : \"id\",\r\n\"keyword\" : \"1c36033a-ecb6-41ce-ad66-bada5cebe85e|8d505388-5524-4df5-bd3c-62c4bb5f41d0\"\r\n}],\r\n\"includeOptions\" :{\r\n\"includeApplications\" :true\r\n}\r\n} \n\n 6. Export API with name starts with API Gateway and description contains search \n Payload: {\r\n\"types\" : [\"api\"],\r\n\"scope\" : [\r\n{\"attributeName\" : \"apiName\",\r\n\"keyword\" : \"API Gateway.*\"\r\n},\r\n{\r\n\"attributeName\" : \"apiDescription\",\r\n\"keyword\" : \".*search.*\"\r\n}],\r\n\"condition\" : \"and\",\r\n\"includeOptions\" :{\r\n\"includeApplications\" :false\r\n}\r\n} \n\n 7. Export all Policy \n Payload: {\r\n\"types\" : [\"policy\"]\r\n} \n\n 8. Global Policy Alone \n Payload: {\r\n\"types\" : [\"policy\"],\r\n\"scope\":[\r\n{\r\n\"attributeName\" : \"policyScope\",\r\n\"keyword\" : \"GLOBAL\"\r\n}]\r\n} \n\n 9. Export Threat Protection Rule \n Payload: {\r\n\"types\" : [\"policy\"],\r\n\"scope\":[\r\n{\r\n\"attributeName\" : \"policyEnforcements.stageKey\",\r\n\"keyword\" : \"threatProtection\"\r\n}]\r\n} \n\n 10. Export All Policy Actions \n Payload: {\r\n\"types\" : [\"policy_action\"]\r\n} \n\n 11. Export All Threat Protection rules and policy \n Payload: {\r\n\"types\" : [\"policy_action\", \"policy\"],\r\n\"scope\":[\r\n{\r\n\"attributeName\" : \"policyEnforcements.stageKey\",\r\n\"keyword\" : \"threatProtection\"\r\n}, {\r\n\"attributeName\" : \"id\",\r\n\"keyword\" : \"globalipdos|ipdos\"\r\n}],\r\n\"condition\" : \"or\"\r\n} \n\n 12. Export all aliases \n Payload: {\r\n\"types\" : [\"alias\"]\r\n} \n\n 13. Export all applications \n Payload: {\r\n\"types\" : [\"application\"]\r\n} \n\n 14. Export all application with out including associated APIs \n Payload: {\r\n\"types\" : [\"application\"],\r\n\"includeOptions\" : {\r\n\"includeApis\": false\r\n}\r\n} \n\n 15. Export All Assertions \n Payload: {\r\n\"types\" : [\"assertion\"]\r\n} \n\n 16. Export all API Plans \n Payload: {\r\n\"types\" : [\"plan\"]\r\n} \n\n 17. Export all API Packages \n Payload: {\r\n\"types\" : [\"package\"]\r\n} \n\n 18. Export all packages along with subscription but with out the registered Applications for the associated APIs. \n Payload: {\r\n\"types\" : [\"package\"],\r\n\"includeOptions\":{\r\n\"includeApis\" : false,\r\n\"includeApplications\" : false,\r\n\"includeSubscriptions\" : true\r\n}\r\n} \n\n 19. Export all subscriptions \n Payload: {\r\n\"types\" : [\"subscription\"]\r\n} \n\n 20. Export all Administrator Settings \n Payload: {\r\n\"types\" : [\"administrator_setting\"]\r\n} \n\n 21. Export all approval configurations \n Payload: {\r\n\"types\" : [\"approval_configuration\"]\r\n} \n\n 22. Export all outbound proxy aliases \n Payload: {\r\n\"types\" : [\"outbound_proxy\"]\r\n} \n\n 23. Export all URL aliases \n Payload: {\r\n\"types\" : [\"url_alias\"]\r\n} \n\n 24. Export all keystore aliases \n Payload: {\r\n\"types\" : [\"keystore\"]\r\n} \n\n 25. Export all truststore aliases \n Payload: {\r\n\"types\" : [\"truststore\"]\r\n} \n\n 26. Export all kerberos settings \n Payload: {\r\n\"types\" : [\"kerberos_setting\"]\r\n} \n\n 27. Export all JNDI provider aliases \n Payload: {\r\n\"types\" : [\"jndi_provider_alias\"]\r\n} \n\n 28. Export all JMS connection aliases \n Payload: {\r\n\"types\" : [\"jms_connection_alias\"]\r\n} \n\n 29. Export all JMS triggers \n Payload: {\r\n\"types\" : [\"jms_trigger\"]\r\n} \n\n 30. Export all web service endpoint aliases \n Payload: {\r\n\"types\" : [\"web_service_endpoint_alias\"]\r\n} \n\n 31. Export all users \n Payload: {\r\n\"types\" : [\"users\"]\r\n} \n\n 32. Export all groups \n Payload: {\r\n\"types\" : [\"groups\"]\r\n} \n\n 33. Export all teams \n Payload: {\r\n\"types\" : [\"accessprofiles\"]\r\n}", - "operationId" : "importExportAPIGatewayAssets", - "consumes" : [ "multipart/form-data", "application/json" ], - "produces" : [ "application/json", "multipart/form-data" ], - "parameters" : [ { - "name" : "overwrite", - "in" : "query", - "description" : "This parameter specifies the import option to define the artifact types that can be overwritten during import. The parameter enables you to specify overwriting of APIs, policies, policy actions, aliases, applications, configurations, approval configurations, outbound proxies, URL aliases, keyStores, trustStores, JNDI provider aliases, JMS connection aliases, JMS triggers, webservice endpoint aliases, users, groups, teams, kerberos settings, plans and packages. \nThe wildcard \"*\" enables you to specify all types.\nFor example, the following request enables you to overwrite APIs during import:\nPOST /rest/apigateway/archive?overwrite=apis\nWhereas, overwriting all asset types during import can be specified as follows:\nPOST /rest/apigateway/archive?overwrite=*", - "required" : false, - "type" : "string", - "enum" : [ "apis", "policies", "policyactions", "applications", "aliases", "plans", "packages", "subscriptions", "administrator_settings", "portal_gateway", "assertions", "configurations", "outboundProxies", "urlAliases", "keyStores", "trustStores", "JNDIProviderAliases", "JMSConnectionAliases", "JMSTriggers", "webserviceEndpointAliases", "users", "groups", "accessProfiles", "kerberosSetting", "*" ] - }, { - "name" : "preserveAssetState", - "in" : "query", - "description" : "This parameter is used to specify whether the asset state needs to be preserved after importing the assets in to API Gateway. By default this value will be true. If false specified the assets will be imported and wont preserve asset state after importing asset.", - "required" : false, - "type" : "string", - "enum" : [ "true", "false" ] - }, { - "name" : "x-HTTP-Method-Override", - "in" : "header", - "description" : "This parameter is used to specify that this REST call is an export operation. The value for this field is GET. If this is specified then you need to provide the filtering criteria in body to specify the asset. If empty payload specified then all assets will be exported. ", - "required" : false, - "type" : "string", - "enum" : [ "GET" ] - }, { - "in" : "body", - "name" : "body", - "description" : "", - "required" : false, - "schema" : { - "$ref" : "#/definitions/ExportContext" - } - }, { - "name" : "zipFile", - "in" : "formData", - "description" : "Zip file that contains the API Gateway asset needs to be imported", - "required" : false, - "type" : "file" - } ], - "responses" : { - "201" : { - "description" : "This response indicates that the archive import was successful. The response body holds a detailed import log in application/json format.", - "examples" : { - "application/json" : "{\n \"ArchiveResult\": [\n {\n \"PolicyAction\": {\n \"name\": \"Straight Through Routing\",\n \"id\": \"bc7c75ba-ad5e-4dd7-adb7-a62bcd60593d\",\n \"status\": \"Failed\",\n \"explanation\": \"Asset already exists.\",\n \"overwritten\": false\n }\n },\n {\n \"PolicyAction\": {\n \"name\": \"Require HTTP / HTTPS\",\n \"id\": \"c3852da1-4e6e-440b-8fe9-7e5c1523d7f1\",\n \"status\": \"Failed\",\n \"explanation\": \"Asset already exists.\",\n \"overwritten\": false\n }\n },\n {\n \"API\": {\n \"name\": \"BayernRest\",\n \"id\": \"70062a02-e7f9-4ead-a66e-313752a9b111\",\n \"status\": \"Failed\",\n \"explanation\": \"Asset already exists.\",\n \"overwritten\": false\n }\n },\n {\n \"Policy\": {\n \"name\": \"Default Policy for API BayernRest\",\n \"id\": \"9a0d17c1-8bf1-4282-a53e-2b2ca634ba39\",\n \"status\": \"Failed\",\n \"explanation\": \"Asset already exists.\",\n \"overwritten\": false\n }\n }\n ]\n}" - }, - "schema" : { - "type" : "array", - "items" : { - "$ref" : "#/definitions/ArchiveResult" - } - } - }, - "200" : { - "description" : "This response indicates that the archive is created successfully. The response body is the zipped archive." - }, - "401" : { - "description" : "This response indicates that invalid credentials have been provided for the request." - }, - "500" : { - "description" : "This response indicates that the server has encountered an error while exporting or importing API Gateway Asset" - }, - "400" : { - "description" : "This response indicates that the request payload is invalid or that no objects with the specified search parameters were found" - } - }, - "security" : [ { - "Basic" : [ ] - } ] - } - } - }, - "securityDefinitions" : { - "Basic" : { - "description" : "API Gateway Administrator and API Gateway provider", - "type" : "basic" - } - }, - "definitions" : { - "ExportContext" : { - "type" : "object", - "required" : [ "types" ], - "properties" : { - "types" : { - "type" : "string", - "description" : "List of allowed types that can be searched across API Gateway.", - "enum" : [ "USER", "GROUP", "USERS", "GROUPS", "ACCESSPROFILES", "LDAPGROUPS", "CDSGROUPS", "ASSERTION", "APPLICATION", "API", "ALIAS", "POLICY", "POLICY_ACTION", "PLAN", "PACKAGE", "ADMINISTRATOR_SETTING", "PORTAL_GATEWAY", "OAUTH2_SCOPE_DATA", "SUBSCRIPTION", "API_DOCUMENT", "APPROVAL_CONFIGURATION", "OUTBOUND_PROXY", "PROXY_BYPASS", "URL_ALIAS", "KEYSTORE", "TRUSTSTORE", "KERBEROS_SETTING", "JNDI_PROVIDER_ALIAS", "JMS_CONNECTION_ALIAS", "JMS_TRIGGER", "WEB_SERVICE_ENDPOINT_ALIAS", "ACCESS_CONTROL_LIST", "RULE", "MICROGATEWAY_GROUPS" ] - }, - "scope" : { - "$ref" : "#/definitions/SearchField" - }, - "condition" : { - "type" : "string", - "description" : "Condition between scope specified. The value can be either 'and' or 'or'", - "enum" : [ "and", "or" ] - }, - "responseFields" : { - "type" : "array", - "description" : "List of fields to be fetched for the specified types.", - "items" : { - "type" : "string" - } - }, - "from" : { - "type" : "integer", - "format" : "int32", - "description" : "The starting index of the record to be fetched. Default value is 0 which fetches from the start. The index is applied to each type separately. For each type the first n records are skipped as specified in from field. If the value specified is less than zero then the default value is taken for fetching records" - }, - "size" : { - "type" : "integer", - "format" : "int32", - "description" : "Number of records to be fetched. Default value is -1, which fetches all the records. The size is applied to each type separately. Each type has the records less than or equal to the size specified. If the value specified is less than zero then the default value is taken for fetching records" - }, - "sortByField" : { - "type" : "string", - "description" : "Field name on which the sorting needs to be applied." - }, - "sortOrder" : { - "type" : "string", - "description" : "Sort order for the records", - "enum" : [ "ASC", "DESC" ] - }, - "teamFilter" : { - "type" : "array", - "description" : "This filter is used to specify list teams to apply on the search results.", - "items" : { - "type" : "string" - } - }, - "includeOptions" : { - "$ref" : "#/definitions/IncludeOptions" - } - }, - "description" : "This defines the request structure to export the specific assets across API Gateway" - }, - "IncludeOptions" : { - "type" : "object", - "properties" : { - "includeAll" : { - "type" : "boolean", - "description" : "Include all dependent assets for all asset type specified" - }, - "includeApplications" : { - "type" : "boolean", - "description" : "Include application as dependent asset for asset type specified if applicable" - }, - "includeApis" : { - "type" : "boolean", - "description" : "Include API as dependent asset for asset type specified if applicable" - }, - "includeDocuments" : { - "type" : "boolean", - "description" : "Include documents as dependent asset for asset type specified if applicable" - }, - "includeUsers" : { - "type" : "boolean", - "description" : "Include users as dependent asset for asset type specified if applicable" - }, - "includeGroups" : { - "type" : "boolean", - "description" : "Include groups as dependent asset for asset type specified if applicable" - }, - "includeSubscriptions" : { - "type" : "boolean", - "description" : "Include subscriptions for the asset type specified if applicable" - }, - "includeAccessProfiles" : { - "type" : "boolean" - }, - "includeTruststores" : { - "type" : "boolean" - }, - "promotion" : { - "type" : "boolean" - } - }, - "description" : "It is used to specify the inclusion of dependent assets" - }, - "SearchField" : { - "type" : "object", - "properties" : { - "attributeName" : { - "type" : "string", - "description" : "Field name to be searched for the list of types specified" - }, - "keyword" : { - "type" : "string", - "description" : "Value of the corresponding field to be matched. User can use regular expression to specify the multiple values for single attributeName. For example to find \n 1. apiDescription contains \"weather\" or equals \"country\" , we can use {\"attributeName\" : \"apiDescription\", \"keyword\" : \".*weather.*|country\"}. \n 2. apiName starts with weather - {\"attributeName\" : \"apiName\", \"keyword\" : \"weather.*\"}. \n 3. api type is REST or SOAP - {\"attributeName\" : \"type\", \"keyword\" : \"REST|SOAP\"}." - }, - "orTokenKey" : { - "type" : "boolean" - }, - "rawFieldKey" : { - "type" : "string" - } - }, - "description" : "A scope is filtering criteria for the list of types specified in search.It is a key/value pair. key is the field name on which the search is being done and value contains the search string to be searched on the field specified.To get the field name for a type, user needs to access the corresponding API Gateway REST service to know about the fields available for a particular type. " - }, - "ArchiveResult" : { - "type" : "object", - "properties" : { - "name" : { - "type" : "string" - }, - "importedOK" : { - "type" : "boolean" - }, - "explanation" : { - "type" : "string" - }, - "overwritten" : { - "type" : "boolean" - }, - "dependencyFailed" : { - "type" : "boolean" - } - } - } - } -} \ No newline at end of file From 473b74f7674ce740d1bf16971bdf961d899de58b Mon Sep 17 00:00:00 2001 From: Dhivakar Asokan <48990091+dhivakar-asokan@users.noreply.github.com> Date: Thu, 21 May 2020 20:30:07 +0530 Subject: [PATCH 05/22] Delete APIGatewayDocumentManagement.json --- .../APIGatewayDocumentManagement.json | 285 ------------------ 1 file changed, 285 deletions(-) delete mode 100644 apigatewayservices/APIGatewayDocumentManagement.json diff --git a/apigatewayservices/APIGatewayDocumentManagement.json b/apigatewayservices/APIGatewayDocumentManagement.json deleted file mode 100644 index 0fcd1e0..0000000 --- a/apigatewayservices/APIGatewayDocumentManagement.json +++ /dev/null @@ -1,285 +0,0 @@ -{ - "swagger" : "2.0", - "info" : { - "description" : "API Gateway Document Management Service allows you to store/manage the Documents associated to API in the API Gateway. Any user with the 'Manage APIs' functional privilege can manage the documents in the API Gateway. By default, the users who are part of either API-Gateway-Providers or API-Gateway-Administrators groups will have this privilege.\n\nAny document can be stored and attached to any of these APIs types - REST APIs, SOAP APIs, WebSocket APIs and OData APIs. ", - "version" : "10.7", - "title" : "API Gateway Document Management Service" - }, - "host" : "localhost:5555", - "basePath" : "/rest/apigateway", - "schemes" : [ "http" ], - "consumes" : [ "application/json" ], - "produces" : [ "application/json" ], - "paths" : { - "/documents" : { - "post" : { - "operationId" : "storeDocument", - "consumes" : [ "application/json" ], - "produces" : [ "application/json" ], - "parameters" : [ { - "in" : "body", - "name" : "body", - "description" : "The request payload to store the document in API Gateway.", - "required" : true, - "schema" : { - "$ref" : "#/definitions/Document" - }, - "x-examples" : { - "application/json" : "{\r\n\t\"displayName\": \"APIGatewayPortsInfoDocument\",\r\n\t\"fileName\": \"APIGatewayPorts.json\",\r\n\t\"fileContent\": \"data:;base64,ew0KICAic3dhZ2dlciIgOiAiMi4wIiwNCiAgImluZm8iIDogew0KICAgICJkZXNjcmlwdGlvbiIgOiAiVGhpcyBzd2FnZ2VyIGRvYyBjb250YWlucyBBUEkgRGVmaW5pdGlvbiBvZiB0aGUgcG9ydHMgQ1JVRCBvcGVyYXRpb25zLiIsDQogICAgInZlcnNpb24iIDogIjEwLjEiLA0KICAgICJ0aXRsZSIgOiAiUG9ydHMgY29uZmlndXJhdGlvbnMuIg0KICB9LA0KICAiaG9zdCIgOiAibG9jYWxob3N0OjU1NTUiLA0KICAiYmFzZVBhdGgiIDogIi9yZXN0L2FwaWdhdGV3YXkiLA0KICAic2NoZW1lcyIgOiBbICJodHRwIiBdLA0KICAiY29uc3VtZXMiIDogWyAicGxhaW4vdGV4dCIgXSwNCiAgInByb2R1Y2VzIiA6IFsgImFwcGxpY2F0aW9uL2pzb24iIF0sDQogICJwYXRocyIgOiB7DQogICAgIi9wb3J0cyIgOiB7DQogICAgICAicG9zdCIgOiB7DQogICAgICAgICJvcGVyYXRpb25JZCIgOiAiY3JlYXRlUG9ydCIsDQogICAgICAgICJjb25zdW1lcyIgOiBbICJhcHBsaWNhdGlvbi9qc29uIiBdLA0KICAgICAgICAicHJvZHVjZXMiIDogWyAiYXBwbGljYXRpb24vanNvbiIgXSwNCiAgICAgICAgInBhcmFtZXRlcnMiIDogWyB7DQogICAgICAgICAgImluIiA6ICJib2R5IiwNCiAgICAgICAgICAibmFtZSIgOiAiYm9keSIsDQogICAgICAgICAgImRlc2NyaXB0aW9uIiA6ICJwb3J0IHBheWxvYWQiLA0KICAgICAgICAgICJyZXF1aXJlZCIgOiB0cnVlLA0KICAgICAgICAgICJzY2hlbWEiIDogew0KICAgICAgICAgICAgIiRyZWYiIDogIiMvZGVmaW5pdGlvbnMvUG9ydCINCiAgICAgICAgICB9DQogICAgICAgIH0gXSwNCiAgICAgICAgInJlc3BvbnNlcyIgOiB7DQogICAgICAgICAgIjIwMSIgOiB7DQogICAgICAgICAgICAiZGVzY3JpcHRpb24iIDogIkNyZWF0ZWQiLA0KICAgICAgICAgICAgInNjaGVtYSIgOiB7DQogICAgICAgICAgICAgICIkcmVmIiA6ICIjL2RlZmluaXRpb25zL1BvcnQiDQogICAgICAgICAgICB9DQogICAgICAgICAgfSwNCiAgICAgICAgICAiNDAwIiA6IHsNCiAgICAgICAgICAgICJkZXNjcmlwdGlvbiIgOiAiQmFkIHJlcXVlc3QiDQogICAgICAgICAgfSwNCiAgICAgICAgICAiNDAxIiA6IHsNCiAgICAgICAgICAgICJkZXNjcmlwdGlvbiIgOiAiQWNjZXNzIERlbmllZCINCiAgICAgICAgICB9DQogICAgICAgIH0sDQogICAgICAgICJzZWN1cml0eSIgOiBbIHsNCiAgICAgICAgICAiQmFzaWMiIDogWyBdDQogICAgICAgIH0gXQ0KICAgICAgfSwNCiAgICAgICJwdXQiIDogew0KICAgICAgICAib3BlcmF0aW9uSWQiIDogInVwZGF0ZVBvcnQiLA0KICAgICAgICAiY29uc3VtZXMiIDogWyAiYXBwbGljYXRpb24vanNvbiIgXSwNCiAgICAgICAgInByb2R1Y2VzIiA6IFsgImFwcGxpY2F0aW9uL2pzb24iIF0sDQogICAgICAgICJwYXJhbWV0ZXJzIiA6IFsgew0KICAgICAgICAgICJpbiIgOiAiYm9keSIsDQogICAgICAgICAgIm5hbWUiIDogImJvZHkiLA0KICAgICAgICAgICJkZXNjcmlwdGlvbiIgOiAiIiwNCiAgICAgICAgICAicmVxdWlyZWQiIDogdHJ1ZSwNCiAgICAgICAgICAic2NoZW1hIiA6IHsNCiAgICAgICAgICAgICIkcmVmIiA6ICIjL2RlZmluaXRpb25zL1BvcnQiDQogICAgICAgICAgfQ0KICAgICAgICB9IF0sDQogICAgICAgICJyZXNwb25zZXMiIDogew0KICAgICAgICAgICIyMDAiIDogew0KICAgICAgICAgICAgImRlc2NyaXB0aW9uIiA6ICIiLA0KICAgICAgICAgICAgInNjaGVtYSIgOiB7DQogICAgICAgICAgICAgICIkcmVmIiA6ICIjL2RlZmluaXRpb25zL1BvcnQiDQogICAgICAgICAgICB9DQogICAgICAgICAgfSwNCiAgICAgICAgICAiNTAwIiA6IHsNCiAgICAgICAgICAgICJkZXNjcmlwdGlvbiIgOiAiIg0KICAgICAgICAgIH0sDQogICAgICAgICAgIjQwMSIgOiB7DQogICAgICAgICAgICAiZGVzY3JpcHRpb24iIDogIiINCiAgICAgICAgICB9LA0KICAgICAgICAgICI0MDAiIDogew0KICAgICAgICAgICAgImRlc2NyaXB0aW9uIiA6ICIiDQogICAgICAgICAgfQ0KICAgICAgICB9LA0KICAgICAgICAic2VjdXJpdHkiIDogWyB7DQogICAgICAgICAgIkJhc2ljIiA6IFsgXQ0KICAgICAgICB9IF0NCiAgICAgIH0sDQogICAgICAiZGVsZXRlIiA6IHsNCiAgICAgICAgIm9wZXJhdGlvbklkIiA6ICJkZWxldGVQb3J0IiwNCiAgICAgICAgImNvbnN1bWVzIiA6IFsgImFwcGxpY2F0aW9uL2pzb24iIF0sDQogICAgICAgICJwcm9kdWNlcyIgOiBbICJhcHBsaWNhdGlvbi9qc29uIiBdLA0KICAgICAgICAicGFyYW1ldGVycyIgOiBbIHsNCiAgICAgICAgICAibmFtZSIgOiAibGlzdGVuZXJLZXkiLA0KICAgICAgICAgICJpbiIgOiAicXVlcnkiLA0KICAgICAgICAgICJyZXF1aXJlZCIgOiB0cnVlLA0KICAgICAgICAgICJ0eXBlIiA6ICJzdHJpbmciLA0KICAgICAgICAgICJ4LWV4YW1wbGUiIDogIkhUVFBMaXN0ZW5lckA1NTU1Ig0KICAgICAgICB9LCB7DQogICAgICAgICAgIm5hbWUiIDogInBrZyIsDQogICAgICAgICAgImluIiA6ICJxdWVyeSIsDQogICAgICAgICAgInJlcXVpcmVkIiA6IHRydWUsDQogICAgICAgICAgInR5cGUiIDogInN0cmluZyIsDQogICAgICAgICAgIngtZXhhbXBsZSIgOiAiV21Sb290Ig0KICAgICAgICB9IF0sDQogICAgICAgICJyZXNwb25zZXMiIDogew0KICAgICAgICAgICI0MDEiIDogew0KICAgICAgICAgICAgImRlc2NyaXB0aW9uIiA6ICIiDQogICAgICAgICAgfSwNCiAgICAgICAgICAiMjA0IiA6IHsNCiAgICAgICAgICAgICJkZXNjcmlwdGlvbiIgOiAiIg0KICAgICAgICAgIH0sDQogICAgICAgICAgIjQwNCIgOiB7DQogICAgICAgICAgICAiZGVzY3JpcHRpb24iIDogIiINCiAgICAgICAgICB9DQogICAgICAgIH0sDQogICAgICAgICJzZWN1cml0eSIgOiBbIHsNCiAgICAgICAgICAiQmFzaWMiIDogWyBdDQogICAgICAgIH0gXQ0KICAgICAgfQ0KICAgIH0sDQogICAgIi9wb3J0cy9lbmFibGUiIDogew0KICAgICAgInB1dCIgOiB7DQogICAgICAgICJvcGVyYXRpb25JZCIgOiAiZW5hYmxlUG9ydCIsDQogICAgICAgICJjb25zdW1lcyIgOiBbICJhcHBsaWNhdGlvbi9qc29uIiBdLA0KICAgICAgICAicHJvZHVjZXMiIDogWyAiYXBwbGljYXRpb24vanNvbiIgXSwNCiAgICAgICAgInBhcmFtZXRlcnMiIDogWyB7DQogICAgICAgICAgImluIiA6ICJib2R5IiwNCiAgICAgICAgICAibmFtZSIgOiAiYm9keSIsDQogICAgICAgICAgImRlc2NyaXB0aW9uIiA6ICIiLA0KICAgICAgICAgICJyZXF1aXJlZCIgOiB0cnVlLA0KICAgICAgICAgICJzY2hlbWEiIDogew0KICAgICAgICAgICAgIiRyZWYiIDogIiMvZGVmaW5pdGlvbnMvUG9ydEVuYWJsZURpc2FibGUiDQogICAgICAgICAgfQ0KICAgICAgICB9IF0sDQogICAgICAgICJyZXNwb25zZXMiIDogew0KICAgICAgICAgICIyMDAiIDogew0KICAgICAgICAgICAgImRlc2NyaXB0aW9uIiA6ICIiLA0KICAgICAgICAgICAgInNjaGVtYSIgOiB7DQogICAgICAgICAgICAgICIkcmVmIiA6ICIjL2RlZmluaXRpb25zL1BvcnRFbmFibGVEaXNhYmxlIg0KICAgICAgICAgICAgfQ0KICAgICAgICAgIH0sDQogICAgICAgICAgIjUwMCIgOiB7DQogICAgICAgICAgICAiZGVzY3JpcHRpb24iIDogIiINCiAgICAgICAgICB9LA0KICAgICAgICAgICI0MDEiIDogew0KICAgICAgICAgICAgImRlc2NyaXB0aW9uIiA6ICIiDQogICAgICAgICAgfSwNCiAgICAgICAgICAiNDAwIiA6IHsNCiAgICAgICAgICAgICJkZXNjcmlwdGlvbiIgOiAiIg0KICAgICAgICAgIH0NCiAgICAgICAgfSwNCiAgICAgICAgInNlY3VyaXR5IiA6IFsgew0KICAgICAgICAgICJCYXNpYyIgOiBbIF0NCiAgICAgICAgfSBdDQogICAgICB9DQogICAgfSwNCiAgICAiL3BvcnRzL2Rpc2FibGUiIDogew0KICAgICAgInB1dCIgOiB7DQogICAgICAgICJvcGVyYXRpb25JZCIgOiAiZGRpc2FibGVQb3J0IiwNCiAgICAgICAgImNvbnN1bWVzIiA6IFsgImFwcGxpY2F0aW9uL2pzb24iIF0sDQogICAgICAgICJwcm9kdWNlcyIgOiBbICJhcHBsaWNhdGlvbi9qc29uIiBdLA0KICAgICAgICAicGFyYW1ldGVycyIgOiBbIHsNCiAgICAgICAgICAiaW4iIDogImJvZHkiLA0KICAgICAgICAgICJuYW1lIiA6ICJib2R5IiwNCiAgICAgICAgICAiZGVzY3JpcHRpb24iIDogIiIsDQogICAgICAgICAgInJlcXVpcmVkIiA6IHRydWUsDQogICAgICAgICAgInNjaGVtYSIgOiB7DQogICAgICAgICAgICAiJHJlZiIgOiAiIy9kZWZpbml0aW9ucy9Qb3J0RW5hYmxlRGlzYWJsZSINCiAgICAgICAgICB9DQogICAgICAgIH0gXSwNCiAgICAgICAgInJlc3BvbnNlcyIgOiB7DQogICAgICAgICAgIjIwMCIgOiB7DQogICAgICAgICAgICAiZGVzY3JpcHRpb24iIDogIiIsDQogICAgICAgICAgICAic2NoZW1hIiA6IHsNCiAgICAgICAgICAgICAgIiRyZWYiIDogIiMvZGVmaW5pdGlvbnMvUG9ydEVuYWJsZURpc2FibGUiDQogICAgICAgICAgICB9DQogICAgICAgICAgfSwNCiAgICAgICAgICAiNTAwIiA6IHsNCiAgICAgICAgICAgICJkZXNjcmlwdGlvbiIgOiAiIg0KICAgICAgICAgIH0sDQogICAgICAgICAgIjQwMSIgOiB7DQogICAgICAgICAgICAiZGVzY3JpcHRpb24iIDogIiINCiAgICAgICAgICB9LA0KICAgICAgICAgICI0MDAiIDogew0KICAgICAgICAgICAgImRlc2NyaXB0aW9uIiA6ICIiDQogICAgICAgICAgfQ0KICAgICAgICB9LA0KICAgICAgICAic2VjdXJpdHkiIDogWyB7DQogICAgICAgICAgIkJhc2ljIiA6IFsgXQ0KICAgICAgICB9IF0NCiAgICAgIH0NCiAgICB9DQogIH0sDQogICJzZWN1cml0eURlZmluaXRpb25zIiA6IHsNCiAgICAiQmFzaWMiIDogew0KICAgICAgImRlc2NyaXB0aW9uIiA6ICJBUEkgR2F0ZXdheSBBZG1pbmlzdHJhdG9yIGFuZCBBUEkgR2F0ZXdheSBwcm92aWRlciIsDQogICAgICAidHlwZSIgOiAiYmFzaWMiDQogICAgfQ0KICB9LA0KICAiZGVmaW5pdGlvbnMiIDogew0KICAgICJQb3J0IiA6IHsNCiAgICAgICJ0eXBlIiA6ICJvYmplY3QiLA0KICAgICAgInByb3BlcnRpZXMiIDogew0KICAgICAgICAicG9ydCIgOiB7DQogICAgICAgICAgInR5cGUiIDogImludGVnZXIiLA0KICAgICAgICAgICJmb3JtYXQiIDogImludDMyIg0KICAgICAgICB9LA0KICAgICAgICAicHJvdG9jb2wiIDogew0KICAgICAgICAgICJ0eXBlIiA6ICJzdHJpbmciDQogICAgICAgIH0sDQogICAgICAgICJwa2ciIDogew0KICAgICAgICAgICJ0eXBlIiA6ICJzdHJpbmciDQogICAgICAgIH0sDQogICAgICAgICJlbmFibGVkIiA6IHsNCiAgICAgICAgICAidHlwZSIgOiAic3RyaW5nIg0KICAgICAgICB9LA0KICAgICAgICAia2V5IiA6IHsNCiAgICAgICAgICAidHlwZSIgOiAic3RyaW5nIg0KICAgICAgICB9LA0KICAgICAgICAidW5pcXVlSUQiIDogew0KICAgICAgICAgICJ0eXBlIiA6ICJzdHJpbmciDQogICAgICAgIH0sDQogICAgICAgICJwb3J0QWxpYXMiIDogew0KICAgICAgICAgICJ0eXBlIiA6ICJzdHJpbmciDQogICAgICAgIH0sDQogICAgICAgICJwb3J0RGVzY3JpcHRpb24iIDogew0KICAgICAgICAgICJ0eXBlIiA6ICJzdHJpbmciDQogICAgICAgIH0sDQogICAgICAgICJmYWN0b3J5S2V5IiA6IHsNCiAgICAgICAgICAidHlwZSIgOiAic3RyaW5nIg0KICAgICAgICB9LA0KICAgICAgICAiY29uZmlnVVJMIiA6IHsNCiAgICAgICAgICAidHlwZSIgOiAic3RyaW5nIg0KICAgICAgICB9LA0KICAgICAgICAicHJvdmlkZXIiIDogew0KICAgICAgICAgICJ0eXBlIiA6ICJzdHJpbmciDQogICAgICAgIH0sDQogICAgICAgICJsaXN0ZW5lclR5cGUiIDogew0KICAgICAgICAgICJ0eXBlIiA6ICJzdHJpbmciDQogICAgICAgIH0sDQogICAgICAgICJjbGllbnRBdXRoIiA6IHsNCiAgICAgICAgICAidHlwZSIgOiAic3RyaW5nIg0KICAgICAgICB9LA0KICAgICAgICAiaWRQcm92aWRlciIgOiB7DQogICAgICAgICAgInR5cGUiIDogIm9iamVjdCINCiAgICAgICAgfSwNCiAgICAgICAgInNzbCIgOiB7DQogICAgICAgICAgInR5cGUiIDogInN0cmluZyINCiAgICAgICAgfSwNCiAgICAgICAgIm1heFF1ZXVlIiA6IHsNCiAgICAgICAgICAidHlwZSIgOiAic3RyaW5nIg0KICAgICAgICB9LA0KICAgICAgICAia2VlcEFsaXZlVGltZW91dCIgOiB7DQogICAgICAgICAgInR5cGUiIDogInN0cmluZyINCiAgICAgICAgfSwNCiAgICAgICAgInRocmVhZFBvb2wiIDogew0KICAgICAgICAgICJ0eXBlIiA6ICJzdHJpbmciDQogICAgICAgIH0sDQogICAgICAgICJtaW5UaHJlYWQiIDogew0KICAgICAgICAgICJ0eXBlIiA6ICJzdHJpbmciDQogICAgICAgIH0sDQogICAgICAgICJtYXhUaHJlYWQiIDogew0KICAgICAgICAgICJ0eXBlIiA6ICJzdHJpbmciDQogICAgICAgIH0sDQogICAgICAgICJ0aHJlYWRQcmlvcml0eSIgOiB7DQogICAgICAgICAgInR5cGUiIDogInN0cmluZyINCiAgICAgICAgfSwNCiAgICAgICAgInVzZWRUaHJlYWRDb3VudCIgOiB7DQogICAgICAgICAgInR5cGUiIDogInN0cmluZyINCiAgICAgICAgfSwNCiAgICAgICAgImludGVybmFsUG9ydCIgOiB7DQogICAgICAgICAgInR5cGUiIDogInN0cmluZyINCiAgICAgICAgfSwNCiAgICAgICAgImN1ckRlbGF5IiA6IHsNCiAgICAgICAgICAidHlwZSIgOiAic3RyaW5nIg0KICAgICAgICB9LA0KICAgICAgICAic3RlcHNpemUiIDogew0KICAgICAgICAgICJ0eXBlIiA6ICJzdHJpbmciDQogICAgICAgIH0sDQogICAgICAgICJzdXNwZW5kZWQiIDogew0KICAgICAgICAgICJ0eXBlIiA6ICJzdHJpbmciDQogICAgICAgIH0sDQogICAgICAgICJqc3NlRW5hYmxlZFByb3RvY29scyIgOiB7DQogICAgICAgICAgInR5cGUiIDogIm9iamVjdCINCiAgICAgICAgfSwNCiAgICAgICAgInN0YXR1cyIgOiB7DQogICAgICAgICAgInR5cGUiIDogInN0cmluZyINCiAgICAgICAgfSwNCiAgICAgICAgImxpc3RlbmluZyIgOiB7DQogICAgICAgICAgInR5cGUiIDogInN0cmluZyINCiAgICAgICAgfSwNCiAgICAgICAgImFjY2Vzc01vZGUiIDogew0KICAgICAgICAgICJ0eXBlIiA6ICJzdHJpbmciDQogICAgICAgIH0sDQogICAgICAgICJoYXNBY2Nlc3NMaXN0IiA6IHsNCiAgICAgICAgICAidHlwZSIgOiAic3RyaW5nIg0KICAgICAgICB9LA0KICAgICAgICAiaXBBY2Nlc3NNb2RlIiA6IHsNCiAgICAgICAgICAidHlwZSIgOiAic3RyaW5nIg0KICAgICAgICB9LA0KICAgICAgICAiaGFzSVBBY2Nlc3NMaXN0IiA6IHsNCiAgICAgICAgICAidHlwZSIgOiAic3RyaW5nIg0KICAgICAgICB9DQogICAgICB9LA0KICAgICAgImRlc2NyaXB0aW9uIiA6ICJUaGlzIGRlZmluZXMgdGhlIHZhcmlvdXMgZmllbGRzIHRoYXQgcmVsYXRlZCB0byBhIHBhcnRpY3VsYXIgcG9ydC4iDQogICAgfSwNCiAgICAiUG9ydEVuYWJsZURpc2FibGUiIDogew0KICAgICAgInR5cGUiIDogIm9iamVjdCIsDQogICAgICAicHJvcGVydGllcyIgOiB7DQogICAgICAgICJsaXN0ZW5lcktleSIgOiB7DQogICAgICAgICAgInR5cGUiIDogInN0cmluZyINCiAgICAgICAgfSwNCiAgICAgICAgInBrZyIgOiB7DQogICAgICAgICAgInR5cGUiIDogInN0cmluZyINCiAgICAgICAgfSwNCiAgICAgICAgInJlcXVlc3RTZXJ2aWNlU3RhdHVzIiA6IHsNCiAgICAgICAgICAidHlwZSIgOiAic3RyaW5nIg0KICAgICAgICB9LA0KICAgICAgICAiZ2V0JHJlc291cmNlSUQiIDogew0KICAgICAgICAgICJ0eXBlIiA6ICJzdHJpbmciDQogICAgICAgIH0sDQogICAgICAgICJtZXNzYWdlIiA6IHsNCiAgICAgICAgICAidHlwZSIgOiAic3RyaW5nIg0KICAgICAgICB9DQogICAgICB9DQogICAgfQ0KICB9DQp9\"\r\n}" - } - } ], - "responses" : { - "200" : { - "description" : "This status code indicates that the given document has been stored successfully in API Gateway.", - "examples" : { - "application/json" : "{\r\n\t\"id\": \"be9147a8-6e53-4472-b1bd-16337a84d314\"\r\n}" - }, - "schema" : { - "$ref" : "#/definitions/DocumentResponse" - } - }, - "400" : { - "description" : "This status code indicates invalid request or bad input." - }, - "401" : { - "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." - }, - "404" : { - "description" : "This status code indicates that the requested resource is not found." - }, - "405" : { - "description" : "This status code indicates that the requested HTTP method is not supported for the resource." - }, - "500" : { - "description" : "This status code indicates an error occurred while storing the given document in API Gateway." - } - }, - "security" : [ { - "Basic" : [ ] - } ] - } - }, - "/documents/{documentId}" : { - "get" : { - "description" : "Retrieves the requested document from API Gateway", - "operationId" : "getDocument", - "produces" : [ "application/json" ], - "parameters" : [ { - "name" : "documentId", - "in" : "path", - "description" : "The unique identifier of the document for retrieving from API Gateway.", - "required" : true, - "type" : "string", - "x-example" : "353bd366-47d4-4703-aecf-9cb40cdcc864" - } ], - "responses" : { - "200" : { - "description" : "This status code indicates that the given document has been retrieved successfully from API Gateway.", - "examples" : { - "application/json" : "{\r\n\t\"documents\": [{\r\n\t\t\"id\": \"c98c7290-bc68-4da3-a39e-545c714e75bc\",\r\n\t\t\"fileName\": \"SamplePowerpoint.pptx\",\r\n\t\t\"displayName\": \"How to upload documents to the store?\",\r\n\t\t\"fileContent\": \"data:application/vnd.openxmlformats-officedocument.presentationml.presentation;base64,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\"\r\n\t}]\r\n}" - }, - "schema" : { - "$ref" : "#/definitions/Document" - } - }, - "400" : { - "description" : "This status code indicates invalid request or bad input." - }, - "401" : { - "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." - }, - "404" : { - "description" : "This status code indicates that the requested resource is not found." - }, - "405" : { - "description" : "This status code indicates that the requested HTTP method is not supported for the resource." - }, - "500" : { - "description" : "This status code indicates an error occurred while retrieving the given document from API Gateway." - } - }, - "security" : [ { - "Basic" : [ ] - } ] - }, - "put" : { - "operationId" : "updateDocumentContent", - "consumes" : [ "application/json" ], - "produces" : [ "application/json" ], - "parameters" : [ { - "name" : "documentId", - "in" : "path", - "description" : "The unique identifier of the document to update", - "required" : true, - "type" : "string", - "x-example" : "353bd366-47d4-4703-aecf-9cb40cdcc864" - }, { - "in" : "body", - "name" : "body", - "description" : "The request payload to update the document in API Gateway.", - "required" : true, - "schema" : { - "$ref" : "#/definitions/Document" - }, - "x-examples" : { - "application/json" : "{\r\n\t\"displayName\": \"APIGatewayPortsInfoDocumentUpdated\",\r\n\t\"fileName\": \"APIGatewayPorts.json\",\r\n\t\"fileContent\": \"data:;base64,ew0KICAic3dhZ2dlciIgOiAiMi4wIiwNCiAgImluZm8iIDogew0KICAgICJkZXNjcmlwdGlvbiIgOiAiVGhpcyBzd2FnZ2VyIGRvYyBjb250YWlucyBBUEkgRGVmaW5pdGlvbiBvZiB0aGUgcG9ydHMgQ1JVRCBvcGVyYXRpb25zLiIsDQogICAgInZlcnNpb24iIDogIjEwLjEiLA0KICAgICJ0aXRsZSIgOiAiUG9ydHMgY29uZmlndXJhdGlvbnMuIg0KICB9LA0KICAiaG9zdCIgOiAibG9jYWxob3N0OjU1NTUiLA0KICAiYmFzZVBhdGgiIDogIi9yZXN0L2FwaWdhdGV3YXkiLA0KICAic2NoZW1lcyIgOiBbICJodHRwIiBdLA0KICAiY29uc3VtZXMiIDogWyAicGxhaW4vdGV4dCIgXSwNCiAgInByb2R1Y2VzIiA6IFsgImFwcGxpY2F0aW9uL2pzb24iIF0sDQogICJwYXRocyIgOiB7DQogICAgIi9wb3J0cyIgOiB7DQogICAgICAicG9zdCIgOiB7DQogICAgICAgICJvcGVyYXRpb25JZCIgOiAiY3JlYXRlUG9ydCIsDQogICAgICAgICJjb25zdW1lcyIgOiBbICJhcHBsaWNhdGlvbi9qc29uIiBdLA0KICAgICAgICAicHJvZHVjZXMiIDogWyAiYXBwbGljYXRpb24vanNvbiIgXSwNCiAgICAgICAgInBhcmFtZXRlcnMiIDogWyB7DQogICAgICAgICAgImluIiA6ICJib2R5IiwNCiAgICAgICAgICAibmFtZSIgOiAiYm9keSIsDQogICAgICAgICAgImRlc2NyaXB0aW9uIiA6ICJwb3J0IHBheWxvYWQiLA0KICAgICAgICAgICJyZXF1aXJlZCIgOiB0cnVlLA0KICAgICAgICAgICJzY2hlbWEiIDogew0KICAgICAgICAgICAgIiRyZWYiIDogIiMvZGVmaW5pdGlvbnMvUG9ydCINCiAgICAgICAgICB9DQogICAgICAgIH0gXSwNCiAgICAgICAgInJlc3BvbnNlcyIgOiB7DQogICAgICAgICAgIjIwMSIgOiB7DQogICAgICAgICAgICAiZGVzY3JpcHRpb24iIDogIkNyZWF0ZWQiLA0KICAgICAgICAgICAgInNjaGVtYSIgOiB7DQogICAgICAgICAgICAgICIkcmVmIiA6ICIjL2RlZmluaXRpb25zL1BvcnQiDQogICAgICAgICAgICB9DQogICAgICAgICAgfSwNCiAgICAgICAgICAiNDAwIiA6IHsNCiAgICAgICAgICAgICJkZXNjcmlwdGlvbiIgOiAiQmFkIHJlcXVlc3QiDQogICAgICAgICAgfSwNCiAgICAgICAgICAiNDAxIiA6IHsNCiAgICAgICAgICAgICJkZXNjcmlwdGlvbiIgOiAiQWNjZXNzIERlbmllZCINCiAgICAgICAgICB9DQogICAgICAgIH0sDQogICAgICAgICJzZWN1cml0eSIgOiBbIHsNCiAgICAgICAgICAiQmFzaWMiIDogWyBdDQogICAgICAgIH0gXQ0KICAgICAgfSwNCiAgICAgICJwdXQiIDogew0KICAgICAgICAib3BlcmF0aW9uSWQiIDogInVwZGF0ZVBvcnQiLA0KICAgICAgICAiY29uc3VtZXMiIDogWyAiYXBwbGljYXRpb24vanNvbiIgXSwNCiAgICAgICAgInByb2R1Y2VzIiA6IFsgImFwcGxpY2F0aW9uL2pzb24iIF0sDQogICAgICAgICJwYXJhbWV0ZXJzIiA6IFsgew0KICAgICAgICAgICJpbiIgOiAiYm9keSIsDQogICAgICAgICAgIm5hbWUiIDogImJvZHkiLA0KICAgICAgICAgICJkZXNjcmlwdGlvbiIgOiAiIiwNCiAgICAgICAgICAicmVxdWlyZWQiIDogdHJ1ZSwNCiAgICAgICAgICAic2NoZW1hIiA6IHsNCiAgICAgICAgICAgICIkcmVmIiA6ICIjL2RlZmluaXRpb25zL1BvcnQiDQogICAgICAgICAgfQ0KICAgICAgICB9IF0sDQogICAgICAgICJyZXNwb25zZXMiIDogew0KICAgICAgICAgICIyMDAiIDogew0KICAgICAgICAgICAgImRlc2NyaXB0aW9uIiA6ICIiLA0KICAgICAgICAgICAgInNjaGVtYSIgOiB7DQogICAgICAgICAgICAgICIkcmVmIiA6ICIjL2RlZmluaXRpb25zL1BvcnQiDQogICAgICAgICAgICB9DQogICAgICAgICAgfSwNCiAgICAgICAgICAiNTAwIiA6IHsNCiAgICAgICAgICAgICJkZXNjcmlwdGlvbiIgOiAiIg0KICAgICAgICAgIH0sDQogICAgICAgICAgIjQwMSIgOiB7DQogICAgICAgICAgICAiZGVzY3JpcHRpb24iIDogIiINCiAgICAgICAgICB9LA0KICAgICAgICAgICI0MDAiIDogew0KICAgICAgICAgICAgImRlc2NyaXB0aW9uIiA6ICIiDQogICAgICAgICAgfQ0KICAgICAgICB9LA0KICAgICAgICAic2VjdXJpdHkiIDogWyB7DQogICAgICAgICAgIkJhc2ljIiA6IFsgXQ0KICAgICAgICB9IF0NCiAgICAgIH0sDQogICAgICAiZGVsZXRlIiA6IHsNCiAgICAgICAgIm9wZXJhdGlvbklkIiA6ICJkZWxldGVQb3J0IiwNCiAgICAgICAgImNvbnN1bWVzIiA6IFsgImFwcGxpY2F0aW9uL2pzb24iIF0sDQogICAgICAgICJwcm9kdWNlcyIgOiBbICJhcHBsaWNhdGlvbi9qc29uIiBdLA0KICAgICAgICAicGFyYW1ldGVycyIgOiBbIHsNCiAgICAgICAgICAibmFtZSIgOiAibGlzdGVuZXJLZXkiLA0KICAgICAgICAgICJpbiIgOiAicXVlcnkiLA0KICAgICAgICAgICJyZXF1aXJlZCIgOiB0cnVlLA0KICAgICAgICAgICJ0eXBlIiA6ICJzdHJpbmciLA0KICAgICAgICAgICJ4LWV4YW1wbGUiIDogIkhUVFBMaXN0ZW5lckA1NTU1Ig0KICAgICAgICB9LCB7DQogICAgICAgICAgIm5hbWUiIDogInBrZyIsDQogICAgICAgICAgImluIiA6ICJxdWVyeSIsDQogICAgICAgICAgInJlcXVpcmVkIiA6IHRydWUsDQogICAgICAgICAgInR5cGUiIDogInN0cmluZyIsDQogICAgICAgICAgIngtZXhhbXBsZSIgOiAiV21Sb290Ig0KICAgICAgICB9IF0sDQogICAgICAgICJyZXNwb25zZXMiIDogew0KICAgICAgICAgICI0MDEiIDogew0KICAgICAgICAgICAgImRlc2NyaXB0aW9uIiA6ICIiDQogICAgICAgICAgfSwNCiAgICAgICAgICAiMjA0IiA6IHsNCiAgICAgICAgICAgICJkZXNjcmlwdGlvbiIgOiAiIg0KICAgICAgICAgIH0sDQogICAgICAgICAgIjQwNCIgOiB7DQogICAgICAgICAgICAiZGVzY3JpcHRpb24iIDogIiINCiAgICAgICAgICB9DQogICAgICAgIH0sDQogICAgICAgICJzZWN1cml0eSIgOiBbIHsNCiAgICAgICAgICAiQmFzaWMiIDogWyBdDQogICAgICAgIH0gXQ0KICAgICAgfQ0KICAgIH0sDQogICAgIi9wb3J0cy9lbmFibGUiIDogew0KICAgICAgInB1dCIgOiB7DQogICAgICAgICJvcGVyYXRpb25JZCIgOiAiZW5hYmxlUG9ydCIsDQogICAgICAgICJjb25zdW1lcyIgOiBbICJhcHBsaWNhdGlvbi9qc29uIiBdLA0KICAgICAgICAicHJvZHVjZXMiIDogWyAiYXBwbGljYXRpb24vanNvbiIgXSwNCiAgICAgICAgInBhcmFtZXRlcnMiIDogWyB7DQogICAgICAgICAgImluIiA6ICJib2R5IiwNCiAgICAgICAgICAibmFtZSIgOiAiYm9keSIsDQogICAgICAgICAgImRlc2NyaXB0aW9uIiA6ICIiLA0KICAgICAgICAgICJyZXF1aXJlZCIgOiB0cnVlLA0KICAgICAgICAgICJzY2hlbWEiIDogew0KICAgICAgICAgICAgIiRyZWYiIDogIiMvZGVmaW5pdGlvbnMvUG9ydEVuYWJsZURpc2FibGUiDQogICAgICAgICAgfQ0KICAgICAgICB9IF0sDQogICAgICAgICJyZXNwb25zZXMiIDogew0KICAgICAgICAgICIyMDAiIDogew0KICAgICAgICAgICAgImRlc2NyaXB0aW9uIiA6ICIiLA0KICAgICAgICAgICAgInNjaGVtYSIgOiB7DQogICAgICAgICAgICAgICIkcmVmIiA6ICIjL2RlZmluaXRpb25zL1BvcnRFbmFibGVEaXNhYmxlIg0KICAgICAgICAgICAgfQ0KICAgICAgICAgIH0sDQogICAgICAgICAgIjUwMCIgOiB7DQogICAgICAgICAgICAiZGVzY3JpcHRpb24iIDogIiINCiAgICAgICAgICB9LA0KICAgICAgICAgICI0MDEiIDogew0KICAgICAgICAgICAgImRlc2NyaXB0aW9uIiA6ICIiDQogICAgICAgICAgfSwNCiAgICAgICAgICAiNDAwIiA6IHsNCiAgICAgICAgICAgICJkZXNjcmlwdGlvbiIgOiAiIg0KICAgICAgICAgIH0NCiAgICAgICAgfSwNCiAgICAgICAgInNlY3VyaXR5IiA6IFsgew0KICAgICAgICAgICJCYXNpYyIgOiBbIF0NCiAgICAgICAgfSBdDQogICAgICB9DQogICAgfSwNCiAgICAiL3BvcnRzL2Rpc2FibGUiIDogew0KICAgICAgInB1dCIgOiB7DQogICAgICAgICJvcGVyYXRpb25JZCIgOiAiZGRpc2FibGVQb3J0IiwNCiAgICAgICAgImNvbnN1bWVzIiA6IFsgImFwcGxpY2F0aW9uL2pzb24iIF0sDQogICAgICAgICJwcm9kdWNlcyIgOiBbICJhcHBsaWNhdGlvbi9qc29uIiBdLA0KICAgICAgICAicGFyYW1ldGVycyIgOiBbIHsNCiAgICAgICAgICAiaW4iIDogImJvZHkiLA0KICAgICAgICAgICJuYW1lIiA6ICJib2R5IiwNCiAgICAgICAgICAiZGVzY3JpcHRpb24iIDogIiIsDQogICAgICAgICAgInJlcXVpcmVkIiA6IHRydWUsDQogICAgICAgICAgInNjaGVtYSIgOiB7DQogICAgICAgICAgICAiJHJlZiIgOiAiIy9kZWZpbml0aW9ucy9Qb3J0RW5hYmxlRGlzYWJsZSINCiAgICAgICAgICB9DQogICAgICAgIH0gXSwNCiAgICAgICAgInJlc3BvbnNlcyIgOiB7DQogICAgICAgICAgIjIwMCIgOiB7DQogICAgICAgICAgICAiZGVzY3JpcHRpb24iIDogIiIsDQogICAgICAgICAgICAic2NoZW1hIiA6IHsNCiAgICAgICAgICAgICAgIiRyZWYiIDogIiMvZGVmaW5pdGlvbnMvUG9ydEVuYWJsZURpc2FibGUiDQogICAgICAgICAgICB9DQogICAgICAgICAgfSwNCiAgICAgICAgICAiNTAwIiA6IHsNCiAgICAgICAgICAgICJkZXNjcmlwdGlvbiIgOiAiIg0KICAgICAgICAgIH0sDQogICAgICAgICAgIjQwMSIgOiB7DQogICAgICAgICAgICAiZGVzY3JpcHRpb24iIDogIiINCiAgICAgICAgICB9LA0KICAgICAgICAgICI0MDAiIDogew0KICAgICAgICAgICAgImRlc2NyaXB0aW9uIiA6ICIiDQogICAgICAgICAgfQ0KICAgICAgICB9LA0KICAgICAgICAic2VjdXJpdHkiIDogWyB7DQogICAgICAgICAgIkJhc2ljIiA6IFsgXQ0KICAgICAgICB9IF0NCiAgICAgIH0NCiAgICB9DQogIH0sDQogICJzZWN1cml0eURlZmluaXRpb25zIiA6IHsNCiAgICAiQmFzaWMiIDogew0KICAgICAgImRlc2NyaXB0aW9uIiA6ICJBUEkgR2F0ZXdheSBBZG1pbmlzdHJhdG9yIGFuZCBBUEkgR2F0ZXdheSBwcm92aWRlciIsDQogICAgICAidHlwZSIgOiAiYmFzaWMiDQogICAgfQ0KICB9LA0KICAiZGVmaW5pdGlvbnMiIDogew0KICAgICJQb3J0IiA6IHsNCiAgICAgICJ0eXBlIiA6ICJvYmplY3QiLA0KICAgICAgInByb3BlcnRpZXMiIDogew0KICAgICAgICAicG9ydCIgOiB7DQogICAgICAgICAgInR5cGUiIDogImludGVnZXIiLA0KICAgICAgICAgICJmb3JtYXQiIDogImludDMyIg0KICAgICAgICB9LA0KICAgICAgICAicHJvdG9jb2wiIDogew0KICAgICAgICAgICJ0eXBlIiA6ICJzdHJpbmciDQogICAgICAgIH0sDQogICAgICAgICJwa2ciIDogew0KICAgICAgICAgICJ0eXBlIiA6ICJzdHJpbmciDQogICAgICAgIH0sDQogICAgICAgICJlbmFibGVkIiA6IHsNCiAgICAgICAgICAidHlwZSIgOiAic3RyaW5nIg0KICAgICAgICB9LA0KICAgICAgICAia2V5IiA6IHsNCiAgICAgICAgICAidHlwZSIgOiAic3RyaW5nIg0KICAgICAgICB9LA0KICAgICAgICAidW5pcXVlSUQiIDogew0KICAgICAgICAgICJ0eXBlIiA6ICJzdHJpbmciDQogICAgICAgIH0sDQogICAgICAgICJwb3J0QWxpYXMiIDogew0KICAgICAgICAgICJ0eXBlIiA6ICJzdHJpbmciDQogICAgICAgIH0sDQogICAgICAgICJwb3J0RGVzY3JpcHRpb24iIDogew0KICAgICAgICAgICJ0eXBlIiA6ICJzdHJpbmciDQogICAgICAgIH0sDQogICAgICAgICJmYWN0b3J5S2V5IiA6IHsNCiAgICAgICAgICAidHlwZSIgOiAic3RyaW5nIg0KICAgICAgICB9LA0KICAgICAgICAiY29uZmlnVVJMIiA6IHsNCiAgICAgICAgICAidHlwZSIgOiAic3RyaW5nIg0KICAgICAgICB9LA0KICAgICAgICAicHJvdmlkZXIiIDogew0KICAgICAgICAgICJ0eXBlIiA6ICJzdHJpbmciDQogICAgICAgIH0sDQogICAgICAgICJsaXN0ZW5lclR5cGUiIDogew0KICAgICAgICAgICJ0eXBlIiA6ICJzdHJpbmciDQogICAgICAgIH0sDQogICAgICAgICJjbGllbnRBdXRoIiA6IHsNCiAgICAgICAgICAidHlwZSIgOiAic3RyaW5nIg0KICAgICAgICB9LA0KICAgICAgICAiaWRQcm92aWRlciIgOiB7DQogICAgICAgICAgInR5cGUiIDogIm9iamVjdCINCiAgICAgICAgfSwNCiAgICAgICAgInNzbCIgOiB7DQogICAgICAgICAgInR5cGUiIDogInN0cmluZyINCiAgICAgICAgfSwNCiAgICAgICAgIm1heFF1ZXVlIiA6IHsNCiAgICAgICAgICAidHlwZSIgOiAic3RyaW5nIg0KICAgICAgICB9LA0KICAgICAgICAia2VlcEFsaXZlVGltZW91dCIgOiB7DQogICAgICAgICAgInR5cGUiIDogInN0cmluZyINCiAgICAgICAgfSwNCiAgICAgICAgInRocmVhZFBvb2wiIDogew0KICAgICAgICAgICJ0eXBlIiA6ICJzdHJpbmciDQogICAgICAgIH0sDQogICAgICAgICJtaW5UaHJlYWQiIDogew0KICAgICAgICAgICJ0eXBlIiA6ICJzdHJpbmciDQogICAgICAgIH0sDQogICAgICAgICJtYXhUaHJlYWQiIDogew0KICAgICAgICAgICJ0eXBlIiA6ICJzdHJpbmciDQogICAgICAgIH0sDQogICAgICAgICJ0aHJlYWRQcmlvcml0eSIgOiB7DQogICAgICAgICAgInR5cGUiIDogInN0cmluZyINCiAgICAgICAgfSwNCiAgICAgICAgInVzZWRUaHJlYWRDb3VudCIgOiB7DQogICAgICAgICAgInR5cGUiIDogInN0cmluZyINCiAgICAgICAgfSwNCiAgICAgICAgImludGVybmFsUG9ydCIgOiB7DQogICAgICAgICAgInR5cGUiIDogInN0cmluZyINCiAgICAgICAgfSwNCiAgICAgICAgImN1ckRlbGF5IiA6IHsNCiAgICAgICAgICAidHlwZSIgOiAic3RyaW5nIg0KICAgICAgICB9LA0KICAgICAgICAic3RlcHNpemUiIDogew0KICAgICAgICAgICJ0eXBlIiA6ICJzdHJpbmciDQogICAgICAgIH0sDQogICAgICAgICJzdXNwZW5kZWQiIDogew0KICAgICAgICAgICJ0eXBlIiA6ICJzdHJpbmciDQogICAgICAgIH0sDQogICAgICAgICJqc3NlRW5hYmxlZFByb3RvY29scyIgOiB7DQogICAgICAgICAgInR5cGUiIDogIm9iamVjdCINCiAgICAgICAgfSwNCiAgICAgICAgInN0YXR1cyIgOiB7DQogICAgICAgICAgInR5cGUiIDogInN0cmluZyINCiAgICAgICAgfSwNCiAgICAgICAgImxpc3RlbmluZyIgOiB7DQogICAgICAgICAgInR5cGUiIDogInN0cmluZyINCiAgICAgICAgfSwNCiAgICAgICAgImFjY2Vzc01vZGUiIDogew0KICAgICAgICAgICJ0eXBlIiA6ICJzdHJpbmciDQogICAgICAgIH0sDQogICAgICAgICJoYXNBY2Nlc3NMaXN0IiA6IHsNCiAgICAgICAgICAidHlwZSIgOiAic3RyaW5nIg0KICAgICAgICB9LA0KICAgICAgICAiaXBBY2Nlc3NNb2RlIiA6IHsNCiAgICAgICAgICAidHlwZSIgOiAic3RyaW5nIg0KICAgICAgICB9LA0KICAgICAgICAiaGFzSVBBY2Nlc3NMaXN0IiA6IHsNCiAgICAgICAgICAidHlwZSIgOiAic3RyaW5nIg0KICAgICAgICB9DQogICAgICB9LA0KICAgICAgImRlc2NyaXB0aW9uIiA6ICJUaGlzIGRlZmluZXMgdGhlIHZhcmlvdXMgZmllbGRzIHRoYXQgcmVsYXRlZCB0byBhIHBhcnRpY3VsYXIgcG9ydC4iDQogICAgfSwNCiAgICAiUG9ydEVuYWJsZURpc2FibGUiIDogew0KICAgICAgInR5cGUiIDogIm9iamVjdCIsDQogICAgICAicHJvcGVydGllcyIgOiB7DQogICAgICAgICJsaXN0ZW5lcktleSIgOiB7DQogICAgICAgICAgInR5cGUiIDogInN0cmluZyINCiAgICAgICAgfSwNCiAgICAgICAgInBrZyIgOiB7DQogICAgICAgICAgInR5cGUiIDogInN0cmluZyINCiAgICAgICAgfSwNCiAgICAgICAgInJlcXVlc3RTZXJ2aWNlU3RhdHVzIiA6IHsNCiAgICAgICAgICAidHlwZSIgOiAic3RyaW5nIg0KICAgICAgICB9LA0KICAgICAgICAiZ2V0JHJlc291cmNlSUQiIDogew0KICAgICAgICAgICJ0eXBlIiA6ICJzdHJpbmciDQogICAgICAgIH0sDQogICAgICAgICJtZXNzYWdlIiA6IHsNCiAgICAgICAgICAidHlwZSIgOiAic3RyaW5nIg0KICAgICAgICB9DQogICAgICB9DQogICAgfQ0KICB9DQp9\"\r\n}" - } - } ], - "responses" : { - "200" : { - "description" : "This status code indicates that the given document has been updated successfully in API Gateway.", - "examples" : { - "application/json" : "{\r\n\t\"id\": \"be9147a8-6e53-4472-b1bd-16337a84d314\"\r\n}" - }, - "schema" : { - "$ref" : "#/definitions/DocumentResponse" - } - }, - "400" : { - "description" : "This status code indicates invalid request or bad input." - }, - "401" : { - "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." - }, - "404" : { - "description" : "This status code indicates that the requested resource is not found." - }, - "405" : { - "description" : "This status code indicates that the requested HTTP method is not supported for the resource." - }, - "500" : { - "description" : "This status code indicates an error occurred while updating the given document in API Gateway." - } - }, - "security" : [ { - "Basic" : [ ] - } ] - }, - "delete" : { - "description" : "Deletes the stored document from API Gateway", - "operationId" : "deleteDocument", - "consumes" : [ "application/json" ], - "produces" : [ "application/json" ], - "parameters" : [ { - "name" : "documentId", - "in" : "path", - "description" : "Id of the document for deletion", - "required" : true, - "type" : "string", - "x-example" : "353bd366-47d4-4703-aecf-9cb40cdcc864" - } ], - "responses" : { - "200" : { - "description" : "This status code indicates that the given document has been deleted successfully from API Gateway." - }, - "400" : { - "description" : "This status code indicates invalid request or bad input." - }, - "401" : { - "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." - }, - "404" : { - "description" : "This status code indicates that the requested resource is not found." - }, - "405" : { - "description" : "This status code indicates that the requested HTTP method is not supported for the resource." - }, - "500" : { - "description" : "This status code indicates an error occurred while deleting the given document from API Gateway." - } - }, - "security" : [ { - "Basic" : [ ] - } ] - }, - "patch" : { - "operationId" : "patchDocument", - "consumes" : [ "application/json" ], - "produces" : [ "application/json" ], - "parameters" : [ { - "in" : "body", - "name" : "body", - "description" : "The request payload to patch the document in API Gateway.", - "required" : true, - "schema" : { - "$ref" : "#/definitions/Document" - }, - "x-examples" : { - "application/json" : "{\r\n\t\"displayName\": \"APIGatewayPortsInfoDocument Updated\"\r\n}" - } - } ], - "responses" : { - "200" : { - "description" : "This status code indicates that the given document has been patched successfully in API Gateway.", - "examples" : { - "application/json" : "{\r\n\t\"id\": \"be9147a8-6e53-4472-b1bd-16337a84d314\"\r\n}" - }, - "schema" : { - "$ref" : "#/definitions/DocumentResponse" - } - }, - "400" : { - "description" : "This status code indicates invalid request or bad input." - }, - "401" : { - "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." - }, - "404" : { - "description" : "This status code indicates that the requested resource is not found." - }, - "405" : { - "description" : "This status code indicates that the requested HTTP method is not supported for the resource." - }, - "500" : { - "description" : "This status code indicates an error occurred while patching the given document in API Gateway." - } - }, - "security" : [ { - "Basic" : [ ] - } ] - } - } - }, - "securityDefinitions" : { - "Basic" : { - "description" : "API Gateway Administrator and API Gateway provider", - "type" : "basic" - } - }, - "definitions" : { - "Document" : { - "type" : "object", - "properties" : { - "id" : { - "type" : "string", - "description" : "The unique identifier of the document as stored in API Gateway.", - "readOnly" : true - }, - "displayName" : { - "type" : "string", - "description" : "The display name of the attached document." - }, - "fileName" : { - "type" : "string", - "description" : "The original name of the file uploaded to API Gateway." - }, - "fileContent" : { - "type" : "string", - "description" : "The complete file content in data URL format." - } - }, - "description" : "This model is used to store any document in API Gateway." - }, - "DocumentResponse" : { - "type" : "object", - "properties" : { - "id" : { - "type" : "string", - "description" : "The unique identifier of the document as stored in API Gateway.", - "readOnly" : true - } - }, - "description" : "This defines the response for documents." - } - } -} \ No newline at end of file From f20c10656d1bf651df2b322164495e936dd98a2b Mon Sep 17 00:00:00 2001 From: Dhivakar Asokan <48990091+dhivakar-asokan@users.noreply.github.com> Date: Thu, 21 May 2020 20:30:11 +0530 Subject: [PATCH 06/22] Delete APIGatewayInternalService.json --- .../APIGatewayInternalService.json | 168 ------------------ 1 file changed, 168 deletions(-) delete mode 100644 apigatewayservices/APIGatewayInternalService.json diff --git a/apigatewayservices/APIGatewayInternalService.json b/apigatewayservices/APIGatewayInternalService.json deleted file mode 100644 index e7cfba3..0000000 --- a/apigatewayservices/APIGatewayInternalService.json +++ /dev/null @@ -1,168 +0,0 @@ -{ - "swagger" : "2.0", - "info" : { - "description" : "Services in this category work on identified application. API Gateway will first try to identify the application based on identifiers such as API Key, OAuth token, ip address etc (as defined in the Application) and then executes the API for that application.", - "version" : "10.7", - "title" : "API Gateway Internal Service" - }, - "host" : "localhost:5555", - "basePath" : "/{gateway}", - "schemes" : [ "http" ], - "consumes" : [ "plain/text" ], - "produces" : [ "application/json" ], - "paths" : { - "/security/exchangeIDToken" : { - "post" : { - "description" : "Generate an access token for the given ID Token", - "operationId" : "exchangeIDToken", - "consumes" : [ "application/json" ], - "produces" : [ "application/json" ], - "parameters" : [ { - "in" : "body", - "name" : "body", - "description" : "This parameter describes the request payload of an application that is to be created in API Gateway.", - "required" : true, - "schema" : { - "$ref" : "#/definitions/ServiceInput" - }, - "x-examples" : { - "application/json" : "{\n\t\"idToken\": \"eyJhbGciOiJSUzI1NiIsImtpZCI6IjQ2M2ZlNDgwYzNjNTgzOWJiYjE1ODYxZTA4YzMyZDE4N2ZhZjlhNTYiLCJ0eXAiOiJKV1QifQ.eyJpc3MiOiJodHRwczovL2FjY291bnRzLmdvb2dsZS5jb20iLCJhenAiOiI0MDc0MDg3MTgxOTIuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20iLCJhdWQiOiI0MDc0MDg3MTgxOTIuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20iLCJzdWIiOiIxMTQ5MjgwMjY5NDg0MTkzNTc4MzciLCJlbWFpbCI6Imt1cHBhbi5kaGFybWFAZ21haWwuY29tIiwiZW1haWxfdmVyaWZpZWQiOnRydWUsImF0X2hhc2giOiJUQzJydnRBRnVRRmdnTHhNQVpVTEJ3IiwiaWF0IjoxNTQzOTkxOTAwLCJleHAiOjE1NDM5OTU1MDB9.ONHxCJ-U8Iz6mk2Ybs9REWxp4y97QTVIw6SikgiYcseSBcDix5o_lu4x-j-tl2E4v5OOO29t9wMXFDpQ9KxlEm_s4kAmDdnVc-v_m1OTkYilzGdapwcWaw1xCGA17f7X4FiaqgUQlATYDKL27hEZS4hl1t38Okq-rJl8Gi41kWB2XMcddcNjV19RE_Vu8nX1sSpi24CzddY8-yO9xvvOAKlztdP718D3s10RjGkUfYlorXdVllh-9COENkW0oODTYIU5wyZCYPXlf_SXPZp-9MvIDl_cva_eB-FWdbnbU_vKdUN6NmHZzQ1DWVTRLO1G9vSDzRG8jWavasBUpy_OlA\",\n\t\"gatewayScopes\": [\"okta-server:inventory\"],\n\t\"expiry\": 3600\n}" - } - } ], - "responses" : { - "200" : { - "description" : "This status code indicates that the access token has been successfully generated.", - "examples" : { - "application/json" : "{\n \"accessToken\": \"eyJraWQiOiJzc29zIiwiYWxnIjoiUlMyNTYifQ.eyJzY3AiOlsiaW52ZW50b3J5Il0sInVpZCI6IjExNDkyODAyNjk0ODQxOTM1NzgzNyIsInN1YiI6IjQwNzQwODcxODE5Mi5hcHBzLmdvb2dsZXVzZXJjb250ZW50LmNvbSIsImF1ZCI6InRpbWV0cmF2ZWxzIiwiYXpwIjoiODAzYjdmMTYtNDVjNi00YjFjLWJlMjYtNGRhMDUzZDQwNjQwIiwiaXNzIjoidGVzdC1nYXRld2F5LWlzc3VlciIsImV4cCI6MTU0Mzk5NjExNCwiaWF0IjoxNTQzOTkyNTE1LCJqdGkiOiIzZGQ5M2FmOC0yMWVmLTQyMDYtYTBiNy01MTg2NDUxMTM0YWYifQ.Dty2iLk_DJRZLU0CYhb7Opp_sINP7yRVkgAvafYGrSzDEeWiOXDv_jSO93iQV4TCdU20R5WjypC0HY_xd05VkqozFP0I5irZGYqmVnm8rFonzLXmHBx6JZZdm4Xq-Bq2rTSe08QjOGhd5Xa00FlX2c8-SjYfx3p2wtbBjm2-wsgCqLNCc8m_42VRXpukcpuliZr8dRlrqBU7hUfPHpe-xbn6rsmYPhiS9c9Lau3VK83h2uaj6A6nwq1E2qbG23F9eboZrpjvrSg431ZlPE-jRVy9vNX6n7eIiSLruFwlNwyKnOSuTelzYz__m5mdILaEVTjwjidgI2e-ctdR-4jQWA\",\n \"expiresIn\": 3600,\n \"scopes\": \"inventory\",\n \"tokenType\": \"Bearer\"\n}" - }, - "schema" : { - "$ref" : "#/definitions/ServiceOutput" - } - }, - "400" : { - "description" : "This status code indicates that access token cannot be generated due to the reason specified in the response" - }, - "401" : { - "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." - } - } - } - }, - "/security/getJsonWebToken" : { - "post" : { - "description" : "Generate JWT token with custom claims supplied in the request", - "operationId" : "getJsonWebToken-New", - "consumes" : [ "application/json" ], - "produces" : [ "application/json" ], - "parameters" : [ { - "in" : "body", - "name" : "body", - "description" : "This parameter describes the request payload of an application that is to be created in API Gateway.", - "required" : true, - "schema" : { - "$ref" : "#/definitions/JWTServiceInput" - }, - "x-examples" : { - "application/json" : "{\n\t\"claimsSet\": {\n\t\t\"first_name\": \"Bob\",\n\t\t\"isAdmin\": true\n\t}\n}" - } - } ], - "responses" : { - "200" : { - "description" : "This status code indicates that a JWT has been successfully created.", - "examples" : { - "application/json" : "{\n \"expiresIn\": 600,\n \"tokenType\": \"Bearer\",\n \"accessToken\": \"eyJraWQiOiJzc29zIiwiYWxnIjoiUlMyNTYifQ.eyJzdWIiOiI4MDNiN2YxNi00NWM2LTRiMWMtYmUyNi00ZGEwNTNkNDA2NDAiLCJhdWQiOiJzd2FnZ2VyLWRvYy1hcHAiLCJpc3MiOiJ0ZXN0LWdhdGV3YXktaXNzdWVyIiwiaXNBZG1pbiI6dHJ1ZSwiZXhwIjoxNTQzOTkyMDQ1LCJmaXJzdF9uYW1lIjoiQm9iIiwiaWF0IjoxNTQzOTkxNDQ1fQ.FfV4XxEbsrCgpJCZ1GOLbnRYilvCkFfsLMcm00Xxt4ujNcNY7j-_dUjQSxgn7B1njnQ3obEVe-5UkgYBT8cnnrrJtEjjjfSiY40VECrdqm1QopCx04I71hz2qWhxKphSgk6KkZVioyqme0U5LO9JAu-kw1s1IBPmRWa3iBobWAbugnw8tz5J6T3LiwWVj32dvVtJmc9boq3fkndHmRTcQuk9V6uwArUXxU78v5P92SVjZOyQRGex46FOGqPjNauCkAOno8a3oA5qjIGeFJcQ6eOddFdPc1iZ6SwCCBpAbR_qF1LbPHtG0EXE8buI_rTS2zJBn2_d9cjFkLvL3HBYxQ\"\n}" - }, - "schema" : { - "$ref" : "#/definitions/JWTServiceOutput" - } - }, - "400" : { - "description" : "This status code indicates that jwt cannot be generated due to the reason specified in the response" - }, - "401" : { - "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." - } - } - } - } - }, - "securityDefinitions" : { - "Basic" : { - "description" : "API Gateway Administrator", - "type" : "basic" - } - }, - "definitions" : { - "ServiceInput" : { - "type" : "object", - "properties" : { - "gatewayScopes" : { - "type" : "array", - "description" : "array of gateway scopes", - "items" : { - "type" : "string" - } - }, - "idToken" : { - "type" : "string", - "description" : "id token" - }, - "expiry" : { - "type" : "integer", - "format" : "int64", - "description" : "preferred expiry of the access token" - } - } - }, - "ServiceOutput" : { - "type" : "object", - "properties" : { - "accessToken" : { - "type" : "string", - "description" : "generated access token" - }, - "expiresIn" : { - "type" : "integer", - "format" : "int64", - "description" : "token expiry" - }, - "scopes" : { - "type" : "string", - "description" : "scopes for which the access token is issued" - }, - "tokenType" : { - "type" : "string" - } - } - }, - "JWTServiceInput" : { - "type" : "object", - "properties" : { - "claimsSet" : { - "type" : "object", - "description" : "key value pairs in the form of json map", - "additionalProperties" : { - "type" : "object" - } - } - } - }, - "JWTServiceOutput" : { - "type" : "object", - "properties" : { - "expiresIn" : { - "type" : "integer", - "format" : "int64", - "description" : "token expiry" - }, - "tokenType" : { - "type" : "string", - "description" : "type of this token" - }, - "accessToken" : { - "type" : "string" - } - } - } - } -} \ No newline at end of file From 13f5070e435408abb914d0164ded1143a6c3ec79 Mon Sep 17 00:00:00 2001 From: Dhivakar Asokan <48990091+dhivakar-asokan@users.noreply.github.com> Date: Thu, 21 May 2020 20:30:15 +0530 Subject: [PATCH 07/22] Delete APIGatewayPolicyManagement.json --- .../APIGatewayPolicyManagement.json | 2183 ----------------- 1 file changed, 2183 deletions(-) delete mode 100644 apigatewayservices/APIGatewayPolicyManagement.json diff --git a/apigatewayservices/APIGatewayPolicyManagement.json b/apigatewayservices/APIGatewayPolicyManagement.json deleted file mode 100644 index 5a7936c..0000000 --- a/apigatewayservices/APIGatewayPolicyManagement.json +++ /dev/null @@ -1,2183 +0,0 @@ -{ - "swagger" : "2.0", - "info" : { - "description" : "Policies are the set of rules that gets enforced on the APIs (or even at finer levels like operations/methods) for every invocation of the API. In API Gateway, a policy is made up of a set of policy actions. During an invocation of an API, API Gateway executes every policy action in the policy in a sequential manner. Policy action defines the rule along with its parameters that is applied on the resources/operation of an API. Every policy action will belong to either one or more policy stages. A policy stage is a logical grouping of the policy actions. A policy is divided into different stages that depict the execution order of the policy actions. A stage might contain one or more policy action. \n\nUse this method to get a list of all the policy stages\n\nThe policies can be categorized into Service level policies, Scope level policies, Package level policies, Policy Templates and Global policies. \n\nA service level policy is applicable for all resources/operation inside that API. \n\nA scope level policy is applicable for all resources/operation inside that scope. It will override or add the runtime enforcements based on the enforcement type. \n\nA Global Policy is applicable to all APIs matching the scope defined inside the policy. Global policy will take precedence over scope and service level policy. \n\nPackage level policies are created as part of the creation of packages and plans. A package level policy will be applied over global, scope and service level policies. \n\nIf one needs to apply the same set of policy actions to different APIs with just changes to the policy parameter values, then he/she can create a Policy template and can be apply it to the APIs whenever needed. While applying policy template on APIs user need to clone policy template and attach to the corresponding API. It will avoid recreating the policies. \n\n Any user with the 'Manage APIs' functional privilege can manage the service level polices. In order to manage Global policies, Threat protection policies etc, users need additional functional privileges. By default, the users who are part of API-Gateway-Administrators group will have all privileges.\n\nThis swagger doc also contains API Definition for managing Denied IP addresses. Only Administrator can invoke the API methods. Denied IPs are the IPs that violated the threat protection rules configured. Using this API you can retrieve the list of IPs denied and you can exclude the IPs from the list of denied IPs using the delete HTTP method. \n\n API Gateway uses WS-Security to protect the SOAP services at the message level. By default, API Gateway supports a number of security policies for the SOAP services like WSS UserName, SAML, Kerberos, Encryption etc. In addition to this, API Gateway also provides an extension using custom policy assertions that allows the API providers to extend and provide additional security policies which are not supported by API Gateway. In WS Security, Policy assertions can be used in defining individual security requirements or constraints. These individual policy assertions can be combined to create security policies that can be used to secure messages exchanged between a Web service and a client. ", - "version" : "10.7", - "title" : "API Gateway Policy Management Service" - }, - "host" : "localhost:5555", - "basePath" : "/rest/apigateway", - "schemes" : [ "http" ], - "consumes" : [ "application/json" ], - "produces" : [ "application/json" ], - "paths" : { - "/policies" : { - "get" : { - "description" : "This REST request is used to retrieve list of all policies from API Gateway. This can also be used to retrieve details for particular set of policies by specifying the policy ids in the query string.", - "operationId" : "getPolicies", - "consumes" : [ "application/json" ], - "produces" : [ "application/json" ], - "parameters" : [ { - "name" : "policyIds", - "in" : "query", - "description" : "This query parameter is used to retrieve policy details of particular set of policies. The policy IDs need to be separated using ',' to specify more than one policy id", - "required" : false, - "type" : "string", - "x-example" : "policyIds=1807d561-e0a1-4d06-bfbf-49bff4c5dfae,d7672248-7d25-444e-a9b6-853e1d95d1c6" - }, { - "name" : "stage", - "in" : "query", - "description" : "This query parameter is used to retrieve the Threat Protection policies created in API Gateway. The value of this query parameter should be threat protection, if other values specified it wont respect that value and return all the policies in the API Gateway", - "required" : false, - "type" : "string", - "x-example" : "stage=threatprotection", - "enum" : [ "threatprotection" ] - }, { - "name" : "policyType", - "in" : "query", - "description" : "This query parameter is used to retrieve policy details for a list of policies of a particular policy type. The policy type can be template or global. If the policy type is template then policy details of all the policy templates is returned. If the policy type is global then the policy details of global policies is returned.If any other policy type is specified all policies are returned", - "required" : false, - "type" : "string", - "x-example" : "policyType=global", - "enum" : [ "template", "global" ] - } ], - "responses" : { - "200" : { - "description" : "This status code indicates that the policy details are available and policy details of the policies will be sent as response. This example shows the policy details of list of global policies.", - "examples" : { - "application/json" : "{\r\n \"policy\": [\r\n {\r\n \"id\": \"732c4526-db9a-4ef9-9782-edda1a6aa9bc\",\r\n \"names\": [\r\n {\r\n \"value\": \"a\",\r\n \"locale\": \"English\"\r\n }\r\n ],\r\n \"descriptions\": [\r\n {\r\n \"value\": \"\",\r\n \"locale\": \"English\"\r\n }\r\n ],\r\n \"scope\": {\r\n \"applicableAPITypes\": [\r\n \"REST\",\r\n \"SOAP\"\r\n ],\r\n \"result\": {},\r\n \"scopeConditions\": [],\r\n \"logicalConnector\": \"AND\"\r\n },\r\n \"policyEnforcements\": [\r\n {\r\n \"enforcements\": [\r\n {\r\n \"enforcementObjectId\": \"2e63b365-5fb8-4c8c-b2b3-404045b583f7\",\r\n \"order\": null\r\n }\r\n ],\r\n \"stageKey\": \"IAM\"\r\n }\r\n ],\r\n \"policyScope\": \"GLOBAL\",\r\n \"global\": true,\r\n \"active\": true,\r\n \"systemPolicy\": false\r\n },\r\n {\r\n \"id\": \"7f009e40-dcbb-4dfc-b653-2e33ecf7f608\",\r\n \"names\": [\r\n {\r\n \"value\": \"b\",\r\n \"locale\": \"English\"\r\n }\r\n ],\r\n \"descriptions\": [\r\n {\r\n \"value\": \"\",\r\n \"locale\": \"English\"\r\n }\r\n ],\r\n \"scope\": {\r\n \"applicableAPITypes\": [\r\n \"REST\",\r\n \"SOAP\"\r\n ],\r\n \"scopeConditions\": [],\r\n \"logicalConnector\": \"AND\"\r\n },\r\n \"policyEnforcements\": [\r\n {\r\n \"enforcements\": [\r\n {\r\n \"enforcementObjectId\": \"121a6048-08bd-4aeb-8a07-a6d1aeae2710\",\r\n \"order\": null\r\n }\r\n ],\r\n \"stageKey\": \"IAM\"\r\n }\r\n ],\r\n \"policyScope\": \"GLOBAL\",\r\n \"global\": true,\r\n \"active\": false,\r\n \"systemPolicy\": false\r\n },\r\n {\r\n \"id\": \"GlobalLogInvocationPolicy\",\r\n \"names\": [\r\n {\r\n \"value\": \"Transaction logging\",\r\n \"locale\": \"English\"\r\n }\r\n ],\r\n \"descriptions\": [\r\n {\r\n \"value\": \"This is a system policy, which has log invocation policy and filters associated to log request or response payloads to a specified destination. These transactions are monitored and logged across all APIs in API Gateway\",\r\n \"locale\": \"English\"\r\n }\r\n ],\r\n \"scope\": {\r\n \"applicableAPITypes\": [\r\n \"REST\",\r\n \"SOAP\"\r\n ],\r\n \"result\": {},\r\n \"scopeConditions\": [],\r\n \"logicalConnector\": \"AND\"\r\n },\r\n \"policyEnforcements\": [\r\n {\r\n \"enforcements\": [\r\n {\r\n \"enforcementObjectId\": \"GlobalLogInvocationPolicyAction\",\r\n \"order\": null\r\n }\r\n ],\r\n \"stageKey\": \"LMT\"\r\n }\r\n ],\r\n \"policyScope\": \"GLOBAL\",\r\n \"global\": true,\r\n \"active\": false,\r\n \"systemPolicy\": true\r\n }\r\n ]\r\n}" - }, - "schema" : { - "type" : "array", - "items" : { - "$ref" : "#/definitions/Policy" - } - } - }, - "401" : { - "description" : "This status code indicates that the user did not provide any user credential or user does not have API Gateway Administrator or API Gateway provider access to get the policy details." - } - }, - "security" : [ { - "Basic" : [ ] - } ] - }, - "post" : { - "description" : "This REST request is used to create a policy in API Gateway. The body of this request should contain the payload of the policy. Using this request we can create Policies of different type.\n To create a service, scope, package and template level policy we can add the policy payload and set the corresponding policy scope. \nTo create a Global policy user should have API Gateway Administrator access. Other users cannot create global policies. To Create Global policy send the policy payload along with scope details and policy scope set to global. Similarly, to create a threat protection policy user have to send the policy along with the policy enforcement id of Threat protection policy actions. The policy actions needs to be created before adding the enforcement id of policy actions to policy. Threat protection rules are another type of global level policies which are applied to all requests and responses. The threat protection policy enforcement cannot be used in any other policies and other policy enforcement cannot be used in threat protection policies.\n Using this request we can also clone a policy. To clone a policy user have to set the appropriate query parameters.\n The effective policy calculation for policy(Service and scope level policy) is not calculated till it is referred in the API. But for a global policy the effective policy is calculated while creating the policy itself. Policy with template as policy scope cannot be referred from any API or scope. User needs to clone the policy templates and set the policy scope to either service or scope or global before referring it from the API. Policy should have only one occurrence of any stage. Multiple policy enforcements can be added to the applicable stages. To know about the list of stages and applicable policy enforcements on that stage please refer /policyStages resource.", - "consumes" : [ "application/json" ], - "produces" : [ "application/json" ], - "parameters" : [ { - "in" : "body", - "name" : "body", - "description" : "", - "required" : true, - "schema" : { - "$ref" : "#/definitions/Policy" - }, - "x-examples" : { - "application/json" : "{\r\n \"policy\": {\r\n \"names\": [\r\n {\r\n \"value\": \"Employee Global Policy\",\r\n \"locale\": \"English\"\r\n }\r\n ],\r\n \"descriptions\": [\r\n {\r\n \"value\": \"Global Policy for all employee APIs. IT will make sure the request are authenticated before sent to native service\",\r\n \"locale\": \"English\"\r\n }\r\n ],\r\n \"scope\": {\r\n \"applicableAPITypes\": [\r\n \"REST\",\r\n \"SOAP\"\r\n ],\r\n \"result\": {},\r\n \"scopeConditions\": [],\r\n \"logicalConnector\": \"AND\"\r\n },\r\n \"policyEnforcements\": [\r\n {\r\n \"enforcements\": [\r\n {\r\n \"enforcementObjectId\": \"31c729f9-4f1c-4074-acba-6975c0668433\",\r\n \"order\": null\r\n }\r\n ],\r\n \"stageKey\": \"IAM\"\r\n }\r\n ],\r\n \"policyScope\": \"GLOBAL\",\r\n \"global\": true,\r\n \"active\": false,\r\n \"systemPolicy\": false\r\n }\r\n}" - } - }, { - "name" : "action", - "in" : "query", - "description" : " This query parameter represents the action user want to perform. Currently user can only clone the policy. Hence the allowed value for this parameter would be \"clone\". Cloning is duplication of one or more policies in to a single policy. All the policy actions specified inside the policies are also be duplicated while creating the duplicate policy.The effective policy is not calculated for this until this policy is referred from the API.", - "required" : false, - "type" : "string", - "x-example" : "action=clone", - "enum" : [ "clone" ] - }, { - "name" : "policyIds", - "in" : "query", - "description" : "This query parameter represents the list of policies from which the new clone policy is created. If you specify list of policies then the newly created policy has all the policy action from all the policies.", - "required" : false, - "type" : "string", - "x-example" : "policyIds=id1,id2,id3" - }, { - "name" : "policyScope", - "in" : "query", - "description" : "This query parameter represents the policy scope of cloned policy. We can clone policy from one policy scope to another policy scope. Allowed policy scope values are global,service,template & scope", - "required" : false, - "type" : "string", - "x-example" : "policyScope=global", - "enum" : [ "global", "service", "template", "scope" ] - } ], - "responses" : { - "201" : { - "description" : " This status code indicates the policy is created/cloned successfully. The response body will contain the policy details of newly created/cloned policy", - "examples" : { - "application/json" : "{\r\n \"policy\": {\r\n \"id\": \"7a16baec-7925-4579-966b-bfe58265853d\",\r\n \"names\": [\r\n {\r\n \"value\": \"Employee Global Policy\",\r\n \"locale\": \"English\"\r\n }\r\n ],\r\n \"descriptions\": [\r\n {\r\n \"value\": \"Global Policy for all employee APIs. IT will make sure the request are authenticated before sent to native service\",\r\n \"locale\": \"English\"\r\n }\r\n ],\r\n \"scope\": {\r\n \"applicableAPITypes\": [\r\n \"REST\",\r\n \"SOAP\"\r\n ],\r\n \"result\": {},\r\n \"scopeConditions\": [],\r\n \"logicalConnector\": \"AND\"\r\n },\r\n \"policyEnforcements\": [\r\n {\r\n \"enforcements\": [\r\n {\r\n \"enforcementObjectId\": \"31c729f9-4f1c-4074-acba-6975c0668433\",\r\n \"order\": null\r\n }\r\n ],\r\n \"stageKey\": \"IAM\"\r\n }\r\n ],\r\n \"policyScope\": \"GLOBAL\",\r\n \"global\": true,\r\n \"active\": false,\r\n \"systemPolicy\": false\r\n }\r\n}" - }, - "schema" : { - "$ref" : "#/definitions/Policy" - } - }, - "401" : { - "description" : "This status code indicates that the user did not provide any user credential or user does not have API Gateway Administrator or API Gateway provider access to create or clone policy. If the policy scope is GLOBAL and if user gets this status code then the user might not have API Gateway Administrator access." - }, - "400" : { - "description" : "This status code indicates that request body is not correct.", - "examples" : { - "application/json" : "{\r\n \"errorDetails\": \" Unable to create the resource. Error in processing the payload null. Error Message . Check the correctness of key and payload.\"\r\n}" - } - }, - "500" : { - "description" : "This status code indicates that the server has encountered an error during the creation of the policy. For example if it is a global policy we cannot create policy with out scope and the examples show a message of such scenario ", - "examples" : { - "application/json" : "{\r\n \"errorDetails\": \" With out Setting scope, policy actions cannot be added. Please select the applicable Service Type in scope before adding Policy Action.\"\r\n}" - } - } - }, - "security" : [ { - "Basic" : [ ] - } ] - } - }, - "/policies/{policyId}" : { - "get" : { - "description" : "This REST request is used to retrieve the policy details for a specified policy in API Gateway. If policy id is available then the policy details is sent in response.", - "operationId" : "getPolicyById", - "consumes" : [ "application/json" ], - "produces" : [ "application/json" ], - "parameters" : [ { - "name" : "policyId", - "in" : "path", - "description" : "This path parameter is used to specify the policy id for which the policy details needs to be retrieved", - "required" : true, - "type" : "string", - "x-example" : "732c4526-db9a-4ef9-9782-edda1a6aa9bc" - } ], - "responses" : { - "200" : { - "description" : "The policy detail of the specified policy is sent in response body. This sample contains policy details of a global policy.", - "examples" : { - "application/json" : "{\r\n \"policy\": {\r\n \"id\": \"732c4526-db9a-4ef9-9782-edda1a6aa9bc\",\r\n \"names\": [\r\n {\r\n \"value\": \"a\",\r\n \"locale\": \"English\"\r\n }\r\n ],\r\n \"descriptions\": [\r\n {\r\n \"value\": \"\",\r\n \"locale\": \"English\"\r\n }\r\n ],\r\n \"scope\": {\r\n \"applicableAPITypes\": [\r\n \"REST\",\r\n \"SOAP\"\r\n ],\r\n \"result\": {},\r\n \"scopeConditions\": [],\r\n \"logicalConnector\": \"AND\"\r\n },\r\n \"policyEnforcements\": [\r\n {\r\n \"enforcements\": [\r\n {\r\n \"enforcementObjectId\": \"2e63b365-5fb8-4c8c-b2b3-404045b583f7\",\r\n \"order\": null\r\n }\r\n ],\r\n \"stageKey\": \"IAM\"\r\n }\r\n ],\r\n \"policyScope\": \"GLOBAL\",\r\n \"global\": true,\r\n \"active\": false,\r\n \"systemPolicy\": false\r\n }\r\n}" - }, - "schema" : { - "$ref" : "#/definitions/Policy" - } - }, - "401" : { - "description" : "This status code indicates that the user did not provide any user credential or user does not have API Gateway Administrator or API Gateway provider access to get the policy details." - }, - "404" : { - "description" : "This status code indicates that the policy id specified is not found in API Gateway", - "examples" : { - "application/json" : "{\r\n \"errorDetails\": \" Unable to find the resource: 732c4526-db9a-4ef9-9782-edda1a6aa9bc1\"\r\n}" - } - } - }, - "security" : [ { - "Basic" : [ ] - } ] - }, - "put" : { - "description" : "This REST request is used to update the policy details for a specific policy. For Global policy user should have API Gateway administrator access to update global policy", - "operationId" : "updatePolicyByID", - "consumes" : [ "application/json" ], - "produces" : [ "application/json" ], - "parameters" : [ { - "name" : "policyId", - "in" : "path", - "description" : "This path parameter is used to specify the policy id that needs to be updated.", - "required" : true, - "type" : "string", - "x-example" : "732c4526-db9a-4ef9-9782-edda1a6aa9bc" - }, { - "in" : "body", - "name" : "body", - "description" : "", - "required" : false, - "schema" : { - "$ref" : "#/definitions/Policy" - }, - "x-examples" : { - "application/json" : "{\r\n \"policy\": {\r\n \"id\" : \"732c4526-db9a-4ef9-9782-edda1a6aa9bc\",\r\n \"names\": [\r\n {\r\n \"value\": \"Employee Global Policy\",\r\n \"locale\": \"English\"\r\n }\r\n ],\r\n \"descriptions\": [\r\n {\r\n \"value\": \"Global Policy for all employee APIs. IT will make sure the request are authenticated before sent to native service\",\r\n \"locale\": \"English\"\r\n }\r\n ],\r\n \"scope\": {\r\n \"applicableAPITypes\": [\r\n \"REST\",\r\n \"SOAP\"\r\n ],\r\n \"scopeConditions\": [],\r\n \"logicalConnector\": \"AND\"\r\n },\r\n \"policyEnforcements\": [\r\n {\r\n \"enforcements\": [\r\n {\r\n \"enforcementObjectId\": \"c9e32bec-7185-44b4-9565-f0b17da8b8eb\",\r\n \"order\": null\r\n }\r\n ],\r\n \"stageKey\": \"IAM\"\r\n }\r\n ],\r\n \"policyScope\": \"GLOBAL\",\r\n \"global\": true,\r\n \"active\": false,\r\n \"systemPolicy\": false\r\n }\r\n}" - } - } ], - "responses" : { - "200" : { - "description" : "This status code indicates that the specified policy has been updated successfully and the updated policy details will be available in response body", - "examples" : { - "application/json" : "{\r\n \"policy\": {\r\n \"id\": \"732c4526-db9a-4ef9-9782-edda1a6aa9bc\",\r\n \"names\": [\r\n {\r\n \"value\": \"Employee Global Policy\",\r\n \"locale\": \"English\"\r\n }\r\n ],\r\n \"descriptions\": [\r\n {\r\n \"value\": \"Global Policy for all employee APIs. IT will make sure the request are authenticated before sent to native service\",\r\n \"locale\": \"English\"\r\n }\r\n ],\r\n \"scope\": {\r\n \"applicableAPITypes\": [\r\n \"REST\",\r\n \"SOAP\"\r\n ],\r\n \"result\": {},\r\n \"scopeConditions\": [],\r\n \"logicalConnector\": \"AND\"\r\n },\r\n \"policyEnforcements\": [\r\n {\r\n \"enforcements\": [\r\n {\r\n \"enforcementObjectId\": \"c9e32bec-7185-44b4-9565-f0b17da8b8eb\",\r\n \"order\": null\r\n }\r\n ],\r\n \"stageKey\": \"IAM\"\r\n }\r\n ],\r\n \"policyScope\": \"GLOBAL\",\r\n \"global\": true,\r\n \"active\": false,\r\n \"systemPolicy\": false\r\n }\r\n}" - }, - "schema" : { - "$ref" : "#/definitions/Policy" - } - }, - "500" : { - "description" : "This status code indicates that server has encountered an error during the update the of policy. This sample shows the global policy update failed due to conflict cases.", - "examples" : { - "application/json" : "{\r\n \"errorDetails\": \" Conflict between global Policy for API - EMP_POJO_WSDL, Operation - updateEmployee - An API can be associated with only one policy action with template id Identify & Authorize Application\",\r\n \"reason\": [\r\n {\r\n \"apiId\": \"421eb4bf-b2d0-40a4-900f-ad5fd0a2484e\",\r\n \"apiName\": \"EMP_POJO_WSDL\",\r\n \"apiType\": \"SOAP\",\r\n \"errorOnResource\": [\r\n {\r\n \"conflictingPolicies\": {\r\n \"7f009e40-dcbb-4dfc-b653-2e33ecf7f608\": {\r\n \"names\": [\r\n {\r\n \"value\": \"b\",\r\n \"locale\": \"English\"\r\n }\r\n ],\r\n \"policyActionsIds\": [\r\n \"121a6048-08bd-4aeb-8a07-a6d1aeae2710\"\r\n ],\r\n \"policyId\": \"7f009e40-dcbb-4dfc-b653-2e33ecf7f608\",\r\n \"policyScope\": \"GLOBAL\",\r\n \"stageKey\": \"IAM\"\r\n }\r\n },\r\n \"error\": {\r\n \"allowedOccurence\": \"once\",\r\n \"errorType\": \"occurence\",\r\n \"policyActionName\": \"[Identify & Authorize Application]\",\r\n \"templateId\": \"evaluatePolicy\"\r\n },\r\n \"errorMessage\": \" An API can be associated with only one policy action with template id Identify & Authorize Application\",\r\n \"policyDetails\": {\r\n \"names\": [\r\n {\r\n \"value\": \"Employee Global Policy\",\r\n \"locale\": \"English\"\r\n }\r\n ],\r\n \"policyActionsIds\": [\r\n \"c9e32bec-7185-44b4-9565-f0b17da8b8eb\"\r\n ],\r\n \"policyId\": \"732c4526-db9a-4ef9-9782-edda1a6aa9bc\",\r\n \"policyScope\": \"GLOBAL\",\r\n \"stageKey\": \"IAM\"\r\n },\r\n \"resource\": \"updateEmployee\"\r\n },\r\n {\r\n \"conflictingPolicies\": {\r\n \"7f009e40-dcbb-4dfc-b653-2e33ecf7f608\": {\r\n \"names\": [\r\n {\r\n \"value\": \"b\",\r\n \"locale\": \"English\"\r\n }\r\n ],\r\n \"policyActionsIds\": [\r\n \"121a6048-08bd-4aeb-8a07-a6d1aeae2710\"\r\n ],\r\n \"policyId\": \"7f009e40-dcbb-4dfc-b653-2e33ecf7f608\",\r\n \"policyScope\": \"GLOBAL\",\r\n \"stageKey\": \"IAM\"\r\n }\r\n },\r\n \"error\": {\r\n \"allowedOccurence\": \"once\",\r\n \"errorType\": \"occurence\",\r\n \"policyActionName\": \"[Identify & Authorize Application]\",\r\n \"templateId\": \"evaluatePolicy\"\r\n },\r\n \"errorMessage\": \" An API can be associated with only one policy action with template id Identify & Authorize Application\",\r\n \"policyDetails\": {\r\n \"names\": [\r\n {\r\n \"value\": \"Employee Global Policy\",\r\n \"locale\": \"English\"\r\n }\r\n ],\r\n \"policyActionsIds\": [\r\n \"c9e32bec-7185-44b4-9565-f0b17da8b8eb\"\r\n ],\r\n \"policyId\": \"732c4526-db9a-4ef9-9782-edda1a6aa9bc\",\r\n \"policyScope\": \"GLOBAL\",\r\n \"stageKey\": \"IAM\"\r\n },\r\n \"resource\": \"addEmployee\"\r\n },\r\n {\r\n \"conflictingPolicies\": {\r\n \"7f009e40-dcbb-4dfc-b653-2e33ecf7f608\": {\r\n \"names\": [\r\n {\r\n \"value\": \"b\",\r\n \"locale\": \"English\"\r\n }\r\n ],\r\n \"policyActionsIds\": [\r\n \"121a6048-08bd-4aeb-8a07-a6d1aeae2710\"\r\n ],\r\n \"policyId\": \"7f009e40-dcbb-4dfc-b653-2e33ecf7f608\",\r\n \"policyScope\": \"GLOBAL\",\r\n \"stageKey\": \"IAM\"\r\n }\r\n },\r\n \"error\": {\r\n \"allowedOccurence\": \"once\",\r\n \"errorType\": \"occurence\",\r\n \"policyActionName\": \"[Identify & Authorize Application]\",\r\n \"templateId\": \"evaluatePolicy\"\r\n },\r\n \"errorMessage\": \" An API can be associated with only one policy action with template id Identify & Authorize Application\",\r\n \"policyDetails\": {\r\n \"names\": [\r\n {\r\n \"value\": \"Employee Global Policy\",\r\n \"locale\": \"English\"\r\n }\r\n ],\r\n \"policyActionsIds\": [\r\n \"c9e32bec-7185-44b4-9565-f0b17da8b8eb\"\r\n ],\r\n \"policyId\": \"732c4526-db9a-4ef9-9782-edda1a6aa9bc\",\r\n \"policyScope\": \"GLOBAL\",\r\n \"stageKey\": \"IAM\"\r\n },\r\n \"resource\": \"deleteEmployee\"\r\n },\r\n {\r\n \"conflictingPolicies\": {\r\n \"7f009e40-dcbb-4dfc-b653-2e33ecf7f608\": {\r\n \"names\": [\r\n {\r\n \"value\": \"b\",\r\n \"locale\": \"English\"\r\n }\r\n ],\r\n \"policyActionsIds\": [\r\n \"121a6048-08bd-4aeb-8a07-a6d1aeae2710\"\r\n ],\r\n \"policyId\": \"7f009e40-dcbb-4dfc-b653-2e33ecf7f608\",\r\n \"policyScope\": \"GLOBAL\",\r\n \"stageKey\": \"IAM\"\r\n }\r\n },\r\n \"error\": {\r\n \"allowedOccurence\": \"once\",\r\n \"errorType\": \"occurence\",\r\n \"policyActionName\": \"[Identify & Authorize Application]\",\r\n \"templateId\": \"evaluatePolicy\"\r\n },\r\n \"errorMessage\": \" An API can be associated with only one policy action with template id Identify & Authorize Application\",\r\n \"policyDetails\": {\r\n \"names\": [\r\n {\r\n \"value\": \"Employee Global Policy\",\r\n \"locale\": \"English\"\r\n }\r\n ],\r\n \"policyActionsIds\": [\r\n \"c9e32bec-7185-44b4-9565-f0b17da8b8eb\"\r\n ],\r\n \"policyId\": \"732c4526-db9a-4ef9-9782-edda1a6aa9bc\",\r\n \"policyScope\": \"GLOBAL\",\r\n \"stageKey\": \"IAM\"\r\n },\r\n \"resource\": \"getEmployee\"\r\n }\r\n ]\r\n }\r\n ]\r\n}" - } - }, - "404" : { - "description" : "This status code indicates that the specified policy id is not available in API Gateway", - "examples" : { - "application/json" : "{\r\n \"errorDetails\": \" Unable to find the resource: 732c4526-db9a-4ef9-9782-edda1a6aa9bc1\"\r\n}" - } - }, - "401" : { - "description" : "This status code indicates that the user did not provide any user credential or user does not have API Gateway Administrator or API Gateway provider access to update the policy details.If global policy is specified then user should have API Gateway administrator access to update the policy details." - }, - "400" : { - "description" : "This status code indicates that the specified policy does not have proper request. The sample shows the error when tried to update a global policy with any scope defined for the global policy.", - "examples" : { - "application/json" : "{\r\n \"errorDetails\": \" With out Setting scope, policy actions cannot be added. Please select the applicable Service Type in scope before adding Policy Action.\"\r\n}" - } - } - }, - "security" : [ { - "Basic" : [ ] - } ] - }, - "delete" : { - "description" : "This REST request is used to delete the policy from API gateway. This request will automatically delete the associated policy action for this policy", - "operationId" : "deletePolicyByID", - "consumes" : [ "application/json" ], - "produces" : [ "application/json" ], - "parameters" : [ { - "name" : "policyId", - "in" : "path", - "description" : "This path parameter is used to specify the policy id that needs to be deleted. If the policy id specified is global policy then it needs to be in inactive state to delete. Active global policy and global policy with systemPolicy property set to true cannot be deleted.", - "required" : true, - "type" : "string", - "x-example" : "732c4526-db9a-4ef9-9782-edda1a6aa9bc" - } ], - "responses" : { - "204" : { - "description" : "This status code indicates that the specified policy is successfully deleted" - }, - "401" : { - "description" : "This status code indicates that the user did not provide any user credential or user does not have API Gateway Administrator or API gateway provider access to delete the policy. If the specified policy is global then user should have API Administrator access to delete the global policy" - }, - "404" : { - "description" : "This status code indicates that the policy id specified is not found in API Gateway", - "examples" : { - "application/json" : "{\r\n \"errorDetails\": \" Unable to find the resource: 732c4526-db9a-4ef9-9782-edda1a6aa9bc1\"\r\n}" - } - }, - "500" : { - "description" : "This status code indicates that error has occurred during the deletion of policy. The sample shows that the policy cannot be delete since the global policy is in active state.", - "examples" : { - "application/json" : "{\r\n \"errorDetails\": \" Policy [Employee Global Policy] is in active state, hence cannot be deleted. Please deactivate the policy to delete\"\r\n}" - } - } - }, - "security" : [ { - "Basic" : [ ] - } ] - } - }, - "/policies/{policyId}/apis" : { - "get" : { - "description" : "This REST request is used to get the list of applicable APIs for a global policy. An API become applicable API for a global policy only if it satisfies the scope specified in the global policy. By default it will return the basic API details of all the applicable APIs either if the API is active or inactive for a global policy. User can use the query parameter \"active\" to retrieve all active APIs for a global policy or all applicable APIs regardless of its status for a global policy.", - "operationId" : "getApplicableAPIsForGlobalPolicyByID", - "consumes" : [ "application/json" ], - "produces" : [ "application/json" ], - "parameters" : [ { - "name" : "policyId", - "in" : "path", - "description" : "This path parameter is used to specify the global policy id for which we need the list of applicable APIs", - "required" : true, - "type" : "string", - "x-example" : "732c4526-db9a-4ef9-9782-edda1a6aa9bc" - }, { - "name" : "active", - "in" : "query", - "description" : "This is a query parameter. It is used to retrieve the list of applicable APIs for a global policy. If the value for this parameter is 'false' then it will return all the APIs whether it is active or not for the specified global policy. If the value for this flag is 'true' then it will return only the list of applicable active APIs alone for the specified global policy", - "required" : false, - "type" : "string", - "x-example" : "active=false" - } ], - "responses" : { - "200" : { - "description" : "This status code indicates that the specified global policy is valid and in the response it will contain the list of applicable APIs based on the parameters specified in the request. ", - "examples" : { - "application/json" : "{\r\n \"apiResponse\": [\r\n {\r\n \"api\": {\r\n \"apiName\": \"API Gateway \",\r\n \"apiVersion\": \"10.0\",\r\n \"apiDescription\": \"This swagger doc contain API Definition for API Gateway APIs. It contains swagger definition for all APIs in API Gateway.\",\r\n \"isActive\": false,\r\n \"type\": \"REST\",\r\n \"publishedPortals\": [],\r\n \"systemVersion\": 1,\r\n \"id\": \"4869049b-4cef-4c76-b678-14d4970c5241\"\r\n },\r\n \"responseStatus\": \"SUCCESS\"\r\n },\r\n {\r\n \"api\": {\r\n \"apiName\": \"EMP\",\r\n \"apiVersion\": \"1.0\",\r\n \"isActive\": true,\r\n \"type\": \"REST\",\r\n \"publishedPortals\": [],\r\n \"systemVersion\": 1,\r\n \"id\": \"e60d6fe9-3612-469f-b33a-fb4c97c72b3b\"\r\n },\r\n \"responseStatus\": \"SUCCESS\"\r\n },\r\n {\r\n \"api\": {\r\n \"apiName\": \"EMP_POJO_WSDL\",\r\n \"apiVersion\": \"1\",\r\n \"isActive\": true,\r\n \"type\": \"SOAP\",\r\n \"publishedPortals\": [],\r\n \"systemVersion\": 1,\r\n \"id\": \"421eb4bf-b2d0-40a4-900f-ad5fd0a2484e\"\r\n },\r\n \"responseStatus\": \"SUCCESS\"\r\n },\r\n {\r\n \"api\": {\r\n \"apiName\": \"EMP_REST_SWAGGER\",\r\n \"apiVersion\": \"1.0.0\",\r\n \"isActive\": false,\r\n \"type\": \"REST\",\r\n \"publishedPortals\": [],\r\n \"systemVersion\": 1,\r\n \"id\": \"260c11e1-b3eb-4714-aa73-7cd95fc91abb\"\r\n },\r\n \"responseStatus\": \"SUCCESS\"\r\n }\r\n ]\r\n}" - }, - "schema" : { - "type" : "array", - "items" : { - "$ref" : "#/definitions/APIResponseDelete" - } - } - }, - "401" : { - "description" : "This status code indicates that the user did not provide any user credential or user does not have API Gateway Administrator or API gateway provider access to get the list of applicable APIs for the specified global policy." - }, - "404" : { - "description" : "This status code indicates that the specified global policy is not available in API Gateway", - "examples" : { - "application/json" : "{\r\n \"errorDetails\": \" Unable to find the resource: 732c4526-db9a-4ef9-9782-edda1a6aa9bc1\"\r\n}" - } - }, - "400" : { - "description" : "This status code indicate the specified policy is not a global policy.", - "examples" : { - "application/json" : "{\r\n \"errorDetails\": \"5e04581b-a583-495b-83b3-411f9c067054 is not a global policy.\"\r\n}" - } - }, - "500" : { - "description" : "This is status code indicates that server has encounted an while getting applicable APIs for the specified policy" - } - }, - "security" : [ { - "Basic" : [ ] - } ] - } - }, - "/policies/{policyId}/conflicts" : { - "get" : { - "description" : "This REST Request is used to get the conflicts for a global policy. Conflicts between the policies/APIs can arise if the policies contain the conflicting policy actions. For example, a global policy that contains the Identity and Access Policy with \"API Key\" will conflict with another global policy that contains the Identity and Access Policy with \"OAuth2\". If an API satisfy more than one global policy, then all the policy actions of all applicable global policy will be added for effective policy calculation. If any policy validation error occurred it will be reported as conflict.\n\nThis REST request doesn't require request body. By Default it will return the conflicts for all applicable APIs and conflicts between the specified global policy and other active global policies. Additionally, we can use the query parameter to get the conflicts for active or all applicable APIs. \n\nIf there is conflict, status 500 is returned along with the details on conflicting scenarios and if there is no conflict then status 200 is returned", - "operationId" : "checkConflictForGlobalPolicy", - "consumes" : [ "application/json" ], - "produces" : [ "application/json" ], - "parameters" : [ { - "name" : "policyId", - "in" : "path", - "description" : "This path parameter is used to specify the global policy id to which we need to conflicting case for a global policy", - "required" : true, - "type" : "string", - "x-example" : "732c4526-db9a-4ef9-9782-edda1a6aa9bc" - }, { - "name" : "active", - "in" : "query", - "description" : "This is a query parameter. It is used to get conflicting case for a global policy. If the value for this parameter is 'false' then it will return conflicting scenario for all the APIs whether it is active or not for the specified global policy. If the value for this flag is 'true' then it will return conflicting case only for the list of applicable active APIs alone", - "required" : false, - "type" : "string", - "x-example" : "active=false" - } ], - "responses" : { - "200" : { - "description" : "This status code indicates that there are no conflicting cases for the specified global policy and the response will have the policy details of the global policy", - "examples" : { - "application/json" : "{\r\n \"policy\": {\r\n \"id\": \"732c4526-db9a-4ef9-9782-edda1a6aa9bc\",\r\n \"names\": [\r\n {\r\n \"value\": \"a\",\r\n \"locale\": \"English\"\r\n }\r\n ],\r\n \"descriptions\": [\r\n {\r\n \"value\": \"\",\r\n \"locale\": \"English\"\r\n }\r\n ],\r\n \"scope\": {\r\n \"applicableAPITypes\": [\r\n \"REST\",\r\n \"SOAP\"\r\n ],\r\n \"result\": {},\r\n \"scopeConditions\": [],\r\n \"logicalConnector\": \"AND\"\r\n },\r\n \"policyEnforcements\": [\r\n {\r\n \"enforcements\": [\r\n {\r\n \"enforcementObjectId\": \"2e63b365-5fb8-4c8c-b2b3-404045b583f7\",\r\n \"order\": null\r\n }\r\n ],\r\n \"stageKey\": \"IAM\"\r\n }\r\n ],\r\n \"policyScope\": \"GLOBAL\",\r\n \"global\": true,\r\n \"active\": false,\r\n \"systemPolicy\": false\r\n }\r\n}" - }, - "schema" : { - "$ref" : "#/definitions/Policy" - } - }, - "401" : { - "description" : "This status code indicate either user didn't provide any user credential or user doesn't have API Gateway Administrator or API gateway provider access to get conflicting cases for the specified global policy." - }, - "404" : { - "description" : "This status code indicates that the specified global policy is not available in API Gateway", - "examples" : { - "application/json" : "{\r\n \"errorDetails\": \" Unable to find the resource: 732c4526-db9a-4ef9-9782-edda1a6aa9bc1\"\r\n}" - } - }, - "500" : { - "description" : "This status code indicates that there are some conflicting cases for the specified global policy. The sample shows one such conflicting case. The specified global policy and another active global policy have conflicting scenario on a common active API", - "examples" : { - "application/json" : "{\r\n \"errorDetails\": \" Conflict between global Policy for API - EMP_POJO_WSDL, Operation - updateEmployee - An API can be associated with only one policy action with template id Identify & Authorize Application\",\r\n \"reason\": [\r\n {\r\n \"apiId\": \"421eb4bf-b2d0-40a4-900f-ad5fd0a2484e\",\r\n \"apiName\": \"EMP_POJO_WSDL\",\r\n \"apiType\": \"SOAP\",\r\n \"errorOnResource\": [\r\n {\r\n \"conflictingPolicies\": {\r\n \"732c4526-db9a-4ef9-9782-edda1a6aa9bc\": {\r\n \"names\": [\r\n {\r\n \"value\": \"a\",\r\n \"locale\": \"English\"\r\n }\r\n ],\r\n \"policyActionsIds\": [\r\n \"2e63b365-5fb8-4c8c-b2b3-404045b583f7\"\r\n ],\r\n \"policyId\": \"732c4526-db9a-4ef9-9782-edda1a6aa9bc\",\r\n \"policyScope\": \"GLOBAL\",\r\n \"stageKey\": \"IAM\"\r\n }\r\n },\r\n \"error\": {\r\n \"allowedOccurence\": \"once\",\r\n \"errorType\": \"occurence\",\r\n \"policyActionName\": \"[Identify & Authorize Application]\",\r\n \"templateId\": \"evaluatePolicy\"\r\n },\r\n \"errorMessage\": \" An API can be associated with only one policy action with template id Identify & Authorize Application\",\r\n \"policyDetails\": {\r\n \"names\": [\r\n {\r\n \"value\": \"Employee Global Policy\",\r\n \"locale\": \"English\"\r\n }\r\n ],\r\n \"policyActionsIds\": [\r\n \"31c729f9-4f1c-4074-acba-6975c0668433\"\r\n ],\r\n \"policyId\": \"7a16baec-7925-4579-966b-bfe58265853d\",\r\n \"policyScope\": \"GLOBAL\",\r\n \"stageKey\": \"IAM\"\r\n },\r\n \"resource\": \"updateEmployee\"\r\n },\r\n {\r\n \"conflictingPolicies\": {\r\n \"732c4526-db9a-4ef9-9782-edda1a6aa9bc\": {\r\n \"names\": [\r\n {\r\n \"value\": \"a\",\r\n \"locale\": \"English\"\r\n }\r\n ],\r\n \"policyActionsIds\": [\r\n \"2e63b365-5fb8-4c8c-b2b3-404045b583f7\"\r\n ],\r\n \"policyId\": \"732c4526-db9a-4ef9-9782-edda1a6aa9bc\",\r\n \"policyScope\": \"GLOBAL\",\r\n \"stageKey\": \"IAM\"\r\n }\r\n },\r\n \"error\": {\r\n \"allowedOccurence\": \"once\",\r\n \"errorType\": \"occurence\",\r\n \"policyActionName\": \"[Identify & Authorize Application]\",\r\n \"templateId\": \"evaluatePolicy\"\r\n },\r\n \"errorMessage\": \" An API can be associated with only one policy action with template id Identify & Authorize Application\",\r\n \"policyDetails\": {\r\n \"names\": [\r\n {\r\n \"value\": \"Employee Global Policy\",\r\n \"locale\": \"English\"\r\n }\r\n ],\r\n \"policyActionsIds\": [\r\n \"31c729f9-4f1c-4074-acba-6975c0668433\"\r\n ],\r\n \"policyId\": \"7a16baec-7925-4579-966b-bfe58265853d\",\r\n \"policyScope\": \"GLOBAL\",\r\n \"stageKey\": \"IAM\"\r\n },\r\n \"resource\": \"addEmployee\"\r\n },\r\n {\r\n \"conflictingPolicies\": {\r\n \"732c4526-db9a-4ef9-9782-edda1a6aa9bc\": {\r\n \"names\": [\r\n {\r\n \"value\": \"a\",\r\n \"locale\": \"English\"\r\n }\r\n ],\r\n \"policyActionsIds\": [\r\n \"2e63b365-5fb8-4c8c-b2b3-404045b583f7\"\r\n ],\r\n \"policyId\": \"732c4526-db9a-4ef9-9782-edda1a6aa9bc\",\r\n \"policyScope\": \"GLOBAL\",\r\n \"stageKey\": \"IAM\"\r\n }\r\n },\r\n \"error\": {\r\n \"allowedOccurence\": \"once\",\r\n \"errorType\": \"occurence\",\r\n \"policyActionName\": \"[Identify & Authorize Application]\",\r\n \"templateId\": \"evaluatePolicy\"\r\n },\r\n \"errorMessage\": \" An API can be associated with only one policy action with template id Identify & Authorize Application\",\r\n \"policyDetails\": {\r\n \"names\": [\r\n {\r\n \"value\": \"Employee Global Policy\",\r\n \"locale\": \"English\"\r\n }\r\n ],\r\n \"policyActionsIds\": [\r\n \"31c729f9-4f1c-4074-acba-6975c0668433\"\r\n ],\r\n \"policyId\": \"7a16baec-7925-4579-966b-bfe58265853d\",\r\n \"policyScope\": \"GLOBAL\",\r\n \"stageKey\": \"IAM\"\r\n },\r\n \"resource\": \"deleteEmployee\"\r\n },\r\n {\r\n \"conflictingPolicies\": {\r\n \"732c4526-db9a-4ef9-9782-edda1a6aa9bc\": {\r\n \"names\": [\r\n {\r\n \"value\": \"a\",\r\n \"locale\": \"English\"\r\n }\r\n ],\r\n \"policyActionsIds\": [\r\n \"2e63b365-5fb8-4c8c-b2b3-404045b583f7\"\r\n ],\r\n \"policyId\": \"732c4526-db9a-4ef9-9782-edda1a6aa9bc\",\r\n \"policyScope\": \"GLOBAL\",\r\n \"stageKey\": \"IAM\"\r\n }\r\n },\r\n \"error\": {\r\n \"allowedOccurence\": \"once\",\r\n \"errorType\": \"occurence\",\r\n \"policyActionName\": \"[Identify & Authorize Application]\",\r\n \"templateId\": \"evaluatePolicy\"\r\n },\r\n \"errorMessage\": \" An API can be associated with only one policy action with template id Identify & Authorize Application\",\r\n \"policyDetails\": {\r\n \"names\": [\r\n {\r\n \"value\": \"Employee Global Policy\",\r\n \"locale\": \"English\"\r\n }\r\n ],\r\n \"policyActionsIds\": [\r\n \"31c729f9-4f1c-4074-acba-6975c0668433\"\r\n ],\r\n \"policyId\": \"7a16baec-7925-4579-966b-bfe58265853d\",\r\n \"policyScope\": \"GLOBAL\",\r\n \"stageKey\": \"IAM\"\r\n },\r\n \"resource\": \"getEmployee\"\r\n }\r\n ]\r\n }\r\n ]\r\n}" - }, - "schema" : { - "$ref" : "#/definitions/EnforcementValidationMessage" - } - }, - "400" : { - "description" : "This status code indicate the specified policy is not a global policy.", - "examples" : { - "application/json" : "{\r\n \"errorDetails\": \"5e04581b-a583-495b-83b3-411f9c067054 is not a global policy.\"\r\n}" - } - } - }, - "security" : [ { - "Basic" : [ ] - } ] - } - }, - "/policies/{policyId}/enable" : { - "put" : { - "description" : "This REST request is used to enable the Threat protection rule created in API Gateway. This request does not require any request body. If the threat protection policy is enabled successfully then the policy details of specified policy is sent as response", - "operationId" : "enableThreatProtectionRuleByPolicyID", - "consumes" : [ "application/json" ], - "produces" : [ "application/json" ], - "parameters" : [ { - "name" : "policyId", - "in" : "path", - "description" : "This path parameter is used to specify the policy id of the threat protection policy which needs to be enabled", - "required" : true, - "type" : "string", - "x-example" : "732c4526-db9a-4ef9-9782-edda1a6aa9bc" - } ], - "responses" : { - "200" : { - "description" : "This status code indicates that the threat protection policy is enabled and the policy details of the Threat protection will be in response with active flag set to true", - "examples" : { - "application/json" : "{\r\n \"policy\": {\r\n \"id\": \"7b2cd4a6-49f3-480d-8965-a77971605fb7\",\r\n \"names\": [\r\n {\r\n \"value\": \"Message_size_filter\",\r\n \"locale\": \"English\"\r\n }\r\n ],\r\n \"parameters\": [\r\n {\r\n \"templateKey\": \"customErrorMessage\",\r\n \"values\": [\r\n \"Message size limit exceeded\"\r\n ]\r\n },\r\n {\r\n \"templateKey\": \"action\",\r\n \"values\": [\r\n \"DENY\"\r\n ]\r\n },\r\n {\r\n \"templateKey\": \"enableRule\",\r\n \"values\": [\r\n \"Disable\"\r\n ]\r\n },\r\n {\r\n \"templateKey\": \"rule\",\r\n \"values\": [\r\n \"Message_size_filter\"\r\n ]\r\n },\r\n {\r\n \"templateKey\": \"ruleDescription\",\r\n \"values\": [\r\n \"This threat protection rule is used to filter request based on size\"\r\n ]\r\n },\r\n {\r\n \"templateKey\": \"ruleName\",\r\n \"values\": [\r\n \"Message_size_filter\"\r\n ]\r\n },\r\n {\r\n \"templateKey\": \"ruleType\",\r\n \"values\": [\r\n \"DENY\"\r\n ]\r\n },\r\n {\r\n \"templateKey\": \"isEnterpriseGatewayLicensed\",\r\n \"values\": [\r\n \"true\"\r\n ]\r\n },\r\n {\r\n \"templateKey\": \"alertOption\",\r\n \"parameters\": [\r\n {\r\n \"templateKey\": \"alertInterval\",\r\n \"values\": [\r\n \"60\"\r\n ]\r\n },\r\n {\r\n \"templateKey\": \"alertOnEvery\",\r\n \"values\": [\r\n \"false\"\r\n ]\r\n },\r\n {\r\n \"templateKey\": \"alertType\",\r\n \"values\": [\r\n \"None\"\r\n ]\r\n },\r\n {\r\n \"templateKey\": \"emailTo\",\r\n \"values\": [\r\n \"\"\r\n ]\r\n },\r\n {\r\n \"templateKey\": \"flowServiceName\",\r\n \"values\": [\r\n \"\"\r\n ]\r\n },\r\n {\r\n \"templateKey\": \"runAsUser\",\r\n \"values\": [\r\n \"\"\r\n ]\r\n }\r\n ]\r\n },\r\n {\r\n \"templateKey\": \"isRuleEnabled\",\r\n \"values\": [\r\n \"false\"\r\n ]\r\n }\r\n ],\r\n \"policyEnforcements\": [\r\n {\r\n \"enforcements\": [\r\n {\r\n \"enforcementObjectId\": \"b9cfc355-0d11-4ea2-aae9-54df71c80a6d\",\r\n \"order\": \"\"\r\n },\r\n {\r\n \"enforcementObjectId\": \"adea4954-158c-40c6-8d11-b5912349a5f2\",\r\n \"order\": \"\"\r\n },\r\n {\r\n \"enforcementObjectId\": \"d62d9c00-f1ae-4bf8-979a-326171efb772\",\r\n \"order\": \"\"\r\n },\r\n {\r\n \"enforcementObjectId\": \"72a712bb-7134-4328-9701-43fb06fbfeb9\",\r\n \"order\": \"\"\r\n },\r\n {\r\n \"enforcementObjectId\": \"bc5e15ef-0a50-4876-ae98-11ce30e7a285\",\r\n \"order\": \"\"\r\n },\r\n {\r\n \"enforcementObjectId\": \"895f963f-8297-41b9-a4b4-002b7bb71870\",\r\n \"order\": \"\"\r\n },\r\n {\r\n \"enforcementObjectId\": \"96568d84-7f85-4a7d-8c82-c8f90a75a212\",\r\n \"order\": \"\"\r\n },\r\n {\r\n \"enforcementObjectId\": \"ecd4669e-ddce-4b23-af6c-79315d4fae95\",\r\n \"order\": \"\"\r\n }\r\n ],\r\n \"stageKey\": \"threatProtection\"\r\n }\r\n ],\r\n \"global\": true,\r\n \"active\": true,\r\n \"systemPolicy\": false,\r\n \"policyActionTemplateKeys\": [\r\n \"MsgSizeLimitFilter\"\r\n ]\r\n }\r\n}" - }, - "schema" : { - "$ref" : "#/definitions/Policy" - } - }, - "500" : { - "description" : "This status code indicates that the server has encountered an error while enabling the threat protection policy" - }, - "404" : { - "description" : "This status code indicates that the threat protection policy id specified is not found in API Gateway", - "examples" : { - "application/json" : "{\r\n \"errorDetails\": \" Unable to find the resource: 7b2cd4a6-49f3-480d-8965-a77971605fb71\"\r\n}" - } - }, - "401" : { - "description" : "This status code indicates either user did not provide any user credential or user does not have API Gateway Administrator or API Gateway provider access to enable the threat protection policy." - }, - "400" : { - "description" : "This status code indicates that the policy id specified is not a threat protection policy", - "examples" : { - "application/json" : "{\r\n \"errorDetails\": \"Enable action supported only for Threat protection policies\"\r\n}" - } - } - }, - "security" : [ { - "Basic" : [ ] - } ] - } - }, - "/policies/{policyId}/disable" : { - "put" : { - "description" : "This REST request is used to disable the Threat protection rule created in API Gateway. This request does not require any request body. If the threat protection policy is disabled successfully then the policy details of specified policy will be sent as response.", - "operationId" : "disableThreatProtectionRuleByPolicyID", - "consumes" : [ "application/json" ], - "produces" : [ "application/json" ], - "parameters" : [ { - "name" : "policyId", - "in" : "path", - "description" : "This path parameter is used to specify the policy id of the threat protection policy which needs to be disabled", - "required" : true, - "type" : "string", - "x-example" : "732c4526-db9a-4ef9-9782-edda1a6aa9bc" - } ], - "responses" : { - "200" : { - "description" : "This status code indicates that the threat protection policy is disabled and the policy details of the Threat protection will be in response with active flag set to false", - "examples" : { - "application/json" : "{\r\n \"policy\": {\r\n \"id\": \"7b2cd4a6-49f3-480d-8965-a77971605fb7\",\r\n \"names\": [\r\n {\r\n \"value\": \"Message_size_filter\",\r\n \"locale\": \"English\"\r\n }\r\n ],\r\n \"parameters\": [\r\n {\r\n \"templateKey\": \"customErrorMessage\",\r\n \"values\": [\r\n \"Message size limit exceeded\"\r\n ]\r\n },\r\n {\r\n \"templateKey\": \"action\",\r\n \"values\": [\r\n \"DENY\"\r\n ]\r\n },\r\n {\r\n \"templateKey\": \"enableRule\",\r\n \"values\": [\r\n \"Disable\"\r\n ]\r\n },\r\n {\r\n \"templateKey\": \"rule\",\r\n \"values\": [\r\n \"Message_size_filter\"\r\n ]\r\n },\r\n {\r\n \"templateKey\": \"ruleDescription\",\r\n \"values\": [\r\n \"This threat protection rule is used to filter request based on size\"\r\n ]\r\n },\r\n {\r\n \"templateKey\": \"ruleName\",\r\n \"values\": [\r\n \"Message_size_filter\"\r\n ]\r\n },\r\n {\r\n \"templateKey\": \"ruleType\",\r\n \"values\": [\r\n \"DENY\"\r\n ]\r\n },\r\n {\r\n \"templateKey\": \"isEnterpriseGatewayLicensed\",\r\n \"values\": [\r\n \"true\"\r\n ]\r\n },\r\n {\r\n \"templateKey\": \"alertOption\",\r\n \"parameters\": [\r\n {\r\n \"templateKey\": \"alertInterval\",\r\n \"values\": [\r\n \"60\"\r\n ]\r\n },\r\n {\r\n \"templateKey\": \"alertOnEvery\",\r\n \"values\": [\r\n \"false\"\r\n ]\r\n },\r\n {\r\n \"templateKey\": \"alertType\",\r\n \"values\": [\r\n \"None\"\r\n ]\r\n },\r\n {\r\n \"templateKey\": \"emailTo\",\r\n \"values\": [\r\n \"\"\r\n ]\r\n },\r\n {\r\n \"templateKey\": \"flowServiceName\",\r\n \"values\": [\r\n \"\"\r\n ]\r\n },\r\n {\r\n \"templateKey\": \"runAsUser\",\r\n \"values\": [\r\n \"\"\r\n ]\r\n }\r\n ]\r\n },\r\n {\r\n \"templateKey\": \"isRuleEnabled\",\r\n \"values\": [\r\n \"false\"\r\n ]\r\n }\r\n ],\r\n \"policyEnforcements\": [\r\n {\r\n \"enforcements\": [\r\n {\r\n \"enforcementObjectId\": \"b9cfc355-0d11-4ea2-aae9-54df71c80a6d\",\r\n \"order\": \"\"\r\n },\r\n {\r\n \"enforcementObjectId\": \"adea4954-158c-40c6-8d11-b5912349a5f2\",\r\n \"order\": \"\"\r\n },\r\n {\r\n \"enforcementObjectId\": \"d62d9c00-f1ae-4bf8-979a-326171efb772\",\r\n \"order\": \"\"\r\n },\r\n {\r\n \"enforcementObjectId\": \"72a712bb-7134-4328-9701-43fb06fbfeb9\",\r\n \"order\": \"\"\r\n },\r\n {\r\n \"enforcementObjectId\": \"bc5e15ef-0a50-4876-ae98-11ce30e7a285\",\r\n \"order\": \"\"\r\n },\r\n {\r\n \"enforcementObjectId\": \"895f963f-8297-41b9-a4b4-002b7bb71870\",\r\n \"order\": \"\"\r\n },\r\n {\r\n \"enforcementObjectId\": \"96568d84-7f85-4a7d-8c82-c8f90a75a212\",\r\n \"order\": \"\"\r\n },\r\n {\r\n \"enforcementObjectId\": \"ecd4669e-ddce-4b23-af6c-79315d4fae95\",\r\n \"order\": \"\"\r\n }\r\n ],\r\n \"stageKey\": \"threatProtection\"\r\n }\r\n ],\r\n \"global\": true,\r\n \"active\": false,\r\n \"systemPolicy\": false,\r\n \"policyActionTemplateKeys\": [\r\n \"MsgSizeLimitFilter\"\r\n ]\r\n }\r\n}" - }, - "schema" : { - "$ref" : "#/definitions/Policy" - } - }, - "500" : { - "description" : "This status code indicates that the server has encountered an error while disabling the threat protection policy" - }, - "404" : { - "description" : "This status code indicates that the threat protection policy id specified is not found in API Gateway", - "examples" : { - "application/json" : "{\r\n \"errorDetails\": \" Unable to find the resource: 0dfa92ee-fa5e-4c4e-88b2-653048659e8c1\"\r\n}" - } - }, - "401" : { - "description" : "This status code indicates that the user did not provide any user credential or user does not have API Gateway Administrator or API Gateway provider access to disable the threat protection policy." - }, - "400" : { - "description" : "This status code indicates that the policy id specified is not a threat protection policy", - "examples" : { - "application/json" : "{\r\n \"errorDetails\": \"Disable action supported only for Threat protection policies\"\r\n}" - } - } - }, - "security" : [ { - "Basic" : [ ] - } ] - } - }, - "/policies/{policyId}/movedown" : { - "put" : { - "description" : "This REST request is used to move down the execution order of the Threat protection rule created in API Gateway. This request does not require any request body. If the threat protection policy execution order is changed successfully then the policy details of specified policy will be sent as response.", - "operationId" : "moveDownThreatProtectionRuleByPolicyID", - "consumes" : [ "application/json" ], - "produces" : [ "application/json" ], - "parameters" : [ { - "name" : "policyId", - "in" : "path", - "description" : "This path parameter is used to specify the policy id of the threat protection whose execution order needs to be moved down ", - "required" : true, - "type" : "string", - "x-example" : "732c4526-db9a-4ef9-9782-edda1a6aa9bc" - } ], - "responses" : { - "200" : { - "description" : "This status indicates that the threat protection policy execution order has been changed successfully and policy details of the Threat protection will be in response", - "examples" : { - "application/json" : "{\r\n \"policy\": {\r\n \"id\": \"7b2cd4a6-49f3-480d-8965-a77971605fb7\",\r\n \"names\": [\r\n {\r\n \"value\": \"Message_size_filter\",\r\n \"locale\": \"English\"\r\n }\r\n ],\r\n \"parameters\": [\r\n {\r\n \"templateKey\": \"customErrorMessage\",\r\n \"values\": [\r\n \"Message size limit exceeded\"\r\n ]\r\n },\r\n {\r\n \"templateKey\": \"action\",\r\n \"values\": [\r\n \"DENY\"\r\n ]\r\n },\r\n {\r\n \"templateKey\": \"enableRule\",\r\n \"values\": [\r\n \"Disable\"\r\n ]\r\n },\r\n {\r\n \"templateKey\": \"rule\",\r\n \"values\": [\r\n \"Message_size_filter\"\r\n ]\r\n },\r\n {\r\n \"templateKey\": \"ruleDescription\",\r\n \"values\": [\r\n \"This threat protection rule is used to filter request based on size\"\r\n ]\r\n },\r\n {\r\n \"templateKey\": \"ruleName\",\r\n \"values\": [\r\n \"Message_size_filter\"\r\n ]\r\n },\r\n {\r\n \"templateKey\": \"ruleType\",\r\n \"values\": [\r\n \"DENY\"\r\n ]\r\n },\r\n {\r\n \"templateKey\": \"isEnterpriseGatewayLicensed\",\r\n \"values\": [\r\n \"true\"\r\n ]\r\n },\r\n {\r\n \"templateKey\": \"alertOption\",\r\n \"parameters\": [\r\n {\r\n \"templateKey\": \"alertInterval\",\r\n \"values\": [\r\n \"60\"\r\n ]\r\n },\r\n {\r\n \"templateKey\": \"alertOnEvery\",\r\n \"values\": [\r\n \"false\"\r\n ]\r\n },\r\n {\r\n \"templateKey\": \"alertType\",\r\n \"values\": [\r\n \"None\"\r\n ]\r\n },\r\n {\r\n \"templateKey\": \"emailTo\",\r\n \"values\": [\r\n \"\"\r\n ]\r\n },\r\n {\r\n \"templateKey\": \"flowServiceName\",\r\n \"values\": [\r\n \"\"\r\n ]\r\n },\r\n {\r\n \"templateKey\": \"runAsUser\",\r\n \"values\": [\r\n \"\"\r\n ]\r\n }\r\n ]\r\n },\r\n {\r\n \"templateKey\": \"isRuleEnabled\",\r\n \"values\": [\r\n \"false\"\r\n ]\r\n }\r\n ],\r\n \"policyEnforcements\": [\r\n {\r\n \"enforcements\": [\r\n {\r\n \"enforcementObjectId\": \"b9cfc355-0d11-4ea2-aae9-54df71c80a6d\",\r\n \"order\": \"\"\r\n },\r\n {\r\n \"enforcementObjectId\": \"adea4954-158c-40c6-8d11-b5912349a5f2\",\r\n \"order\": \"\"\r\n },\r\n {\r\n \"enforcementObjectId\": \"d62d9c00-f1ae-4bf8-979a-326171efb772\",\r\n \"order\": \"\"\r\n },\r\n {\r\n \"enforcementObjectId\": \"72a712bb-7134-4328-9701-43fb06fbfeb9\",\r\n \"order\": \"\"\r\n },\r\n {\r\n \"enforcementObjectId\": \"bc5e15ef-0a50-4876-ae98-11ce30e7a285\",\r\n \"order\": \"\"\r\n },\r\n {\r\n \"enforcementObjectId\": \"895f963f-8297-41b9-a4b4-002b7bb71870\",\r\n \"order\": \"\"\r\n },\r\n {\r\n \"enforcementObjectId\": \"96568d84-7f85-4a7d-8c82-c8f90a75a212\",\r\n \"order\": \"\"\r\n },\r\n {\r\n \"enforcementObjectId\": \"ecd4669e-ddce-4b23-af6c-79315d4fae95\",\r\n \"order\": \"\"\r\n }\r\n ],\r\n \"stageKey\": \"threatProtection\"\r\n }\r\n ],\r\n \"global\": true,\r\n \"active\": false,\r\n \"systemPolicy\": false,\r\n \"policyActionTemplateKeys\": [\r\n \"MsgSizeLimitFilter\"\r\n ]\r\n }\r\n}" - }, - "schema" : { - "$ref" : "#/definitions/Policy" - } - }, - "500" : { - "description" : "This status code indicates that the server has encountered an error while changing the execution order of the threat protection policy" - }, - "404" : { - "description" : "This status code indicates that the threat protection policy id specified is not found in API Gateway", - "examples" : { - "application/json" : "{\r\n \"errorDetails\": \" Unable to find the resource: 0dfa92ee-fa5e-4c4e-88b2-653048659e8c1\"\r\n}" - } - }, - "401" : { - "description" : "This status code indicates that the user did not provide any user credential or user does not have API Gateway Administrator or API Gateway provider access to change order of the threat protection policy." - }, - "400" : { - "description" : "This status code indicates that the policy id specified is not a threat protection policy", - "examples" : { - "application/json" : "{\r\n \"errorDetails\": \"Move down action supported only for Threat protection policies\"\r\n}" - } - } - }, - "security" : [ { - "Basic" : [ ] - } ] - } - }, - "/policies/{policyId}/moveup" : { - "put" : { - "description" : "This REST request is used to move up the execution order of the Threat protection rule created in API Gateway. This request does not require any request body. This request does not require any request body. If the threat protection policy execution order is changed successfully then the policy details of specified policy will be sent as response.", - "operationId" : "moveUpThreatProtectionRuleByPolicyID", - "consumes" : [ "application/json" ], - "produces" : [ "application/json" ], - "parameters" : [ { - "name" : "policyId", - "in" : "path", - "description" : "This path parameter is used to specify the policy id of the threat protection whose execution order needs to be moved up ", - "required" : true, - "type" : "string", - "x-example" : "732c4526-db9a-4ef9-9782-edda1a6aa9bc" - } ], - "responses" : { - "200" : { - "description" : "This status indicates that the threat protection policy execution order has been changed successfully and policy details of the Threat protection will be in response", - "examples" : { - "application/json" : "{\r\n \"policy\": {\r\n \"id\": \"7b2cd4a6-49f3-480d-8965-a77971605fb7\",\r\n \"names\": [\r\n {\r\n \"value\": \"Message_size_filter\",\r\n \"locale\": \"English\"\r\n }\r\n ],\r\n \"parameters\": [\r\n {\r\n \"templateKey\": \"customErrorMessage\",\r\n \"values\": [\r\n \"Message size limit exceeded\"\r\n ]\r\n },\r\n {\r\n \"templateKey\": \"action\",\r\n \"values\": [\r\n \"DENY\"\r\n ]\r\n },\r\n {\r\n \"templateKey\": \"enableRule\",\r\n \"values\": [\r\n \"Disable\"\r\n ]\r\n },\r\n {\r\n \"templateKey\": \"rule\",\r\n \"values\": [\r\n \"Message_size_filter\"\r\n ]\r\n },\r\n {\r\n \"templateKey\": \"ruleDescription\",\r\n \"values\": [\r\n \"This threat protection rule is used to filter request based on size\"\r\n ]\r\n },\r\n {\r\n \"templateKey\": \"ruleName\",\r\n \"values\": [\r\n \"Message_size_filter\"\r\n ]\r\n },\r\n {\r\n \"templateKey\": \"ruleType\",\r\n \"values\": [\r\n \"DENY\"\r\n ]\r\n },\r\n {\r\n \"templateKey\": \"isEnterpriseGatewayLicensed\",\r\n \"values\": [\r\n \"true\"\r\n ]\r\n },\r\n {\r\n \"templateKey\": \"alertOption\",\r\n \"parameters\": [\r\n {\r\n \"templateKey\": \"alertInterval\",\r\n \"values\": [\r\n \"60\"\r\n ]\r\n },\r\n {\r\n \"templateKey\": \"alertOnEvery\",\r\n \"values\": [\r\n \"false\"\r\n ]\r\n },\r\n {\r\n \"templateKey\": \"alertType\",\r\n \"values\": [\r\n \"None\"\r\n ]\r\n },\r\n {\r\n \"templateKey\": \"emailTo\",\r\n \"values\": [\r\n \"\"\r\n ]\r\n },\r\n {\r\n \"templateKey\": \"flowServiceName\",\r\n \"values\": [\r\n \"\"\r\n ]\r\n },\r\n {\r\n \"templateKey\": \"runAsUser\",\r\n \"values\": [\r\n \"\"\r\n ]\r\n }\r\n ]\r\n },\r\n {\r\n \"templateKey\": \"isRuleEnabled\",\r\n \"values\": [\r\n \"false\"\r\n ]\r\n }\r\n ],\r\n \"policyEnforcements\": [\r\n {\r\n \"enforcements\": [\r\n {\r\n \"enforcementObjectId\": \"b9cfc355-0d11-4ea2-aae9-54df71c80a6d\",\r\n \"order\": \"\"\r\n },\r\n {\r\n \"enforcementObjectId\": \"adea4954-158c-40c6-8d11-b5912349a5f2\",\r\n \"order\": \"\"\r\n },\r\n {\r\n \"enforcementObjectId\": \"d62d9c00-f1ae-4bf8-979a-326171efb772\",\r\n \"order\": \"\"\r\n },\r\n {\r\n \"enforcementObjectId\": \"72a712bb-7134-4328-9701-43fb06fbfeb9\",\r\n \"order\": \"\"\r\n },\r\n {\r\n \"enforcementObjectId\": \"bc5e15ef-0a50-4876-ae98-11ce30e7a285\",\r\n \"order\": \"\"\r\n },\r\n {\r\n \"enforcementObjectId\": \"895f963f-8297-41b9-a4b4-002b7bb71870\",\r\n \"order\": \"\"\r\n },\r\n {\r\n \"enforcementObjectId\": \"96568d84-7f85-4a7d-8c82-c8f90a75a212\",\r\n \"order\": \"\"\r\n },\r\n {\r\n \"enforcementObjectId\": \"ecd4669e-ddce-4b23-af6c-79315d4fae95\",\r\n \"order\": \"\"\r\n }\r\n ],\r\n \"stageKey\": \"threatProtection\"\r\n }\r\n ],\r\n \"global\": true,\r\n \"active\": false,\r\n \"systemPolicy\": false,\r\n \"policyActionTemplateKeys\": [\r\n \"MsgSizeLimitFilter\"\r\n ]\r\n }\r\n}" - }, - "schema" : { - "$ref" : "#/definitions/Policy" - } - }, - "500" : { - "description" : "This status code indicates that the server has encountered an error while changing the execution order of the threat protection policy" - }, - "404" : { - "description" : "This status code indicates that the threat protection policy id specified is not found in API Gateway", - "examples" : { - "application/json" : "{\r\n \"errorDetails\": \" Unable to find the resource: 0dfa92ee-fa5e-4c4e-88b2-653048659e8c1\"\r\n}" - } - }, - "401" : { - "description" : "This status code indicates that the user did not provide any user credential or user does not have API Gateway Administrator or API Gateway provider access to change order of the threat protection policy." - }, - "400" : { - "description" : "This status code indicates that policy id specified is not a threat protection policy", - "examples" : { - "application/json" : "{\r\n \"errorDetails\": \"Move up action supported only for Threat protection policies\"\r\n}" - } - } - }, - "security" : [ { - "Basic" : [ ] - } ] - } - }, - "/policies/{policyId}/activate" : { - "put" : { - "description" : "This REST request is used to activate a global policy and this request doesn't require any request body. This request will try to activate the global policy and if any error occurs during activation it will be reported as response or if the global policy is activated then its policy details active flag set to true will be sent as response. If the global policy have any conflicts then it cannot be activated the conflicts are manually resolved.", - "operationId" : "activateGlobalPolicyByPolicyID", - "consumes" : [ "application/json" ], - "produces" : [ "application/json" ], - "parameters" : [ { - "name" : "policyId", - "in" : "path", - "description" : "The path parameter should be the policy id of global policy that needs to be activated. If the policy id is not belongs to a global policy then error will be reported", - "required" : true, - "type" : "string", - "x-example" : "732c4526-db9a-4ef9-9782-edda1a6aa9bc" - } ], - "responses" : { - "200" : { - "description" : "This status code indicates that the global policy id specified is activated successfully", - "examples" : { - "application/json" : "{\r\n \"policy\": {\r\n \"id\": \"732c4526-db9a-4ef9-9782-edda1a6aa9bc\",\r\n \"names\": [\r\n {\r\n \"value\": \"a\",\r\n \"locale\": \"English\"\r\n }\r\n ],\r\n \"descriptions\": [\r\n {\r\n \"value\": \"\",\r\n \"locale\": \"English\"\r\n }\r\n ],\r\n \"scope\": {\r\n \"applicableAPITypes\": [\r\n \"REST\",\r\n \"SOAP\"\r\n ],\r\n \"result\": {},\r\n \"scopeConditions\": [],\r\n \"logicalConnector\": \"AND\"\r\n },\r\n \"policyEnforcements\": [\r\n {\r\n \"enforcements\": [\r\n {\r\n \"enforcementObjectId\": \"2e63b365-5fb8-4c8c-b2b3-404045b583f7\",\r\n \"order\": null\r\n }\r\n ],\r\n \"stageKey\": \"IAM\"\r\n }\r\n ],\r\n \"policyScope\": \"GLOBAL\",\r\n \"global\": true,\r\n \"active\": true,\r\n \"systemPolicy\": false\r\n }\r\n}" - }, - "schema" : { - "$ref" : "#/definitions/Policy" - } - }, - "500" : { - "description" : "This status code indicates that the server has encountered an error during the activation of global policy. The sample shows the error is due to a conflict between two global policies on the common applicable APIs. The conflict is between this global policy and other active global policy. This happens when an API satisfies the scope of one or more global policy and during the effective policy calculation you might get policy validation error message. The detailed structure of the error is reported for any conflicts that happen during the process activation ", - "examples" : { - "application/json" : "{\r\n \"errorDetails\": \" Conflict between global Policy for API - EMP_POJO_WSDL, Operation - updateEmployee - An API can be associated with only one policy action with template id Identify & Authorize Application\",\r\n \"reason\": [\r\n {\r\n \"apiId\": \"421eb4bf-b2d0-40a4-900f-ad5fd0a2484e\",\r\n \"apiName\": \"EMP_POJO_WSDL\",\r\n \"apiType\": \"SOAP\",\r\n \"errorOnResource\": [\r\n {\r\n \"conflictingPolicies\": {\r\n \"732c4526-db9a-4ef9-9782-edda1a6aa9bc\": {\r\n \"names\": [\r\n {\r\n \"value\": \"a\",\r\n \"locale\": \"English\"\r\n }\r\n ],\r\n \"policyActionsIds\": [\r\n \"2e63b365-5fb8-4c8c-b2b3-404045b583f7\"\r\n ],\r\n \"policyId\": \"732c4526-db9a-4ef9-9782-edda1a6aa9bc\",\r\n \"policyScope\": \"GLOBAL\",\r\n \"stageKey\": \"IAM\"\r\n }\r\n },\r\n \"error\": {\r\n \"allowedOccurence\": \"once\",\r\n \"errorType\": \"occurence\",\r\n \"policyActionName\": \"[Identify & Authorize Application]\",\r\n \"templateId\": \"evaluatePolicy\"\r\n },\r\n \"errorMessage\": \" An API can be associated with only one policy action with template id Identify & Authorize Application\",\r\n \"policyDetails\": {\r\n \"names\": [\r\n {\r\n \"value\": \"Employee Global Policy\",\r\n \"locale\": \"English\"\r\n }\r\n ],\r\n \"policyActionsIds\": [\r\n \"31c729f9-4f1c-4074-acba-6975c0668433\"\r\n ],\r\n \"policyId\": \"7a16baec-7925-4579-966b-bfe58265853d\",\r\n \"policyScope\": \"GLOBAL\",\r\n \"stageKey\": \"IAM\"\r\n },\r\n \"resource\": \"updateEmployee\"\r\n },\r\n {\r\n \"conflictingPolicies\": {\r\n \"732c4526-db9a-4ef9-9782-edda1a6aa9bc\": {\r\n \"names\": [\r\n {\r\n \"value\": \"a\",\r\n \"locale\": \"English\"\r\n }\r\n ],\r\n \"policyActionsIds\": [\r\n \"2e63b365-5fb8-4c8c-b2b3-404045b583f7\"\r\n ],\r\n \"policyId\": \"732c4526-db9a-4ef9-9782-edda1a6aa9bc\",\r\n \"policyScope\": \"GLOBAL\",\r\n \"stageKey\": \"IAM\"\r\n }\r\n },\r\n \"error\": {\r\n \"allowedOccurence\": \"once\",\r\n \"errorType\": \"occurence\",\r\n \"policyActionName\": \"[Identify & Authorize Application]\",\r\n \"templateId\": \"evaluatePolicy\"\r\n },\r\n \"errorMessage\": \" An API can be associated with only one policy action with template id Identify & Authorize Application\",\r\n \"policyDetails\": {\r\n \"names\": [\r\n {\r\n \"value\": \"Employee Global Policy\",\r\n \"locale\": \"English\"\r\n }\r\n ],\r\n \"policyActionsIds\": [\r\n \"31c729f9-4f1c-4074-acba-6975c0668433\"\r\n ],\r\n \"policyId\": \"7a16baec-7925-4579-966b-bfe58265853d\",\r\n \"policyScope\": \"GLOBAL\",\r\n \"stageKey\": \"IAM\"\r\n },\r\n \"resource\": \"addEmployee\"\r\n },\r\n {\r\n \"conflictingPolicies\": {\r\n \"732c4526-db9a-4ef9-9782-edda1a6aa9bc\": {\r\n \"names\": [\r\n {\r\n \"value\": \"a\",\r\n \"locale\": \"English\"\r\n }\r\n ],\r\n \"policyActionsIds\": [\r\n \"2e63b365-5fb8-4c8c-b2b3-404045b583f7\"\r\n ],\r\n \"policyId\": \"732c4526-db9a-4ef9-9782-edda1a6aa9bc\",\r\n \"policyScope\": \"GLOBAL\",\r\n \"stageKey\": \"IAM\"\r\n }\r\n },\r\n \"error\": {\r\n \"allowedOccurence\": \"once\",\r\n \"errorType\": \"occurence\",\r\n \"policyActionName\": \"[Identify & Authorize Application]\",\r\n \"templateId\": \"evaluatePolicy\"\r\n },\r\n \"errorMessage\": \" An API can be associated with only one policy action with template id Identify & Authorize Application\",\r\n \"policyDetails\": {\r\n \"names\": [\r\n {\r\n \"value\": \"Employee Global Policy\",\r\n \"locale\": \"English\"\r\n }\r\n ],\r\n \"policyActionsIds\": [\r\n \"31c729f9-4f1c-4074-acba-6975c0668433\"\r\n ],\r\n \"policyId\": \"7a16baec-7925-4579-966b-bfe58265853d\",\r\n \"policyScope\": \"GLOBAL\",\r\n \"stageKey\": \"IAM\"\r\n },\r\n \"resource\": \"deleteEmployee\"\r\n },\r\n {\r\n \"conflictingPolicies\": {\r\n \"732c4526-db9a-4ef9-9782-edda1a6aa9bc\": {\r\n \"names\": [\r\n {\r\n \"value\": \"a\",\r\n \"locale\": \"English\"\r\n }\r\n ],\r\n \"policyActionsIds\": [\r\n \"2e63b365-5fb8-4c8c-b2b3-404045b583f7\"\r\n ],\r\n \"policyId\": \"732c4526-db9a-4ef9-9782-edda1a6aa9bc\",\r\n \"policyScope\": \"GLOBAL\",\r\n \"stageKey\": \"IAM\"\r\n }\r\n },\r\n \"error\": {\r\n \"allowedOccurence\": \"once\",\r\n \"errorType\": \"occurence\",\r\n \"policyActionName\": \"[Identify & Authorize Application]\",\r\n \"templateId\": \"evaluatePolicy\"\r\n },\r\n \"errorMessage\": \" An API can be associated with only one policy action with template id Identify & Authorize Application\",\r\n \"policyDetails\": {\r\n \"names\": [\r\n {\r\n \"value\": \"Employee Global Policy\",\r\n \"locale\": \"English\"\r\n }\r\n ],\r\n \"policyActionsIds\": [\r\n \"31c729f9-4f1c-4074-acba-6975c0668433\"\r\n ],\r\n \"policyId\": \"7a16baec-7925-4579-966b-bfe58265853d\",\r\n \"policyScope\": \"GLOBAL\",\r\n \"stageKey\": \"IAM\"\r\n },\r\n \"resource\": \"getEmployee\"\r\n }\r\n ]\r\n }\r\n ]\r\n}" - } - }, - "404" : { - "description" : "This status code indicates that the policy id specified is not found in API Gateway", - "examples" : { - "application/json" : "{\r\n \"errorDetails\": \" Unable to find the resource: 732c4526-db9a-4ef9-9782-edda1a6aa9bc1\"\r\n}" - } - }, - "401" : { - "description" : "This status code indicates that the user did not provide any user credential or user does not have API Gateway Administrator access to activate global policy." - }, - "400" : { - "description" : "This status code indicates that the request is not correct. It can be either due to incorrect policy type or trying to activate already active policy. The sample shows that the policy is specified is not a global policy id.", - "examples" : { - "application/json" : "{\r\n \"errorDetails\": \" Policy [PT1] is not a global policy. Cannot be activated/deactivated.\"\r\n}" - } - } - }, - "security" : [ { - "Basic" : [ ] - } ] - } - }, - "/policies/{policyId}/deactivate" : { - "put" : { - "description" : "This REST request is used to deactivate a global policy and it doesn't require any request body. This request tries to deactivate the global policy and if any error occurs during deactivation will be reported as response or if the global policy deactivated the policy details of a global policy with active flag set to false is sent as response. An active global policy cannot have conflicts with other active global policy and hence the deactivation fails only when the conflict occurs between active global policy that is specified and one or more applicable active APIs. This can happen when the applicable active API policy action might depend on one or more policy action from the specified global policy. If you deactivate this policy, it would cause the active API to have an unstable state. Hence the deactivation is reported as failed in this case.", - "operationId" : "deactivateGlobalPolicyByPolicyID", - "consumes" : [ "application/json" ], - "produces" : [ "application/json" ], - "parameters" : [ { - "name" : "policyId", - "in" : "path", - "description" : "The path parameter should be the policy id of global policy that needs to be deactivated. If the policy id is not belongs to a global policy then error will be reported", - "required" : true, - "type" : "string", - "x-example" : "732c4526-db9a-4ef9-9782-edda1a6aa9bc" - } ], - "responses" : { - "200" : { - "description" : "This status code indicates that the global policy id specified is deactivated successfully", - "examples" : { - "application/json" : "{\r\n \"policy\": {\r\n \"id\": \"732c4526-db9a-4ef9-9782-edda1a6aa9bc\",\r\n \"names\": [\r\n {\r\n \"value\": \"a\",\r\n \"locale\": \"English\"\r\n }\r\n ],\r\n \"descriptions\": [\r\n {\r\n \"value\": \"\",\r\n \"locale\": \"English\"\r\n }\r\n ],\r\n \"scope\": {\r\n \"applicableAPITypes\": [\r\n \"REST\",\r\n \"SOAP\"\r\n ],\r\n \"result\": {},\r\n \"scopeConditions\": [],\r\n \"logicalConnector\": \"AND\"\r\n },\r\n \"policyEnforcements\": [\r\n {\r\n \"enforcements\": [\r\n {\r\n \"enforcementObjectId\": \"2e63b365-5fb8-4c8c-b2b3-404045b583f7\",\r\n \"order\": null\r\n }\r\n ],\r\n \"stageKey\": \"IAM\"\r\n }\r\n ],\r\n \"policyScope\": \"GLOBAL\",\r\n \"global\": true,\r\n \"active\": false,\r\n \"systemPolicy\": false\r\n }\r\n}" - }, - "schema" : { - "$ref" : "#/definitions/Policy" - } - }, - "500" : { - "description" : "This status code indicates that the server has encountered an error during the deactivation of global policy. The sample shows the error due to policy dependencies between an active API and the global policy specified", - "examples" : { - "application/json" : "{\r\n \"errorDetails\": \" Conflict between global Policy for API - EMP, Path - /employee/{id}, Method - get - Policy action Throttling Traffic Optimization is dependent to policy action(s) [Identify & Authorize Application]\",\r\n \"reason\": [\r\n {\r\n \"apiId\": \"e60d6fe9-3612-469f-b33a-fb4c97c72b3b\",\r\n \"apiName\": \"EMP\",\r\n \"apiType\": \"REST\",\r\n \"errorOnResource\": [\r\n {\r\n \"error\": {\r\n \"errorType\": \"occurence\",\r\n \"missingDependency\": [\r\n \"evaluatePolicy\"\r\n ],\r\n \"policyActionName\": \"[Throttling Traffic Optimization]\",\r\n \"templateId\": \"throttle\"\r\n },\r\n \"errorMessage\": \" Policy action Throttling Traffic Optimization is dependent to policy action(s) [Identify & Authorize Application]\",\r\n \"method\": \"get\",\r\n \"policyDetails\": {\r\n \"names\": [\r\n {\r\n \"value\": \"Default Policy for API EMP\",\r\n \"locale\": \"English\"\r\n }\r\n ],\r\n \"policyActionsIds\": [\r\n \"9adf1ff1-efdc-4c41-8998-794d316eaced\"\r\n ],\r\n \"policyId\": \"d7672248-7d25-444e-a9b6-853e1d95d1c6\",\r\n \"policyScope\": \"SERVICE\",\r\n \"stageKey\": \"LMT\"\r\n },\r\n \"resource\": \"/employee/{id}\"\r\n }\r\n ]\r\n }\r\n ]\r\n}" - } - }, - "404" : { - "description" : "This status code indicates that the policy id specified is not found in API Gateway", - "examples" : { - "application/json" : "{\r\n \"errorDetails\": \" Unable to find the resource: 732c4526-db9a-4ef9-9782-edda1a6aa9bc1\"\r\n}" - } - }, - "401" : { - "description" : "This status code indicates that the user did not provide any user credential or user does not have API Gateway Administrator access to deactivate global policy." - }, - "400" : { - "description" : "This status code indicates that the request is not correct. It can be either due to incorrect policy type or trying to deactivate already inactive policy. The sample shows that the policy is specified is not a global policy id.", - "examples" : { - "application/json" : "{\r\n \"errorDetails\": \" Policy [PT1] is not a global policy. Cannot be activated/deactivated.\"\r\n}" - } - } - }, - "security" : [ { - "Basic" : [ ] - } ] - } - }, - "/denialofservice/deniedIP" : { - "get" : { - "description" : "This GET method is used to retrieve the list of IPs are denied ( IPs that violated the threat protection rules configured).", - "operationId" : "getDeniedIPs", - "produces" : [ "application/json" ], - "parameters" : [ ], - "responses" : { - "200" : { - "description" : "This status code indicates that the denied IPs successfully returned. The response contains the list of Denied IPs.", - "examples" : { - "application/json" : "{\r\n \"deniedIPList\": [\r\n \"10.60.37.99\"\r\n ]\r\n}" - }, - "schema" : { - "type" : "array", - "items" : { - "type" : "string" - } - } - }, - "401" : { - "description" : "This status code indicates that the user did not provide any user credential or user does not have API Gateway Administrator access to get denied IPs list." - } - }, - "security" : [ { - "Basic" : [ ] - } ] - }, - "delete" : { - "description" : "This DELETE method is used to remove the IP from Denied IPs list. Once removed the request from IP will be processed.", - "operationId" : "deleteDeniedIPs", - "parameters" : [ { - "name" : "IP", - "in" : "query", - "required" : true, - "type" : "string", - "x-example" : "IP=127.0.0.1" - } ], - "responses" : { - "200" : { - "description" : "This status code indicates that the denied IPs successfully removed from the denied IPs list." - }, - "401" : { - "description" : "This status code indicates that the user did not provide any user credential or user does not have API Gateway Administrator access to delete IP from denied IPs list." - } - }, - "security" : [ { - "Basic" : [ ] - } ] - } - }, - "/policyActionTemplates/{policyActionTemplateId}" : { - "get" : { - "description" : "This REST Request is used to get the template details of a policy action.. To retrieve the policy action template for a particular policy action, specify the policy action template name as a path parameter ", - "consumes" : [ "application/json" ], - "produces" : [ "application/json" ], - "parameters" : [ { - "name" : "policyActionTemplateId", - "in" : "path", - "description" : "This is a path parameter. It will be used to fetch policy action template of a particular template.", - "required" : true, - "type" : "string", - "x-example" : "entryProtocolPolicy" - } ], - "responses" : { - "401" : { - "description" : "This status code indicates that the user did not provide any user credential or user does not have API Gateway Administrator or API Gateway provider access to get the policy action template details." - }, - "404" : { - "description" : "This status code indicates that the policy action template specified is not found", - "examples" : { - "application/json" : "{\r\n \"errorDetails\": \" Unable to find the resource: nonExisitingProtocol\"\r\n}" - } - }, - "200" : { - "description" : "This status code indicates policy action template is available and the response body will contain the policy action template details", - "examples" : { - "application/json" : "{\r\n \"policyActionTemplates\": {\r\n \"templateKey\": \"entryProtocolPolicy\",\r\n \"names\": [\r\n {\r\n \"value\": \"Require HTTP / HTTPS\",\r\n \"locale\": \"en\"\r\n }\r\n ],\r\n \"descriptions\": [\r\n {\r\n \"value\": \"Encapsulates the access protocol (HTTP and/or HTTPS) which will be used by client for communicating to the API-Gateway.\",\r\n \"locale\": \"en\"\r\n }\r\n ],\r\n \"applicableServiceTypes\": [\r\n \"REST\",\r\n \"SOAP\"\r\n ],\r\n \"parameterTemplatesReference\": [],\r\n \"parameterTemplates\": [\r\n {\r\n \"templateKey\": \"protocol\",\r\n \"names\": [\r\n {\r\n \"value\": \"Protocol\",\r\n \"locale\": \"en\"\r\n }\r\n ],\r\n \"descriptions\": [\r\n {\r\n \"value\": \"Access protocol for bridging between the client and API-Gateway.\",\r\n \"locale\": \"en\"\r\n }\r\n ],\r\n \"type\": \"STRING\",\r\n \"isArray\": true,\r\n \"isRequired\": true,\r\n \"canRender\": true,\r\n \"defaultValues\": [\r\n \"http\"\r\n ],\r\n \"possibleValues\": [\r\n {\r\n \"names\": [\r\n {\r\n \"value\": \"HTTP\",\r\n \"locale\": \"en\"\r\n }\r\n ],\r\n \"value\": \"http\"\r\n },\r\n {\r\n \"names\": [\r\n {\r\n \"value\": \"HTTPS\",\r\n \"locale\": \"en\"\r\n }\r\n ],\r\n \"value\": \"https\"\r\n }\r\n ]\r\n },\r\n {\r\n \"templateKey\": \"soapVersion\",\r\n \"names\": [\r\n {\r\n \"value\": \"SOAP version\",\r\n \"locale\": \"en\"\r\n }\r\n ],\r\n \"descriptions\": [\r\n {\r\n \"value\": \"Supported SOAP Version.\",\r\n \"locale\": \"en\"\r\n }\r\n ],\r\n \"type\": \"STRING\",\r\n \"isArray\": false,\r\n \"isRequired\": false,\r\n \"canRender\": true,\r\n \"defaultValues\": [\r\n \"soap\"\r\n ],\r\n \"possibleValues\": [\r\n {\r\n \"names\": [\r\n {\r\n \"value\": \"SOAP 1.1\",\r\n \"locale\": \"en\"\r\n }\r\n ],\r\n \"value\": \"soap\"\r\n },\r\n {\r\n \"names\": [\r\n {\r\n \"value\": \"SOAP 1.2\",\r\n \"locale\": \"en\"\r\n }\r\n ],\r\n \"value\": \"soap12\"\r\n }\r\n ],\r\n \"applicableServiceTypes\": [\r\n \"SOAP\"\r\n ]\r\n }\r\n ],\r\n \"occurence\": \"once\",\r\n \"stageSpecific\": null,\r\n \"dependentActions\": null,\r\n \"dependentActionsConnector\": null,\r\n \"mutuallyExclusiveActions\": null,\r\n \"order\": {\r\n \"sequence\": [\r\n \"insequence\"\r\n ],\r\n \"orderPosition\": \"first\",\r\n \"isCustomOrderSupported\": false,\r\n \"policyTemplateIDs\": null\r\n },\r\n \"requiredParametersKeys\": [\r\n \"protocol\"\r\n ],\r\n \"canAppliedAtResourceMethodLevel\": false\r\n }\r\n}" - }, - "schema" : { - "$ref" : "#/definitions/PolicyActionTemplate" - } - } - }, - "security" : [ { - "Basic" : [ ] - } ] - } - }, - "/policyActionTemplates" : { - "get" : { - "description" : "This REST Request is used to get the template detail for list of policy action.", - "consumes" : [ "application/json" ], - "produces" : [ "application/json" ], - "parameters" : [ { - "name" : "policyActionTemplates", - "in" : "query", - "description" : "This is a query parameter. It will be used to fetch policy action templates for list of policy action.", - "required" : false, - "type" : "string", - "x-example" : "policyActionTemplates=setMediaType,entryProtocolPolicy" - } ], - "responses" : { - "401" : { - "description" : "This status code indicates that the user did not provide any user credential or user does not have API Gateway Administrator or API Gateway provider access to get policy action template." - }, - "200" : { - "description" : "This status code indicates the server has processed the request. The response body will contain the policy action templates for valid policy actions. If any of the policy action template specified is invalid, it will ommit that policy action template and return the response with remaining valid policy action template.", - "examples" : { - "application/json" : "{\r\n \"policyActionTemplates\": [\r\n {\r\n \"templateKey\": \"setMediaType\",\r\n \"names\": [\r\n {\r\n \"value\": \"Set Media Type\",\r\n \"locale\": \"en\"\r\n }\r\n ],\r\n \"descriptions\": [\r\n {\r\n \"value\": \"This policy is used to configure the default media type values for Content-Type and Accept headers. These values shall be used as the Content-Type or Accept-Header respectively, if no Content-Type or Accept-Header is specified in the run-time invoke request.\",\r\n \"locale\": \"en\"\r\n }\r\n ],\r\n \"applicableServiceTypes\": [\r\n \"REST\"\r\n ],\r\n \"parameterTemplatesReference\": [],\r\n \"parameterTemplates\": [\r\n {\r\n \"templateKey\": \"defaultContentType\",\r\n \"names\": [\r\n {\r\n \"value\": \"Default Content-Type\",\r\n \"locale\": \"en\"\r\n }\r\n ],\r\n \"descriptions\": [\r\n {\r\n \"value\": \"The Media Type value configured in this parameter will be sent as the Content-Type if no Content-Type is specified in the run-time invoke request.\",\r\n \"locale\": \"en\"\r\n }\r\n ],\r\n \"type\": \"STRING\",\r\n \"isArray\": false,\r\n \"isRequired\": false,\r\n \"canRender\": true\r\n },\r\n {\r\n \"templateKey\": \"defaultAccept\",\r\n \"names\": [\r\n {\r\n \"value\": \"Default Accept Header\",\r\n \"locale\": \"en\"\r\n }\r\n ],\r\n \"descriptions\": [\r\n {\r\n \"value\": \"The Media Type value configured in this parameter will be used as the Accept header if no Accept header is specified in the run-time invoke request.\",\r\n \"locale\": \"en\"\r\n }\r\n ],\r\n \"type\": \"STRING\",\r\n \"isArray\": false,\r\n \"isRequired\": false,\r\n \"canRender\": true\r\n }\r\n ],\r\n \"occurence\": \"once\",\r\n \"stageSpecific\": null,\r\n \"dependentActions\": [],\r\n \"dependentActionsConnector\": null,\r\n \"mutuallyExclusiveActions\": null,\r\n \"order\": {\r\n \"sequence\": [\r\n \"insequence\"\r\n ],\r\n \"orderPosition\": \"last\",\r\n \"isCustomOrderSupported\": false,\r\n \"policyTemplateIDs\": null\r\n },\r\n \"requiredParametersKeys\": [],\r\n \"canAppliedAtResourceMethodLevel\": false\r\n },\r\n {\r\n \"templateKey\": \"entryProtocolPolicy\",\r\n \"names\": [\r\n {\r\n \"value\": \"Require HTTP / HTTPS\",\r\n \"locale\": \"en\"\r\n }\r\n ],\r\n \"descriptions\": [\r\n {\r\n \"value\": \"Encapsulates the access protocol (HTTP and/or HTTPS) which will be used by client for communicating to the API-Gateway.\",\r\n \"locale\": \"en\"\r\n }\r\n ],\r\n \"applicableServiceTypes\": [\r\n \"REST\",\r\n \"SOAP\"\r\n ],\r\n \"parameterTemplatesReference\": [],\r\n \"parameterTemplates\": [\r\n {\r\n \"templateKey\": \"protocol\",\r\n \"names\": [\r\n {\r\n \"value\": \"Protocol\",\r\n \"locale\": \"en\"\r\n }\r\n ],\r\n \"descriptions\": [\r\n {\r\n \"value\": \"Access protocol for bridging between the client and API-Gateway.\",\r\n \"locale\": \"en\"\r\n }\r\n ],\r\n \"type\": \"STRING\",\r\n \"isArray\": true,\r\n \"isRequired\": true,\r\n \"canRender\": true,\r\n \"defaultValues\": [\r\n \"http\"\r\n ],\r\n \"possibleValues\": [\r\n {\r\n \"names\": [\r\n {\r\n \"value\": \"HTTP\",\r\n \"locale\": \"en\"\r\n }\r\n ],\r\n \"value\": \"http\"\r\n },\r\n {\r\n \"names\": [\r\n {\r\n \"value\": \"HTTPS\",\r\n \"locale\": \"en\"\r\n }\r\n ],\r\n \"value\": \"https\"\r\n }\r\n ]\r\n },\r\n {\r\n \"templateKey\": \"soapVersion\",\r\n \"names\": [\r\n {\r\n \"value\": \"SOAP version\",\r\n \"locale\": \"en\"\r\n }\r\n ],\r\n \"descriptions\": [\r\n {\r\n \"value\": \"Supported SOAP Version.\",\r\n \"locale\": \"en\"\r\n }\r\n ],\r\n \"type\": \"STRING\",\r\n \"isArray\": false,\r\n \"isRequired\": false,\r\n \"canRender\": true,\r\n \"defaultValues\": [\r\n \"soap\"\r\n ],\r\n \"possibleValues\": [\r\n {\r\n \"names\": [\r\n {\r\n \"value\": \"SOAP 1.1\",\r\n \"locale\": \"en\"\r\n }\r\n ],\r\n \"value\": \"soap\"\r\n },\r\n {\r\n \"names\": [\r\n {\r\n \"value\": \"SOAP 1.2\",\r\n \"locale\": \"en\"\r\n }\r\n ],\r\n \"value\": \"soap12\"\r\n }\r\n ],\r\n \"applicableServiceTypes\": [\r\n \"SOAP\"\r\n ]\r\n }\r\n ],\r\n \"occurence\": \"once\",\r\n \"stageSpecific\": null,\r\n \"dependentActions\": null,\r\n \"dependentActionsConnector\": null,\r\n \"mutuallyExclusiveActions\": null,\r\n \"order\": {\r\n \"sequence\": [\r\n \"insequence\"\r\n ],\r\n \"orderPosition\": \"first\",\r\n \"isCustomOrderSupported\": false,\r\n \"policyTemplateIDs\": null\r\n },\r\n \"requiredParametersKeys\": [\r\n \"protocol\"\r\n ],\r\n \"canAppliedAtResourceMethodLevel\": false\r\n }\r\n ]\r\n}" - }, - "schema" : { - "type" : "array", - "items" : { - "$ref" : "#/definitions/PolicyActionTemplate" - } - } - } - }, - "security" : [ { - "Basic" : [ ] - } ] - } - }, - "/policyStages" : { - "get" : { - "description" : "This REST Request is used to get the list of policy stages available in API gateway. It will also show the list of policies (template key of each policy) associated with each stage. ", - "operationId" : "getPolicyStages", - "consumes" : [ "application/json" ], - "produces" : [ "application/json" ], - "parameters" : [ ], - "responses" : { - "200" : { - "description" : "The response body contains list of all stages and policy associated with the stages. Also the response body contains the sequence where the policies corresponding to a stage will be executed", - "examples" : { - "application/json" : "{\r\n \"stages\": [\r\n {\r\n \"stageKey\": \"threatProtection\",\r\n \"names\": [\r\n {\r\n \"value\": \"Threat Protection\",\r\n \"locale\": \"en\"\r\n }\r\n ],\r\n \"descriptions\": [],\r\n \"policyActionTemplates\": [\r\n \"globalipdos\",\r\n \"ipdos\",\r\n \"egviolationalert\",\r\n \"MsgSizeLimitFilter\",\r\n \"OAuthFilter\",\r\n \"mobileAppProtectionFilter\",\r\n \"sqlInjectionFilter\",\r\n \"antiVirusFilter\",\r\n \"jsonThreatProtectionFilter\",\r\n \"xmlThreatProtectionFilter\",\r\n \"customFilter\"\r\n ],\r\n \"sequence\": \"insequence\"\r\n },\r\n {\r\n \"stageKey\": \"transport\",\r\n \"names\": [\r\n {\r\n \"value\": \"Transport\",\r\n \"locale\": \"en\"\r\n }\r\n ],\r\n \"descriptions\": [],\r\n \"policyActionTemplates\": [\r\n \"entryProtocolPolicy\",\r\n \"setMediaType\"\r\n ],\r\n \"sequence\": \"insequence\"\r\n },\r\n {\r\n \"stageKey\": \"IAM\",\r\n \"names\": [\r\n {\r\n \"value\": \"Identity and Access Management\",\r\n \"locale\": \"en\"\r\n }\r\n ],\r\n \"descriptions\": [],\r\n \"policyActionTemplates\": [\r\n \"inboundAuthTransport\",\r\n \"webServiceSecurityPolicy\",\r\n \"authorizeUser\",\r\n \"evaluatePolicy\"\r\n ],\r\n \"sequence\": null\r\n },\r\n {\r\n \"stageKey\": \"requestPayloadProcessing\",\r\n \"names\": [\r\n {\r\n \"value\": \"Request Payload Processing\",\r\n \"locale\": \"en\"\r\n }\r\n ],\r\n \"descriptions\": [],\r\n \"policyActionTemplates\": [\r\n \"invokeESB\",\r\n \"xsltTransformation\",\r\n \"validateSchema\"\r\n ],\r\n \"sequence\": \"insequence\"\r\n },\r\n {\r\n \"stageKey\": \"routing\",\r\n \"names\": [\r\n {\r\n \"value\": \"Routing Policies\",\r\n \"locale\": \"en\"\r\n }\r\n ],\r\n \"descriptions\": [],\r\n \"policyActionTemplates\": [\r\n \"contentBasedRouting\",\r\n \"contextBasedRouting\",\r\n \"dynamicRouting\",\r\n \"loadBalancerRouting\",\r\n \"straightThroughRouting\",\r\n \"customHttpHeaders\",\r\n \"outboundTransportAuthentication\",\r\n \"outboundMessageAuthentication\"\r\n ],\r\n \"sequence\": \"insequence\"\r\n },\r\n {\r\n \"stageKey\": \"LMT\",\r\n \"names\": [\r\n {\r\n \"value\": \"Logging, Monitoring and Traffic Optimization\",\r\n \"locale\": \"en\"\r\n }\r\n ],\r\n \"descriptions\": [],\r\n \"policyActionTemplates\": [\r\n \"logInvocation\",\r\n \"monitorServicePerformance\",\r\n \"monitorSLA\",\r\n \"throttle\",\r\n \"serviceResultCache\"\r\n ],\r\n \"sequence\": \"insequence\"\r\n },\r\n {\r\n \"stageKey\": \"responseProcessing\",\r\n \"names\": [\r\n {\r\n \"value\": \"Response Processing\",\r\n \"locale\": \"en\"\r\n }\r\n ],\r\n \"descriptions\": [],\r\n \"policyActionTemplates\": [\r\n \"invokeESB\",\r\n \"xsltTransformation\",\r\n \"validateSchema\"\r\n ],\r\n \"sequence\": \"outsequence\"\r\n },\r\n {\r\n \"stageKey\": \"responseFaultProcessing\",\r\n \"names\": [\r\n {\r\n \"value\": \"Error Handling\",\r\n \"locale\": \"en\"\r\n }\r\n ],\r\n \"descriptions\": [],\r\n \"policyActionTemplates\": [\r\n \"conditionalErrorProcessing\"\r\n ],\r\n \"sequence\": \"faultsequence\"\r\n }\r\n ]\r\n}" - }, - "schema" : { - "type" : "array", - "items" : { - "$ref" : "#/definitions/PolicyEnforcementStage" - } - } - }, - "401" : { - "description" : "This status code indicates that the user did not provide any user credential or user does not have API Gateway Administrator or API Gateway provider access to get the policy stage." - } - }, - "security" : [ { - "Basic" : [ ] - } ] - } - }, - "/policyActions/{policyActionId}" : { - "get" : { - "description" : "This request will return policy action details of the policy action based on the id specified in path", - "operationId" : "getPolicyAction", - "consumes" : [ "application/json" ], - "produces" : [ "application/json" ], - "parameters" : [ { - "name" : "policyActionId", - "in" : "path", - "description" : "This path parameter is used to specify the policy action id which policy action details needs to retrieved.", - "required" : true, - "type" : "string", - "x-example" : "685e99ee-0e1b-4afa-8ff3-4322cf296566" - } ], - "responses" : { - "200" : { - "description" : "The details of policy action will be available in response body", - "examples" : { - "application/json" : "{\r\n \"policyAction\": {\r\n \"id\": \"685e99ee-0e1b-4afa-8ff3-4322cf296566\",\r\n \"names\": [\r\n {\r\n \"value\": \"Require HTTP / HTTPS\",\r\n \"locale\": \"en\"\r\n }\r\n ],\r\n \"templateKey\": \"entryProtocolPolicy\",\r\n \"parameters\": [\r\n {\r\n \"templateKey\": \"protocol\",\r\n \"values\": [\r\n \"http\"\r\n ]\r\n },\r\n {\r\n \"templateKey\": \"soapVersion\",\r\n \"values\": [\r\n \"soap\"\r\n ]\r\n }\r\n ],\r\n \"active\": false\r\n }\r\n}" - }, - "schema" : { - "$ref" : "#/definitions/PolicyAction" - } - }, - "404" : { - "description" : "This status code indicates that the policy action specified does not exists", - "examples" : { - "application/json" : "{\r\n \"errorDetails\": \" Unable to find the resource: 685e99ee-0e1b-4afa-8ff3-4322cf2965661\"\r\n}" - } - }, - "401" : { - "description" : "This status code indicates that the user did not provide any user credential or user does not have API Gateway Administrator or API Gateway provider access to get the details of a policy action." - } - }, - "security" : [ { - "Basic" : [ ] - } ] - }, - "put" : { - "description" : "This put request is used to update policy action based on the policy action id which is specified in path", - "operationId" : "updatePolicyAction", - "consumes" : [ "application/json" ], - "produces" : [ "application/json" ], - "parameters" : [ { - "name" : "policyActionId", - "in" : "path", - "description" : "This path parameter is used to specify the policy action id which needs to be updated.", - "required" : true, - "type" : "string", - "x-example" : "685e99ee-0e1b-4afa-8ff3-4322cf296566" - }, { - "in" : "body", - "name" : "body", - "description" : "Contains the policy action details which needs to be updated.", - "required" : true, - "schema" : { - "$ref" : "#/definitions/PolicyAction" - }, - "x-examples" : { - "application/json" : "{\r\n \"policyAction\": {\r\n \"id\": \"685e99ee-0e1b-4afa-8ff3-4322cf296566\",\r\n \"names\": [\r\n {\r\n \"value\": \"Require HTTP / HTTPS\",\r\n \"locale\": \"en\"\r\n }\r\n ],\r\n \"templateKey\": \"entryProtocolPolicy\",\r\n \"parameters\": [\r\n {\r\n \"templateKey\": \"protocol\",\r\n \"values\": [\r\n \"http\"\r\n ]\r\n },\r\n {\r\n \"templateKey\": \"soapVersion\",\r\n \"values\": [\r\n \"soap\"\r\n ]\r\n }\r\n ],\r\n \"active\": false\r\n }\r\n}" - } - } ], - "responses" : { - "200" : { - "description" : "This status code indicates that API Gateway has successfully updated the specified policy action and the updated policy action details can be found in the response body", - "examples" : { - "application/json" : "{\r\n \"policyAction\": {\r\n \"id\": \"685e99ee-0e1b-4afa-8ff3-4322cf296566\",\r\n \"names\": [\r\n {\r\n \"value\": \"Require HTTP / HTTPS\",\r\n \"locale\": \"en\"\r\n }\r\n ],\r\n \"templateKey\": \"entryProtocolPolicy\",\r\n \"parameters\": [\r\n {\r\n \"templateKey\": \"protocol\",\r\n \"values\": [\r\n \"http\"\r\n ]\r\n },\r\n {\r\n \"templateKey\": \"soapVersion\",\r\n \"values\": [\r\n \"soap\"\r\n ]\r\n }\r\n ],\r\n \"active\": false\r\n }\r\n}" - }, - "schema" : { - "$ref" : "#/definitions/PolicyAction" - } - }, - "500" : { - "description" : "This status code indicates the processing error occurred during the update of policy action and the corresponding details can be seen in the response body", - "examples" : { - "application/json" : "{\r\n \"errorDetails\": \" Unable to process the PUT request for APIs. An error occurred while processing the payload. Error message:\\n Unable to find the resource: 685e99ee-0e1b-4afa-8ff3-4322cf2965661\"\r\n}" - } - }, - "401" : { - "description" : "This status code indicates that the user did not provide any user credential or user does not have API Gateway Administrator or API Gateway provider access to update the policy action." - }, - "400" : { - "description" : "Tis status code indicates the request payload is not correct and corresponding error details can be seen in the response body", - "examples" : { - "application/json" : "{\r\n \"errorDetails\": \" Unable to process the PUT request for APIs. An error occurred while processing the payload. Error message:\\n Unable to create the resource. Error in processing the payload null. Error Message . Check the correctness of key and payload.\"\r\n}" - } - } - }, - "security" : [ { - "Basic" : [ ] - } ] - }, - "delete" : { - "description" : "This delete request will delete the policy action based on the policy action id which is specified in path", - "operationId" : "deletePolicyAction", - "consumes" : [ "application/json" ], - "produces" : [ "application/json" ], - "parameters" : [ { - "name" : "policyActionId", - "in" : "path", - "description" : "Policy Action ID", - "required" : true, - "type" : "string", - "x-example" : "685e99ee-0e1b-4afa-8ff3-4322cf296566" - } ], - "responses" : { - "401" : { - "description" : "This status code indicates that the user did not provide any user credential or user does not have API Gateway Administrator or API Gateway provider access to delete the policy action." - }, - "204" : { - "description" : "This status code indicates that the specified policy action successfully deleted" - }, - "404" : { - "description" : "This status code indicates that the corresponding policy action id does not exist", - "examples" : { - "application/json" : "{\r\n \"errorDetails\": \" Unable to find the resource: 685e99ee-0e1b-4afa-8ff3-4322cf2965661\"\r\n}" - } - } - }, - "security" : [ { - "Basic" : [ ] - } ] - } - }, - "/policyActions" : { - "get" : { - "description" : "This request will return all the policy actions from API Gateway", - "operationId" : "getAllPolicyActions", - "consumes" : [ "application/json" ], - "produces" : [ "application/json" ], - "parameters" : [ { - "name" : "policyActionIds", - "in" : "query", - "description" : "This is a query parameter. Provide comma separated Policy Action ids to get the policy action details for specified policy action ids", - "required" : false, - "type" : "string", - "x-example" : "685e99ee-0e1b-4afa-8ff3-4322cf296566,78c0f92e-c85d-44c2-b7d5-e7a11fda8a57" - } ], - "responses" : { - "200" : { - "description" : "The list of policy actions will be available in the response body. The list can be all or specific set of policy action ids specified in query string. If any of the policy action id specified in query parameter is not available then it will omit that id and fetch result for other valid ids", - "examples" : { - "application/json" : "{\r\n \"policyAction\": [\r\n {\r\n \"id\": \"50c705f0-28d9-4a1a-a20b-6c84a0f4a837\",\r\n \"names\": [\r\n {\r\n \"value\": \"Straight Through Routing\",\r\n \"locale\": \"en\"\r\n }\r\n ],\r\n \"descriptions\": [\r\n {\r\n \"value\": \"\",\r\n \"locale\": \"English\"\r\n }\r\n ],\r\n \"templateKey\": \"straightThroughRouting\",\r\n \"parameters\": [\r\n {\r\n \"templateKey\": \"endpointUri\",\r\n \"values\": [\r\n \"http://localhost:8080/employee_service/${sys:resource_path}\"\r\n ]\r\n }\r\n ],\r\n \"active\": false\r\n },\r\n {\r\n \"id\": \"09219ca1-9bd7-4d62-8baf-167d29e3390e\",\r\n \"names\": [\r\n {\r\n \"value\": \"Require HTTP / HTTPS\",\r\n \"locale\": \"en\"\r\n }\r\n ],\r\n \"descriptions\": [\r\n {\r\n \"value\": \"\",\r\n \"locale\": \"English\"\r\n }\r\n ],\r\n \"templateKey\": \"entryProtocolPolicy\",\r\n \"parameters\": [\r\n {\r\n \"templateKey\": \"protocol\",\r\n \"values\": [\r\n \"http\"\r\n ]\r\n }\r\n ],\r\n \"active\": false\r\n }\r\n ]\r\n}" - }, - "schema" : { - "type" : "array", - "items" : { - "$ref" : "#/definitions/PolicyAction" - } - } - }, - "401" : { - "description" : "This status code indicates shows either user didn't provide any user credential or user doesn't have API Gateway Administrator or API Gateway provider access to get the policy actions." - } - }, - "security" : [ { - "Basic" : [ ] - } ] - }, - "post" : { - "description" : "This REST request is used to create policy action. The result of this request is a policy action payload and is available in the response. To know about the policy action template and to create it you can use the policyActionTemplates/{templateKey} to get the template structure of a policy action. The template key will be available in policyStage resource.", - "operationId" : "createPolicyAction", - "consumes" : [ "application/json" ], - "produces" : [ "application/json" ], - "parameters" : [ { - "in" : "body", - "name" : "body", - "description" : "Contains the policy action details of the newly created policy action", - "required" : true, - "schema" : { - "$ref" : "#/definitions/PolicyAction" - }, - "x-examples" : { - "application/json" : "{\r\n \"policyAction\": {\r\n \"templateKey\": \"entryProtocolPolicy\",\r\n \"parameters\": [\r\n {\r\n \"templateKey\": \"protocol\",\r\n \"values\": [\r\n \"http\"\r\n ] \r\n },\r\n\t{\r\n\t\t\"templateKey\": \"soapVersion\",\r\n\t\t\"values\": [\r\n\t\t\"soap\"\r\n\t\t]\r\n\t}\r\n ]\r\n }\r\n}" - } - } ], - "responses" : { - "201" : { - "description" : "This status code indicates that the policy action is created successfully and the created policy action can be seen in the response body", - "examples" : { - "application/json" : "{\r\n \"policyAction\": {\r\n \"id\": \"685e99ee-0e1b-4afa-8ff3-4322cf296566\",\r\n \"names\": [\r\n {\r\n \"value\": \"Require HTTP / HTTPS\",\r\n \"locale\": \"en\"\r\n }\r\n ],\r\n \"templateKey\": \"entryProtocolPolicy\",\r\n \"parameters\": [\r\n {\r\n \"templateKey\": \"protocol\",\r\n \"values\": [\r\n \"http\"\r\n ]\r\n },\r\n {\r\n \"templateKey\": \"soapVersion\",\r\n \"values\": [\r\n \"soap\"\r\n ]\r\n }\r\n ],\r\n \"active\": false\r\n }\r\n}" - }, - "schema" : { - "$ref" : "#/definitions/PolicyAction" - } - }, - "400" : { - "description" : "This status code indicates that the request payload is not correct and corresponding error details can be seen in the response body", - "examples" : { - "application/json" : "{\r\n \"errorDetails\": \" Unable to create the resource. Error in processing the payload null. Error Message . Check the correctness of key and payload.\"\r\n}" - } - }, - "401" : { - "description" : "This status code indicates that the user did not provide any user credential or user does not have API Gateway Administrator or API Gateway provider access to create policy actions." - } - }, - "security" : [ { - "Basic" : [ ] - } ] - } - }, - "/configurations/mobileApp" : { - "get" : { - "description" : "You can use API Gateway to disable access for certain mobile application versions on a predefined set of mobile platforms. By registering the required devices and applications and disabling access to these versions, you ensure that all users use the latest versions of the applications and take advantage of the latest security and functional updates.", - "operationId" : "getMobileApplicationConfigurations", - "consumes" : [ "application/json" ], - "produces" : [ "application/json" ], - "parameters" : [ ], - "responses" : { - "200" : { - "description" : "This status code indicates that the Mobile Applications configurations are retrieved successfully. ", - "examples" : { - "application/json" : "{\r\n \"mobileApplications\": [\r\n \"MyApp\",\r\n \"HelloApplication\"\r\n ],\r\n \"mobileAppDeviceTypes\": [\r\n \"Android\",\r\n \"ios\"\r\n ]\r\n}" - }, - "schema" : { - "$ref" : "#/definitions/MobileApplicationConfiguration" - } - }, - "400" : { - "description" : "This status code indicates that the mobileApp not mentioned in API access uri path.", - "examples" : { - "application/json" : "{\r\n \"errorDetails\": \"Missing mandatory field configId in request.\"\r\n}" - } - }, - "401" : { - "description" : "This status code indicates that the user is not a valid API Gateway user for retrieving the Mobile Applications configuration." - } - }, - "security" : [ { - "Basic" : [ ] - } ] - }, - "put" : { - "description" : "The method is used to update the details of the Mobile Applications configuration in API Gateway.You can use API Gateway to disable access for certain mobile application versions on a predefined set of mobile platforms. By registering the required devices and applications and disabling access to these versions, you ensure that all users use the latest versions of the applications and take advantage of the latest security and functional updates.", - "operationId" : "saveMobileApplicationConfigurations", - "consumes" : [ "application/json" ], - "produces" : [ "application/json" ], - "parameters" : [ { - "in" : "body", - "name" : "body", - "description" : "", - "required" : true, - "schema" : { - "$ref" : "#/definitions/MobileApplicationConfiguration" - }, - "x-examples" : { - "application/json" : "{\r\n \"mobileApplications\": [\r\n \"MyApp\",\r\n \"HelloApplication\"\r\n ],\r\n \"mobileAppDeviceTypes\": [\r\n \"Android\",\r\n \"ios\"\r\n ]\r\n}" - } - } ], - "responses" : { - "200" : { - "description" : "This status code indicates that the Mobile Applications configuration has been successfully updated in API Gateway, and the updated configuration is available in the response body.", - "examples" : { - "application/json" : "{\r\n \"mobileApplications\": [\r\n \"MyApp\",\r\n \"HelloApplication\"\r\n ],\r\n \"mobileAppDeviceTypes\": [\r\n \"Android\",\r\n \"ios\"\r\n ]\r\n}" - }, - "schema" : { - "$ref" : "#/definitions/MobileApplicationConfiguration" - } - }, - "401" : { - "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have \"Manage Threat Protection\" functional privilege to access this API." - }, - "405" : { - "description" : "This status code indicates that the specified HTTP method is not allowed for the requested Mobile Applications in API Gateway.", - "examples" : { - "application/json" : "{\r\n\t\"errorDetails\": \" Unable to process the PUT request for Mobile Applications configuration. Error occurred while processing the payload. Error Message: Method: PUT is not allowed on resource: loadBalancer\"\r\n}" - } - }, - "400" : { - "description" : "This status code indicates that the request body is invalid.", - "examples" : { - "application/json" : "{\r\n\"errorDetails\": \" Invalid property key found in request payload.\"\r\n}" - } - } - }, - "security" : [ { - "Basic" : [ ] - } ] - } - }, - "/serviceResultCache/{apiId}" : { - "get" : { - "description" : "This REST Request is used to get the Service Result cache size for the API using apiID. An alternative REST API call for /serviceResultCache. Instead of specifying name and version, if you know API id you can directly use that id to get the number of cached responses for that API", - "operationId" : "getCacheDetailsByapiId", - "consumes" : [ "application/json" ], - "produces" : [ "application/json" ], - "parameters" : [ { - "name" : "apiId", - "in" : "path", - "description" : "The id of API for which the cached response size is requested", - "required" : true, - "type" : "string", - "x-example" : "732c4526-db9a-4ef9-9782-edda1a6aa9bc" - } ], - "responses" : { - "200" : { - "description" : "This status code indicates that the request for Service Result Cache size is successfully returned. The response will have number of cache elements (A cached element is nothing but a single response) for the given API id, so it infers that the number of responses are actually cached for this API ", - "examples" : { - "application/json" : "{\r\n\t\"Cache size\": 2\r\n}" - } - }, - "401" : { - "description" : "This status code indicates that the user did not provide any user credential or user does not have API Gateway Administrator access" - }, - "500" : { - "description" : "This status code indicates that the server has encountered an error while fetching the Service Result Cache for the API" - } - }, - "security" : [ { - "Basic" : [ ] - } ] - }, - "delete" : { - "description" : "This REST Request is used to request for deletion of Service Result Cache for the API using api id", - "operationId" : "deleteCacheDetailsbyAPIId", - "consumes" : [ "application/json" ], - "produces" : [ "application/json" ], - "parameters" : [ { - "name" : "apiId", - "in" : "path", - "description" : "The id of API for which the Service Result Cache deletion is requested", - "required" : true, - "type" : "string", - "x-example" : "732c4526-db9a-4ef9-9782-edda1a6aa9bc" - } ], - "responses" : { - "204" : { - "description" : "This status code indicates that Service Result Cache has been deleted for the API and no data is returned in response " - }, - "401" : { - "description" : "This status code indicates that the user did not provide any user credential or user does not have API Gateway Administrator or API Gateway provider access to delete the Service Result cache of the specified API." - }, - "500" : { - "description" : "This status code indicates that the server has encountered an error while deleting the Service Result Cache for the API" - } - }, - "security" : [ { - "Basic" : [ ] - } ] - } - }, - "/serviceResultCache" : { - "get" : { - "description" : "You can enable API caching in API Gateway to cache your native service's response. With caching, you can reduce the number of calls made to your endpoint and also improve the latency of the requests to your API. When you enable caching for a stage, API Gateway caches responses from your endpoint for a specified time to live period. API Gateway then responds to the request by looking up the endpoint response from the cache instead of making a request to your endpoint. \n\nService Result cache can be configured for a API or Resource/method or Operation. \n\nThis REST Request is used to get the Service Result cache size for an API using apiName and apiVersion.", - "operationId" : "getCacheDetailsByapiNameAndVersion", - "consumes" : [ "application/json" ], - "produces" : [ "application/json" ], - "parameters" : [ { - "name" : "apiName", - "in" : "query", - "description" : "This query parameter is used to specify the API name for which the service result cache element size needs to be fetched.", - "required" : true, - "type" : "string", - "x-example" : "apiName=WIKI-SearchData" - }, { - "name" : "apiVersion", - "in" : "query", - "description" : "The version of the apiName parameter specified", - "required" : true, - "type" : "string", - "x-example" : "apiVersion=1.0" - } ], - "responses" : { - "200" : { - "description" : "This status code indicates that the request for Service Result Cache size has been successfully returned. The response will have number of cache elements (A cached element is nothing but a single response) for the given API name and version, so it infers that the number of responses are actually cached for this API", - "examples" : { - "application/json" : "{\r\n\t\"Cache size\": 2\r\n}" - } - }, - "401" : { - "description" : "This status code indicates that the user did not provide any user credential or user does not have API Gateway Administrator access." - }, - "500" : { - "description" : "This status code indicates that the server has encountered an error while fetching the Service Result cache for the API" - } - }, - "security" : [ { - "Basic" : [ ] - } ] - }, - "delete" : { - "description" : "This REST Request is used to request for deletion of Service Result cache for the API using apiName and apiVersion", - "operationId" : "deleteCacheDetailsByapiNameAndVersion", - "consumes" : [ "application/json" ], - "produces" : [ "application/json" ], - "parameters" : [ { - "name" : "apiName", - "in" : "query", - "description" : "This query parameter is used to specify the API name for which the service result cache deletion is requsted.", - "required" : true, - "type" : "string", - "x-example" : "apiName=WIKI-SearchData" - }, { - "name" : "apiVersion", - "in" : "query", - "description" : "The version of the apiName parameter specified", - "required" : true, - "type" : "string", - "x-example" : "apiVersion=1.0" - } ], - "responses" : { - "204" : { - "description" : "This status code indicates that Service Result Cache has been deleted for the specified API and no data is returned in response" - }, - "401" : { - "description" : "This status code indicates that the user did not provide any user credential or user does not have API Gateway Administrator or API Gateway provider access to delete the Service Result Cache of the specified API." - }, - "500" : { - "description" : "This status code indicates that the server has encountered an error while deleting the Service Result cache for the API" - } - }, - "security" : [ { - "Basic" : [ ] - } ] - } - }, - "/assertions/{assertionId}" : { - "get" : { - "description" : "This request will return assertion element", - "operationId" : "getAssertion", - "produces" : [ "application/json" ], - "parameters" : [ { - "name" : "assertionId", - "in" : "path", - "description" : "This path parameter is used to specify the assertion id which assertion details needs to retrieved.", - "required" : true, - "type" : "string", - "x-example" : "353bd366-47d4-4703-aecf-9cb40cdcc864" - } ], - "responses" : { - "200" : { - "description" : "Details of the assertion will be available in response body", - "examples" : { - "application/json" : "{\r\n \"assertionConfiguration\": {\r\n \"configurationId\": \"be463644-25a6-42af-840d-0b2d43be41ec\",\r\n \"configurationName\": \"CustomBindingAssertion1\",\r\n \"configurationElement\": \"\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\t\\t\\t\\n\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\t\\t\\t\\n\\t\\t\\t\\t\\n\\t\\t\\t\\n \\n\\t\\t \\n \\n \",\r\n \"assertionType\": \"bindingAssertion\"\r\n }\r\n}" - }, - "schema" : { - "$ref" : "#/definitions/AssertionConfiguration" - } - }, - "404" : { - "description" : "This status code indicates that the assertion id specified is not found in API Gateway", - "examples" : { - "application/json" : "{\r\n \"errorDetails\": \" Unable to find the resource: 732c4526-db9a-4ef9-9782-edda1a6aa9bc1\"\r\n}" - } - }, - "401" : { - "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." - } - }, - "security" : [ { - "Basic" : [ ] - } ] - }, - "put" : { - "description" : "This REST service is used to update the assertion", - "operationId" : "updateAssertion", - "consumes" : [ "application/json" ], - "produces" : [ "application/json" ], - "parameters" : [ { - "name" : "assertionId", - "in" : "path", - "description" : "This path parameter is used to specify the assertion id which assertion details needs to updated.", - "required" : true, - "type" : "string", - "x-example" : "353bd366-47d4-4703-aecf-9cb40cdcc864" - }, { - "in" : "body", - "name" : "body", - "description" : "assertion request payload", - "required" : true, - "schema" : { - "$ref" : "#/definitions/AssertionConfiguration" - }, - "x-examples" : { - "application/json" : "{\r\n \"assertionConfiguration\": {\r\n \"configurationId\": \"be463644-25a6-42af-840d-0b2d43be41ec\",\r\n \"configurationName\": \"CustomBindingAssertion1\",\r\n \"configurationElement\": \"\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\t\\t\\t\\n\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\t\\t\\t\\n\\t\\t\\t\\t\\n\\t\\t\\t\\n \\n\\t\\t \\n \\n \",\r\n \"assertionType\": \"bindingAssertion\"\r\n }\r\n}" - } - } ], - "responses" : { - "200" : { - "description" : "This status code indicates that API Gateway has successfully updated the specified assertion and the updated assertion details can be found in the response body", - "examples" : { - "application/json" : "{\r\n \"assertionConfiguration\": {\r\n \"configurationId\": \"0882293d-e773-4242-8bf5-c22e693f8413\",\r\n \"configurationName\": \"token_04\",\r\n \"configurationElement\": \"\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\t\\t\\t\\r\\n\\t\\t\\t\\t\\r\\n\\t\\t\\t\\t\\t\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\t\\t\\t\\r\\n\\t\\t\\t\\t\\r\\n\\t\\t\\t\\r\\n \\r\\n\\t\\t \\r\\n \\r\\n \"\r\n }\r\n}" - }, - "schema" : { - "$ref" : "#/definitions/AssertionConfiguration" - } - }, - "400" : { - "description" : "Tis status code indicates the request payload is not correct and corresponding error details can be seen in the response body", - "examples" : { - "application/json" : "{\r\n \"errorDetails\": \" Unable to process the PUT request for APIs. An error occurred while processing the payload. Error message:\\n Unable to create the resource. Error in processing the payload null. Error Message . Check the correctness of payload.\"\r\n}" - } - }, - "404" : { - "description" : "This status code indicates that the assertion id specified is not found in API Gateway", - "examples" : { - "application/json" : "{\r\n \"errorDetails\": \" Unable to find the resource: 732c4526-db9a-4ef9-9782-edda1a6aa9bc1\"\r\n}" - } - }, - "401" : { - "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." - } - }, - "security" : [ { - "Basic" : [ ] - } ] - }, - "delete" : { - "description" : "This delete request will delete the assertion based on the assertion id which is specified in path", - "operationId" : "deleteAssertion", - "parameters" : [ { - "name" : "assertionId", - "in" : "path", - "description" : "This path parameter is used to specify the assertion id for which assertion needs to deleted.", - "required" : true, - "type" : "string", - "x-example" : "353bd366-47d4-4703-aecf-9cb40cdcc864" - } ], - "responses" : { - "204" : { - "description" : "This status code indicates that the specified assertion is successfully deleted" - }, - "401" : { - "description" : "This status code indicates either user didn't provide any user credential or user doesn't have API Gateway Administrator or API Gateway provider access to delete the assertion." - }, - "404" : { - "description" : "This status code indicates that the corresponding assertion id does not exist", - "examples" : { - "application/json" : "{\r\n \"errorDetails\": \" Unable to find the resource: 685e99ee-0e1b-4afa-8ff3-4322cf2965661\"\r\n}" - } - } - }, - "security" : [ { - "Basic" : [ ] - } ] - } - }, - "/assertions" : { - "get" : { - "description" : "This request will return all the assertions from API Gateway", - "operationId" : "getAllAssertions", - "produces" : [ "application/json" ], - "parameters" : [ ], - "responses" : { - "200" : { - "description" : "Retrieves a list of available assertions in API Gateway.", - "examples" : { - "application/json" : "{\r\n \"assertionConfigurations\": [\r\n {\r\n \"configurationId\": \"be463644-25a6-42af-840d-0b2d43be41ec\",\r\n \"configurationName\": \"CustomBindingAssertion1\",\r\n \"configurationElement\": \"\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\t\\t\\t\\n\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\t\\t\\t\\n\\t\\t\\t\\t\\n\\t\\t\\t\\n \\n\\t\\t \\n \\n \",\r\n \"assertionType\": \"bindingAssertion\"\r\n },\r\n {\r\n \"configurationId\": \"9bfbd5ea-86eb-4990-8f7a-fdfef8f16f86\",\r\n \"configurationName\": \"tokenAssertion01\",\r\n \"configurationElement\": \"\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\t\\t\\t\\r\\n\\t\\t\\t\\t\\r\\n\\t\\t\\t\\t\\t\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\t\\t\\t\\r\\n\\t\\t\\t\\t\\r\\n\\t\\t\\t\\r\\n \\r\\n\\t\\t \\r\\n \\r\\n \",\r\n \"assertionType\": \"tokenAssertion\"\r\n }\r\n ]\r\n}" - }, - "schema" : { - "$ref" : "#/definitions/AssertionConfiguration" - } - }, - "401" : { - "description" : "This status code indicates that authorization has been refused for this HTTP request. This is possibly because, the user has not specified the required credentials (username and password), or has specified invalid credentials, or the user is not authenticated as an API Gateway Administrator to retrieve assertions in API Gateway." - } - }, - "security" : [ { - "Basic" : [ ] - } ] - }, - "post" : { - "description" : "Custom assertions allow the API providers to extend and provide additional security policies that are not available by default in API Gateway. In WS-Security, custom assertions are used for expressing individual security requirements, constraints, or both. The individual policy assertions can be combined to create security policies that ensure secure and reliable exchanges of SOAP messages between a client and a SOAP API. This REST service is used to create a assertion. Below are the request payloads for different types of assertions.\r\nbindingAssertion: "{\r\n\t"configurationElement": "<sp:AsymmetricBinding xmlns:sp="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702">\r\n\t\t\t\t\t<wsp:Policy xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy">\r\n\t\t\t\t\t\t<sp:InitiatorToken>\r\n\t\t\t\t\t\t\t<wsp:Policy>\r\n\t\t\t\t\t\t\t\t<sp:X509Token sp:IncludeToken="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702/IncludeToken/Never">\r\n\t\t\t\t\t\t\t\t\t<wsp:Policy>\r\n\t\t\t\t\t\t\t\t\t\t<sp:WssX509V3Token10/>\r\n\t\t\t\t\t\t\t\t\t</wsp:Policy>\r\n\t\t\t\t\t\t\t\t</sp:X509Token>\r\n\t\t\t\t\t\t\t</wsp:Policy>\r\n\t\t\t\t\t\t</sp:InitiatorToken>\r\n\t\t\t\t\t\t<sp:RecipientToken>\r\n\t\t\t\t\t\t\t<wsp:Policy>\r\n\t\t\t\t\t\t\t\t<sp:X509Token sp:IncludeToken="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702/IncludeToken/Never">\r\n\t\t\t\t\t\t\t\t\t<wsp:Policy>\r\n\t\t\t\t\t\t\t\t\t\t<sp:WssX509V3Token10/>\r\n\t\t\t\t\t\t\t\t\t</wsp:Policy>\r\n\t\t\t\t\t\t\t\t</sp:X509Token>\r\n\t\t\t\t\t\t\t</wsp:Policy>\r\n\t\t\t\t\t\t</sp:RecipientToken>\r\n\t\t\t\t\t\t<sp:AlgorithmSuite>\r\n\t\t\t\t\t\t\t<wsp:Policy>\r\n\t\t\t\t\t\t\t\t<sp:Basic256 />\r\n\t\t\t\t\t\t\t</wsp:Policy>\r\n\t\t\t\t\t\t</sp:AlgorithmSuite>\r\n\t\t\t\t\t\t<sp:Layout>\r\n\t\t\t\t\t\t\t<wsp:Policy>\r\n\t\t\t\t\t\t\t\t<sp:LaxTimestampFirst/>\r\n\t\t\t\t\t\t\t</wsp:Policy>\r\n\t\t\t\t\t\t</sp:Layout>\r\n\t\t\t\t\t\t<sp:ProtectTokens/>\r\n\t\t\t\t\t</wsp:Policy>\r\n\t\t\t\t</sp:AsymmetricBinding>",\r\n\t"configurationName":"CustomBindingAssertion1",\r\n\t"assertionType":"bindingAssertion"}"\r\n\r\ntokenAssertion: "{\r\n\t"configurationElement": "<sp:SupportingTokens xmlns:sp="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702">\r\n\t\t\t\t\t<wsp:Policy xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy">\r\n\t\t\t\t\t\t<sp:UsernameToken sp:IncludeToken="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702/IncludeToken/AlwaysToRecipient"/>\r\n\t\t\t\t\t</wsp:Policy>\r\n\t\t\t\t</sp:SupportingTokens>",\r\n\t"configurationName":"UsernameToken",\r\n\t"assertionType":"tokenAssertion"}"\r\n\t\r\npolicyAssertion: "{\r\n\t"configurationElement": "<wsp:Policy wsu:Id="CustomBinding_IWSTrust13Async_policy"\r\n\t\t\txmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"\r\n\t\t\txmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy" \r\n\t\t\txmlns:wsaw="http://www.w3.org/2006/02/addressing/wsdl"\r\n\t\t\txmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">\r\n\t\t\t<wsp:ExactlyOne>\r\n\t\t\t\t<wsp:All>\r\n\t\t\t\t\t<sp:TransportBinding xmlns:sp="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702">\r\n\t\t\t\t\t\t<wsp:Policy>\r\n\t\t\t\t\t\t\t<sp:TransportToken>\r\n\t\t\t\t\t\t\t\t<wsp:Policy>\r\n\t\t\t\t\t\t\t\t\t<sp:HttpsToken/>\r\n\t\t\t\t\t\t\t\t</wsp:Policy>\r\n\t\t\t\t\t\t\t</sp:TransportToken>\r\n\t\t\t\t\t\t\t<sp:AlgorithmSuite>\r\n\t\t\t\t\t\t\t\t<wsp:Policy>\r\n\t\t\t\t\t\t\t\t\t<sp:Basic128/>\r\n\t\t\t\t\t\t\t\t</wsp:Policy>\r\n\t\t\t\t\t\t\t</sp:AlgorithmSuite>\r\n\t\t\t\t\t\t\t<sp:Layout>\r\n\t\t\t\t\t\t\t\t<wsp:Policy>\r\n\t\t\t\t\t\t\t\t\t<sp:Strict/>\r\n\t\t\t\t\t\t\t\t</wsp:Policy>\r\n\t\t\t\t\t\t\t</sp:Layout>\r\n\t\t\t\t\t\t\t<sp:IncludeTimestamp/>\r\n\t\t\t\t\t\t</wsp:Policy>\r\n\t\t\t\t\t</sp:TransportBinding>\r\n\t\t\t\t\t<sp:EndorsingSupportingTokens xmlns:sp="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702">\r\n\t\t\t\t\t\t<wsp:Policy>\r\n\t\t\t\t\t\t\t<sp:KerberosToken sp:IncludeToken="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702/IncludeToken/Once">\r\n\t\t\t\t\t\t\t\t<wsp:Policy>\r\n\t\t\t\t\t\t\t\t\t<sp:WssGssKerberosV5ApReqToken11/>\r\n\t\t\t\t\t\t\t\t</wsp:Policy>\r\n\t\t\t\t\t\t\t</sp:KerberosToken>\r\n\t\t\t\t\t\t\t<sp:KeyValueToken sp:IncludeToken="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702/IncludeToken/Never" wsp:Optional="true"/>\r\n\t\t\t\t\t\t\t<!-- \r\n\t\t\t\t\t\t\t<sp:SignedParts>\r\n\t\t\t\t\t\t\t\t<sp:Header Name="To" Namespace="http://www.w3.org/2005/08/addressing"/>\r\n\t\t\t\t\t\t\t</sp:SignedParts>\r\n\t\t\t\t\t\t\t-->\r\n\t\t\t\t\t\t</wsp:Policy>\r\n\t\t\t\t\t</sp:EndorsingSupportingTokens>\r\n\t\t\t\t\t<sp:Wss11 xmlns:sp="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702">\r\n\t\t\t\t\t\t<wsp:Policy>\r\n\t\t\t\t\t\t\t<sp:MustSupportRefKeyIdentifier/>\r\n\t\t\t\t\t\t\t<sp:MustSupportRefIssuerSerial/>\r\n\t\t\t\t\t\t\t<sp:MustSupportRefThumbprint/>\r\n\t\t\t\t\t\t\t<sp:MustSupportRefEncryptedKey/>\r\n\t\t\t\t\t\t</wsp:Policy>\r\n\t\t\t\t\t</sp:Wss11>\r\n\t\t\t\t\t<sp:Trust13 xmlns:sp="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702">\r\n\t\t\t\t\t\t<wsp:Policy>\r\n\t\t\t\t\t\t\t<sp:MustSupportIssuedTokens/>\r\n\t\t\t\t\t\t\t<sp:RequireClientEntropy/>\r\n\t\t\t\t\t\t\t<sp:RequireServerEntropy/>\r\n\t\t\t\t\t\t</wsp:Policy>\r\n\t\t\t\t\t</sp:Trust13>\r\n\t\t\t\t\t<wsaw:UsingAddressing/>\r\n\t\t\t\t</wsp:All>\r\n\t\t\t</wsp:ExactlyOne>\r\n\t\t</wsp:Policy>"\r\n\t"configurationName":"KerberosOverTransport",\r\n\t"assertionType":"policyAssertion"}"", - "operationId" : "createAssertion", - "consumes" : [ "application/json" ], - "produces" : [ "application/json" ], - "parameters" : [ { - "in" : "body", - "name" : "body", - "description" : "assertion request payload", - "required" : true, - "schema" : { - "$ref" : "#/definitions/AssertionConfiguration" - }, - "x-examples" : { - "application/json" : "{\r\n\t\"configurationElement\": \"\r\n\t\r\n\t\t\r\n\t\r\n\",\r\n\t\"configurationName\": \"UsernameToken\",\r\n\t\"assertionType\": \"tokenAssertion\"\r\n}" - } - } ], - "responses" : { - "201" : { - "description" : "Assertion successfully created in API Gateway", - "examples" : { - "application/json" : "{\r\n \"assertionConfiguration\": {\r\n \"configurationId\": \"0882293d-e773-4242-8bf5-c22e693f8413\",\r\n \"configurationName\": \"token_04\",\r\n \"configurationElement\": \"\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\t\\t\\t\\r\\n\\t\\t\\t\\t\\r\\n\\t\\t\\t\\t\\t\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\t\\t\\t\\r\\n\\t\\t\\t\\t\\r\\n\\t\\t\\t\\r\\n \\r\\n\\t\\t \\r\\n \\r\\n \"\r\n }\r\n}" - }, - "schema" : { - "$ref" : "#/definitions/AssertionConfiguration" - } - }, - "400" : { - "description" : "This status code indicates that the request payload is not correct and corresponding error details can be seen in the response body", - "examples" : { - "application/json" : "{\r\n \"errorDetails\": \" Unable to create the resource. Error in processing the payload null. Error Message . Check the correctness of payload.\"\r\n}" - } - }, - "401" : { - "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." - } - }, - "security" : [ { - "Basic" : [ ] - } ] - } - } - }, - "securityDefinitions" : { - "Basic" : { - "description" : "API Gateway Administrator and API Gateway provider", - "type" : "basic" - } - }, - "definitions" : { - "Attribute" : { - "type" : "object", - "required" : [ "attributeName", "operation", "value" ], - "properties" : { - "attributeName" : { - "type" : "string", - "description" : "The field name on which needs to be satisfied by the APIs.", - "enum" : [ "API_NAME", "API_DESCRIPTION", "API_VERSION", "TAGS", "GET", "PUT", "POST", "DELETE", "PATCH" ] - }, - "operation" : { - "type" : "string", - "description" : "Operation that needs to performed on the field specified.", - "enum" : [ "EQUALS", "CONTAINS", "NOT_CONTAINS", "STARTS_WITH", "NOT_STARTS_WITH", "LESS_THAN", "GREATER_THAN", "ENDS_WITH", "NOT_EQUALS" ] - }, - "value" : { - "type" : "string", - "description" : "Value the needs to processed on the field and operation specified." - } - }, - "description" : "An Attribute contains the field of the an API or resource or operation and the value to be processed on the fields based on the operation specified. If attribute specifies any Http Method then operation wont have any significance." - }, - "Enforcement" : { - "type" : "object", - "properties" : { - "enforcementObjectId" : { - "type" : "string", - "description" : "Policy enforcement id" - }, - "order" : { - "type" : "string", - "description" : "enforcement order" - }, - "parentPolicyId" : { - "type" : "string" - } - }, - "description" : "Model contains a policy enforcement id and its order" - }, - "ExtendedProperties" : { - "type" : "object", - "properties" : { - "key" : { - "type" : "string" - }, - "value" : { - "type" : "string" - } - } - }, - "InternationalizedString" : { - "type" : "object", - "properties" : { - "value" : { - "type" : "string", - "description" : "This property will hold the actual string" - }, - "locale" : { - "type" : "string", - "description" : "This property will have the localization information of the property 'value'." - } - }, - "description" : "This model is used to store a string with its corresponding locale" - }, - "Policy" : { - "type" : "object", - "properties" : { - "id" : { - "type" : "string", - "description" : "Policy ID", - "readOnly" : true - }, - "names" : { - "type" : "array", - "description" : "This contains list of names for the policy with corresponding locale information.", - "items" : { - "$ref" : "#/definitions/InternationalizedString" - } - }, - "descriptions" : { - "type" : "array", - "description" : "This contains list of description for the policy with corresponding locale information.", - "items" : { - "$ref" : "#/definitions/InternationalizedString" - } - }, - "parameters" : { - "type" : "array", - "description" : "This basic details of a threat protection rule such as rule name, description, rule action, custom error message etc.will be stored in this property.", - "items" : { - "$ref" : "#/definitions/PolicyActionParameter" - } - }, - "scope" : { - "$ref" : "#/definitions/Scope" - }, - "policyEnforcements" : { - "type" : "array", - "description" : "This property contains list of policy (runtime) enforcement id grouped based on the stages.", - "items" : { - "$ref" : "#/definitions/PolicyEnforcements" - } - }, - "policyScope" : { - "type" : "string", - "description" : "This property is used to refer the scope of the policy.", - "enum" : [ "GLOBAL", "METHOD", "OPERATION", "RESOURCE", "SERVICE", "PACKAGE", "TEMPLATE", "SCOPE" ] - }, - "active" : { - "type" : "boolean" - }, - "global" : { - "type" : "boolean" - }, - "systemPolicy" : { - "type" : "boolean" - } - }, - "description" : "A policy is nothing but a group of policy (runtime) enforcements. It contains the list of policy enforcement ids by stage wise. A stage in a policy belongs execution order of a policy enforcement. Each policy enforcement belong to only one of the stage. For more details about policy stage please refer policyStages resource in API Gateway Policy Management service. The policy can be Service/scope/package/global/template." - }, - "PolicyActionParameter" : { - "type" : "object", - "required" : [ "templateKey" ], - "properties" : { - "templateKey" : { - "type" : "string", - "description" : "parameter template key." - }, - "values" : { - "type" : "array", - "description" : "array of values for this parameter template key", - "items" : { - "type" : "string" - } - }, - "parameters" : { - "type" : "array", - "description" : "If this policy action parameter is complex type then array of policy action parameter will be the value for this parameter template key", - "items" : { - "$ref" : "#/definitions/PolicyActionParameter" - } - }, - "extendedProperties" : { - "type" : "array", - "items" : { - "$ref" : "#/definitions/ExtendedProperties" - } - }, - "type" : { - "type" : "string" - } - }, - "description" : "This model represent the values needed for a policy action to execute. This can be either primitive type or complex structure that in turn refer to another PolicyActionParameter" - }, - "PolicyEnforcements" : { - "type" : "object", - "properties" : { - "enforcements" : { - "type" : "array", - "items" : { - "$ref" : "#/definitions/Enforcement" - } - }, - "stageKey" : { - "type" : "string", - "description" : "Policy stage. User can refer resource /policyStages to get the list stages can be added here" - } - }, - "description" : "This model contains the list of policy action id specific to a stage." - }, - "Scope" : { - "type" : "object", - "required" : [ "applicableAPITypes", "logicalConnector" ], - "properties" : { - "applicableAPITypes" : { - "type" : "array", - "description" : "This contains the list of API types on which the global policy can be applied. For now only REST and SOAP API types are allowed.", - "items" : { - "type" : "string", - "enum" : [ "SOAP", "REST", "ODATA", "WEBSOCKET" ] - } - }, - "scopeConditions" : { - "type" : "array", - "items" : { - "$ref" : "#/definitions/ScopeCondition" - } - }, - "logicalConnector" : { - "type" : "string", - "description" : "The field is used to perform the logical operation between the scope condition. It will be valid only if we specify scope condition. The default value for this field is AND", - "enum" : [ "AND", "OR" ] - } - }, - "description" : "A scope is used to define the filtering criteria for Global policy. Using scope we can specify the APIs or Resources or opertaion on which the policy enforcements needs to be applied." - }, - "ScopeCondition" : { - "type" : "object", - "required" : [ "attributes", "filterType" ], - "properties" : { - "filterType" : { - "type" : "string", - "description" : "This property is used to define the type of filter we will be using to define attributes. The allowed values are apis, httpMethod, tags. If API type is specified we can specify the fields of API such as apiName, apiDescription, apiVersion. If httpMethod specified we can specify the httpMethods(GET/POST/PUT/DELETE/POST) of the resource to filter the resource. This filter type is used for REST APIs only. If tag type is specified we can specify the field tags in API to filter api using tags. This is also only applicable for REST APIs.", - "enum" : [ "API", "HTTP_METHOD", "TAGS" ] - }, - "attributes" : { - "type" : "array", - "items" : { - "$ref" : "#/definitions/Attribute" - } - } - }, - "description" : "For each scope we can define set of scope condition. A scope condition will have set of attributes that needs to be satisfied by the APIs or Resource or Operation for applying the policy on that API or Resource or Operation. The logical operator between the attributes is always AND." - }, - "APIResponseDelete" : { - "type" : "object", - "properties" : { - "id" : { - "type" : "string", - "description" : "API Id" - }, - "apiName" : { - "type" : "string", - "description" : "API Name" - }, - "apiVersion" : { - "type" : "string", - "description" : "API Version" - }, - "type" : { - "type" : "string", - "description" : "API Type" - }, - "publishedPortals" : { - "type" : "array", - "description" : "Published portals of an API", - "items" : { - "type" : "string" - } - }, - "systemVersion" : { - "type" : "integer", - "format" : "int32", - "description" : "System version of an API" - }, - "teams" : { - "type" : "array", - "description" : "Contains teams belonging to an API.", - "items" : { - "$ref" : "#/definitions/Team" - } - }, - "active" : { - "type" : "boolean" - }, - "apiId" : { - "type" : "string" - }, - "responseStatus" : { - "type" : "string", - "enum" : [ "SUCCESS", "ERROR", "NOT_FOUND", "BAD_REQUEST", "PARTIAL_SUCCESS" ] - }, - "errorReason" : { - "type" : "string" - } - }, - "description" : "This model contains the basics details of an API." - }, - "Team" : { - "type" : "object", - "properties" : { - "id" : { - "type" : "string", - "description" : "Team id" - }, - "name" : { - "type" : "string", - "description" : "Team name" - }, - "source" : { - "type" : "string", - "description" : "The value is to identify whether the team is created from global team assignment or from user or by system", - "enum" : [ "USER", "GLOBAL_ASSIGNMENT", "SYSTEM" ] - } - } - }, - "EnforcementValidationError" : { - "type" : "object", - "properties" : { - "allowedOccurrence" : { - "type" : "string", - "description" : "This value will be populated when the error occurred due to occurrence of policy enforcement", - "enum" : [ "once", "multiple" ] - }, - "conflictingTemplateId" : { - "type" : "string", - "description" : "This value will be populated when the error occurred due to mutually exclusive policy enforcement are available at the runtime enforcement of an API" - }, - "errorType" : { - "type" : "string", - "description" : "The type of the policy enforcement validation error", - "enum" : [ "dependencyMissing", "mutuallyExclusive", "occurrence" ] - }, - "missingDependency" : { - "type" : "array", - "description" : "The value of the list of missed policy enforcement which are dependent for this policy enforcement. This will be populated when the policy enforcement validation error occurred due to dependency missing", - "items" : { - "type" : "string" - } - }, - "policyActionName" : { - "type" : "string", - "description" : "The name of the policy enforcement which is having the validation error" - }, - "templateId" : { - "type" : "string", - "description" : "The template Id of the policy enforcement which is having the validation error" - } - }, - "description" : "This model is used to represent the type of policy enforcement validation error" - }, - "EnforcementValidationMessage" : { - "type" : "object", - "properties" : { - "apiId" : { - "type" : "string", - "description" : "ID of the API which is having the policy enforcement violation" - }, - "apiName" : { - "type" : "string", - "description" : "Name of the API which is having the policy enforcement violation" - }, - "apiType" : { - "type" : "string", - "description" : "Type of the API which is having the policy enforcement violation" - }, - "apiVersion" : { - "type" : "string", - "description" : "Version of the API which is having the policy enforcement violation" - }, - "errorOnResource" : { - "type" : "array", - "items" : { - "$ref" : "#/definitions/ResourcePolicyValidationError" - } - } - }, - "description" : "This model is used to give the details about conflicts between the policy enforcements. The conflicts may arise due to dependent policy action enforcement missing or due to occurrence or due to mutually exclusive policy enforcements. These happen during the below scenarios \n1. When a policy is attached to an API, the enforcement validation will happen on policy.\n2. When a global policy is getting activated, it will validate the policy enforcement of the corresponding global policy and the runtime policy enforcements on the applicable APIs for any violation." - }, - "PolicyDetails" : { - "type" : "object", - "properties" : { - "names" : { - "type" : "array", - "items" : { - "$ref" : "#/definitions/InternationalizedString" - } - }, - "policyActionsIds" : { - "type" : "array", - "description" : "List of IDs of conflicting policy enforcement of this policy", - "items" : { - "type" : "string" - } - }, - "policyId" : { - "type" : "string", - "description" : "Id of the conflicting policy." - }, - "PolicyScope" : { - "type" : "string", - "description" : "Policy Scope of the conflicting policy.", - "enum" : [ "GLOBAL", "METHOD", "OPERATION", "RESOURCE", "SERVICE", "PACKAGE", "TEMPLATE", "SCOPE" ] - }, - "stageKey" : { - "type" : "string", - "description" : "Stage key of the conflicting policy enforcement of this policy" - } - }, - "description" : "Details of the conflicting policies and policy enforcement of the respective policy" - }, - "ResourcePolicyValidationError" : { - "type" : "object", - "properties" : { - "conflictingPolicies" : { - "type" : "object", - "description" : "Map of conflicting policy ids and its respective details", - "additionalProperties" : { - "$ref" : "#/definitions/PolicyDetails" - } - }, - "error" : { - "$ref" : "#/definitions/EnforcementValidationError" - }, - "errorMessage" : { - "type" : "string", - "description" : "Policy enforcement validation error message" - }, - "method" : { - "type" : "string", - "description" : "Applicable for REST Services only. This will contain the HTTP method of the resource which is having policy enforcement validation error" - }, - "policyDetails" : { - "$ref" : "#/definitions/PolicyDetails" - }, - "resource" : { - "type" : "string", - "description" : "Resource/Operation name which is having the policy enforcement validation error" - } - }, - "description" : "This model contains the resource level details for policy enforcement validation errors. For each resource or operation it will have the details of the list of conflicting policies and the policy enforcements" - }, - "PolicyActionOrder" : { - "type" : "object", - "properties" : { - "sequence" : { - "type" : "array", - "description" : "Sequence of the policy enforcement.\n 1. insequence - Stages or policies marked with this sequence will be executed when the request comes to API Gateway and before the request dispatched to native service. \n 2. outsequence - Stages or policies marked with this sequence will be executed when the request goes out of API Gateway to the invoker. \n 3. faultsequence - Stages or policies marked with this sequence will be executed when native service return any error", - "items" : { - "type" : "string", - "enum" : [ "insequence", "outsequence", "faultsequence" ] - } - }, - "orderPosition" : { - "type" : "string", - "description" : "Order of the policy enforcement. \n 1. First - policy enforcement needs to be added in its respective stage. \n 2. Last - policy enforcement needs to be added as last in its respective stage. \n 3. Before First occurrence - Policy needs to be added before the first occurrence of policyTemplateIds specified. \n 4. After last occurrence - Policy needs to be added after last occurrence of policyTemplateIds specified", - "enum" : [ "first", "last", "beforeFirstOccurence", "afterLastOccurence" ] - }, - "isCustomOrderSupported" : { - "type" : "boolean" - }, - "policyTemplateIDs" : { - "type" : "array", - "description" : "List of policy template ids needed to process the order before first occurrence and after last occurrence", - "items" : { - "type" : "string" - } - } - }, - "description" : "PolicyActionOrder is used to specify the policy enforcement order in its respective stage" - }, - "PolicyActionParameterTemplate" : { - "type" : "object", - "properties" : { - "templateKey" : { - "type" : "string", - "description" : "Unique id for policy action parameter" - }, - "names" : { - "type" : "array", - "description" : "Policy action parameter template name", - "items" : { - "$ref" : "#/definitions/InternationalizedString" - } - }, - "descriptions" : { - "type" : "array", - "description" : "Policy action parameter template description", - "items" : { - "$ref" : "#/definitions/InternationalizedString" - } - }, - "type" : { - "type" : "string", - "description" : "Policy Action parameter data type.", - "enum" : [ "STRING", "TEXT", "INT", "LONG", "DOUBLE", "BOOLEAN", "XPATH", "FILE", "ESB", "OBJECT", "SECURESTRING" ] - }, - "isArray" : { - "type" : "boolean", - "description" : "This property infers whether this policy action parameter can be an array" - }, - "isRequired" : { - "type" : "boolean", - "description" : "This property infers if it is added to a policy enforcement then it is mandate to provide value for this policy action parameter" - }, - "canRender" : { - "type" : "boolean", - "description" : "UI specific property. This property infer it can be rendered on UI" - }, - "defaultValues" : { - "type" : "array", - "description" : "This contains the list of default values for this policy action parameter", - "items" : { - "type" : "object" - } - }, - "possibleValues" : { - "type" : "array", - "items" : { - "$ref" : "#/definitions/PossibleValue" - } - }, - "policyParaeterTemplates" : { - "type" : "array", - "items" : { - "$ref" : "#/definitions/PolicyActionParameterTemplate" - } - }, - "parameterTemplatesReference" : { - "type" : "array", - "items" : { - "type" : "string" - } - }, - "requiredChildParameterKeys" : { - "type" : "array", - "items" : { - "type" : "string" - } - }, - "applicableServiceTypes" : { - "type" : "array", - "description" : "List of Service type applicable for this policy action parameter", - "items" : { - "type" : "string" - } - } - }, - "description" : "A policy action parameter template defines the schema for a policy enforcement parameter. A policy enforcement can have one or more policy action parameters." - }, - "PolicyActionTemplate" : { - "type" : "object", - "properties" : { - "templateKey" : { - "type" : "string", - "description" : "A unique id for this policy enforcement", - "readOnly" : true - }, - "names" : { - "type" : "array", - "description" : "Name of the policy enforcement along with the corresponding locale information", - "readOnly" : true, - "items" : { - "$ref" : "#/definitions/InternationalizedString" - } - }, - "descriptions" : { - "type" : "array", - "description" : "Description for the policy enforcement", - "readOnly" : true, - "items" : { - "$ref" : "#/definitions/InternationalizedString" - } - }, - "applicableServiceTypes" : { - "type" : "array", - "description" : "Policy enforcement only applicable for the list of service type specified here", - "items" : { - "type" : "string" - } - }, - "parameterTemplates" : { - "type" : "array", - "items" : { - "$ref" : "#/definitions/PolicyActionParameterTemplate" - } - }, - "occurrence" : { - "type" : "string", - "description" : "Allowed occurrence for the respective policy enforcement. \n 1. Once - Policy enforcement can be added only once on the respective stage. \n 2. Multiple - Policy enforcement can be added multiple times on the respective stage.", - "enum" : [ "once", "multiple" ] - }, - "stageSpecific" : { - "type" : "string", - "description" : "Some policy enforcement can be added in multiple stages. This property specify it needs to be processed based on the stage it added." - }, - "dependentActions" : { - "type" : "array", - "description" : "Dependent list of policy enforcements. This policy enforcement can't be added with out the specified list of policy enforcement templates", - "items" : { - "type" : "string" - } - }, - "dependentActionsConnector" : { - "type" : "string" - }, - "mutuallyExclusiveActions" : { - "type" : "array", - "description" : "The list contains the mutually exclusive policy enforcements with this policy enforcement", - "items" : { - "type" : "string" - } - }, - "order" : { - "$ref" : "#/definitions/PolicyActionOrder" - }, - "requiredParametersKeys" : { - "type" : "array", - "items" : { - "type" : "string" - } - }, - "canAppliedAtResourceMethodLevel" : { - "type" : "boolean", - "description" : "This property infers that the policy action can be applied at resource/operation or method level." - } - }, - "description" : "A policy action template represents the schema for a policy enforcement. " - }, - "PossibleValue" : { - "type" : "object", - "properties" : { - "names" : { - "type" : "array", - "description" : "Descriptive name for the value", - "items" : { - "$ref" : "#/definitions/InternationalizedString" - } - }, - "value" : { - "type" : "string", - "description" : "value that need to be used when providing value for the respective policy action parameter" - } - }, - "description" : "For policy action parameter we can define the list of possible values." - }, - "PolicyEnforcementStage" : { - "type" : "object", - "properties" : { - "stageKey" : { - "type" : "string", - "description" : "The unique key for the stage." - }, - "names" : { - "type" : "array", - "description" : "Stage name with corresponding locale", - "items" : { - "$ref" : "#/definitions/InternationalizedString" - } - }, - "descriptions" : { - "type" : "array", - "description" : "Stage description with corresponding locale", - "items" : { - "$ref" : "#/definitions/InternationalizedString" - } - }, - "policyActionTempaltes" : { - "type" : "array", - "description" : "The list of policy enforcements can be applied on the respective stage.", - "items" : { - "type" : "string" - } - }, - "sequence" : { - "type" : "string", - "description" : "Sequence of the stage.\n 1. insequence - Stages or policies marked with this sequence will be executed when the request comes to API Gateway and before the request dispatched to native service. \n 2. outsequence - Stages or policies marked with this sequence will be executed when the request goes out of API Gateway to the invoker. \n 3. faultsequence - Stages or policies marked with this sequence will be executed when native service return any error.", - "enum" : [ "insequence", "outsequence", "faultsequence" ] - } - }, - "description" : "Each Policy Stage contains one or more policies. It provide you a the list of policy enforcement associated with each stage and its sequence either in, out or fault." - }, - "PolicyAction" : { - "type" : "object", - "properties" : { - "id" : { - "type" : "string", - "description" : "Policy Action ID" - }, - "names" : { - "type" : "array", - "description" : "List of policy action names with corresponding locale information", - "items" : { - "$ref" : "#/definitions/InternationalizedString" - } - }, - "descriptions" : { - "type" : "array", - "description" : "List of policy action description with corresponding locale information", - "items" : { - "$ref" : "#/definitions/InternationalizedString" - } - }, - "templateKey" : { - "type" : "string", - "description" : "Template key of the policy actions" - }, - "parameters" : { - "type" : "array", - "description" : "This is the list of values that are configured for this policy actions", - "items" : { - "$ref" : "#/definitions/PolicyActionParameter" - } - }, - "stageKey" : { - "type" : "string" - }, - "active" : { - "type" : "boolean" - } - }, - "description" : "This model contains details about a policy action in API Gateway" - }, - "MobileApplicationConfiguration" : { - "type" : "object", - "properties" : { - "mobileApplications" : { - "type" : "array", - "description" : "Configure Mobile Application names to be filtered when Threat protection 'Mobile App Filter' Rule enforced", - "items" : { - "type" : "string" - } - }, - "mobileAppDeviceTypes" : { - "type" : "array", - "description" : "Configure Device Types to be filtered when Threat protection 'Mobile App Filter' Rule enforced", - "items" : { - "type" : "string" - } - } - }, - "description" : "Configured values are used in Threat protection Rules 'Mobile App filter'" - }, - "AssertionConfiguration" : { - "type" : "object", - "properties" : { - "assertionId" : { - "type" : "string", - "description" : "A unique ID for the assertion", - "readOnly" : true - }, - "Assertion name" : { - "type" : "string", - "description" : "Name of the assertion" - }, - "Assertion element" : { - "type" : "string", - "description" : "XML element which represents the assertion" - }, - "Assertion type" : { - "type" : "string", - "description" : "Type of assertion(tokenAssertion/bindingAssertion)", - "enum" : [ "tokenAssertion", "bindingAssertion", "policyAssertion" ] - } - } - } - } -} \ No newline at end of file From 5da8936abd41889eb2b916c6bff915e58df3690a Mon Sep 17 00:00:00 2001 From: Dhivakar Asokan <48990091+dhivakar-asokan@users.noreply.github.com> Date: Thu, 21 May 2020 20:30:19 +0530 Subject: [PATCH 08/22] Delete APIGatewayPromotionManagement.json --- .../APIGatewayPromotionManagement.json | 661 ------------------ 1 file changed, 661 deletions(-) delete mode 100644 apigatewayservices/APIGatewayPromotionManagement.json diff --git a/apigatewayservices/APIGatewayPromotionManagement.json b/apigatewayservices/APIGatewayPromotionManagement.json deleted file mode 100644 index 92d21ea..0000000 --- a/apigatewayservices/APIGatewayPromotionManagement.json +++ /dev/null @@ -1,661 +0,0 @@ -{ - "swagger" : "2.0", - "info" : { - "description" : "API Gateway supports staging and promotion of assets. In a typical enterprise-level,\nsolutions are separated according to the different stages of Software Development\nLifecycle (SDLC) such as development, quality assurance (QA), and production stages. Staging and promotion allows you to promote all the assets across different stages. The supported assets are APIs, global policies, policy templates, applications, aliases, packages, plans, threat protection rules, administrative configurations, approval configurations, outbound proxies, URL aliases, keyStores, trustStores, JNDI provider aliases, JMS connection aliases, JMS triggers, webservice endpoint aliases, users, groups, access profiles and kerberos settings\n\nPromotion refers to moving API Gateway assets from the source stage to one or more\ntarget stages. For example, you might want to promote assets you have developed on\nservers in a Development stage (the source API Gateway instance) to servers in a QA or\nProduction stage (the target API Gateway instance).\n\nRollback is the process of restoring the asset's metadata in the target API Gateway instance to a previous state.\n\nStages should be configured in the source machine where we initiate the promotion process.", - "version" : "10.7", - "title" : "API Assets Promotion Management" - }, - "host" : "localhost:5555", - "basePath" : "/rest/apigateway", - "schemes" : [ "http" ], - "consumes" : [ "application/json" ], - "produces" : [ "application/json" ], - "paths" : { - "/stages" : { - "get" : { - "description" : "This REST operation is used to retrieve all the configured stages", - "operationId" : "getStages", - "produces" : [ "application/json" ], - "parameters" : [ ], - "responses" : { - "200" : { - "description" : "Returns the list of all stages", - "examples" : { - "application/json" : "{\r\n \"stages\": [\r\n {\r\n \"id\": \"2d9e280a-b529-466c-9ec8-d6b0e93026a8\",\r\n \"name\": \"sampleStage\",\r\n \"url\": \"http://localhost:5555/\",\r\n \"username\": \"Administrator\",\r\n \"password\": \"********************************\"\r\n }\r\n ]\r\n}" - }, - "schema" : { - "type" : "array", - "items" : { - "$ref" : "#/definitions/Stage" - } - } - }, - "401" : { - "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." - } - }, - "security" : [ { - "Basic" : [ ] - } ] - }, - "post" : { - "description" : "This REST operation is used to configure a stage in the source API Gateway where promotion will be initiated. A stage is just another API Gateway instance. When the stage url is https, then keystore and keystore alias will also be expected while configuring a stage", - "operationId" : "createStage", - "consumes" : [ "application/json" ], - "produces" : [ "application/json" ], - "parameters" : [ { - "in" : "body", - "name" : "body", - "description" : "Stage request payload", - "required" : true, - "schema" : { - "$ref" : "#/definitions/Stage" - }, - "x-examples" : { - "application/json" : "{\r\n\t\"name\" : \"QA Stage\",\r\n\t\"description\" : \"This stage will be used to test the assets promoted from the development stage\",\r\n\t\"url\" : \"http://mcmriz01:5555/\",\r\n\t\"username\" : \"Administrator\",\r\n\t\"password\" : \"password\"\r\n}" - } - } ], - "responses" : { - "200" : { - "description" : "Stage is created successfully in API Gateway. Now user can promote API Gateway assets to the created stage", - "examples" : { - "application/json" : "{\r\n \"stage\": {\r\n \"id\": \"cc71211e-cd45-4a72-b453-9cc22c783f9d\",\r\n \"name\": \"QA Stage\",\r\n \"description\": \"This stage will be used to test the assets promoted from the development stage\",\r\n \"url\": \"http://mcmriz01:5555/\",\r\n \"username\": \"Administrator\",\r\n \"password\": \"********************************\"\r\n }\r\n}" - }, - "schema" : { - "$ref" : "#/definitions/Stage" - } - }, - "400" : { - "description" : "This status code shows when the user missed the mandatory fields like name, url, username, password and keyStoreAlias, keyAlias for https url in the request or provide a invalid request body" - }, - "401" : { - "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to configure a stage." - } - }, - "security" : [ { - "Basic" : [ ] - } ] - } - }, - "/stages/{stageId}" : { - "get" : { - "description" : "This REST operation is used to retrieve a particular stage object based on a stage id", - "operationId" : "getStage", - "produces" : [ "application/json" ], - "parameters" : [ { - "name" : "stageId", - "in" : "path", - "description" : "Stage Id for the stage to be retrieved", - "required" : true, - "type" : "string", - "x-example" : "353bd366-47d4-4703-aecf-9cb40cdcc864" - } ], - "responses" : { - "200" : { - "description" : "Returns the stage based on the stageId.", - "examples" : { - "application/json" : "{\r\n \"stage\": {\r\n \"id\": \"2d9e280a-b529-466c-9ec8-d6b0e93026a8\",\r\n \"name\": \"sampleStage\",\r\n \"url\": \"http://localhost:5555/\",\r\n \"username\": \"Administrator\",\r\n \"password\": \"********************************\"\r\n }\r\n}" - }, - "schema" : { - "$ref" : "#/definitions/Stage" - } - }, - "404" : { - "description" : "This status code indicates that the stageId specified is not found in the API Gateway" - }, - "401" : { - "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." - } - }, - "security" : [ { - "Basic" : [ ] - } ] - }, - "put" : { - "description" : "This REST operation is used to update a stage in the source API Gateway where promotion will be initiated. A stage is just another API Gateway instance. When the stage url is https, then keystore and keystore alias will also be expected while configuring a stage", - "operationId" : "updateStage", - "consumes" : [ "application/json" ], - "produces" : [ "application/json" ], - "parameters" : [ { - "name" : "stageId", - "in" : "path", - "description" : "Stage Id for the stage to be updated", - "required" : true, - "type" : "string", - "x-example" : "353bd366-47d4-4703-aecf-9cb40cdcc864" - }, { - "in" : "body", - "name" : "body", - "description" : "Stage request payload", - "required" : true, - "schema" : { - "$ref" : "#/definitions/Stage" - }, - "x-examples" : { - "application/json" : "{\r\n \"stage\": {\r\n \"id\": \"2d9e280a-b529-466c-9ec8-d6b0e93026a8\",\r\n \"name\": \"sampleStage\",\r\n \"url\": \"http://localhost:5555/\",\r\n \"username\": \"Administrator\",\r\n \"password\": \"********************************\"\r\n }\r\n}" - } - } ], - "responses" : { - "200" : { - "description" : "Returns the updated stage object", - "examples" : { - "application/json" : "{\r\n \"stage\": {\r\n \"id\": \"2d9e280a-b529-466c-9ec8-d6b0e93026a8\",\r\n \"name\": \"sampleStage\",\r\n \"url\": \"http://localhost:5555/\",\r\n \"username\": \"Administrator\",\r\n \"password\": \"********************************\"\r\n }\r\n}" - }, - "schema" : { - "$ref" : "#/definitions/Stage" - } - }, - "404" : { - "description" : "This status code indicates that the stageId specified is not found in the API Gateway" - }, - "400" : { - "description" : "This status code shows when the user missed the mandatory fields like name, url, username, password and keyStoreAlias, keyAlias for https url in the request or provide a invalid request body" - }, - "401" : { - "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." - } - }, - "security" : [ { - "Basic" : [ ] - } ] - }, - "delete" : { - "description" : "Delete the stage", - "operationId" : "deleteStage", - "parameters" : [ { - "name" : "stageId", - "in" : "path", - "description" : "Stage Id for the stage to be deleted", - "required" : true, - "type" : "string", - "x-example" : "353bd366-47d4-4703-aecf-9cb40cdcc864" - } ], - "responses" : { - "404" : { - "description" : "This status code indicates that the stageId specified is not found in the API Gateway" - }, - "401" : { - "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API" - }, - "204" : { - "description" : "Success" - } - }, - "security" : [ { - "Basic" : [ ] - } ] - } - }, - "/promotion" : { - "get" : { - "description" : "This REST operation is used to retrieve the promotions history with each promotion entry provides the promotion name, promoted by whom, when it's promoted and the promoted assets status", - "operationId" : "getPromotions", - "produces" : [ "application/json" ], - "parameters" : [ ], - "responses" : { - "200" : { - "description" : "Returns the list of all promotions", - "examples" : { - "application/json" : "{\r\n \"promotion\": [\r\n {\r\n \"id\": \"12beeb57-1855-4da3-8802-679fcff6941b\",\r\n \"name\": \"samplePromote\",\r\n \"destinationStages\": [\r\n \"2d9e280a-b529-466c-9ec8-d6b0e93026a8\"\r\n ],\r\n \"valueSubstitution\": [],\r\n \"promotedAssets\": {\r\n \"api\": [\r\n \"9ae31b7f-25e6-11e8-9ed0-e261b16c5360\"\r\n ],\r\n \"application\": []\r\n },\r\n \"creationTime\": \"2018-08-07 07:29:28 GMT\",\r\n \"owner\": \"Administrator\",\r\n \"status\": \"Success\",\r\n \"promotionResults\": {\r\n \"sampleStage\": {\r\n \"status\": \"Success\",\r\n \"ArchiveResult\": [\r\n {\r\n \"Alias\": {\r\n \"name\": \"LabCaseEndpointAlias\",\r\n \"id\": \"fe1d5c3c-e02a-11e7-9d18-d9340e1d9bce\",\r\n \"status\": \"Success\",\r\n \"explanation\": \"OK\",\r\n \"overwritten\": true,\r\n \"dependencyFailed\": null\r\n }\r\n },\r\n {\r\n \"PolicyAction\": {\r\n \"name\": \"Policy Action [Enable HTTP / HTTPS] -> Policy For API LabCaseTestService_VS[2.0]\",\r\n \"id\": \"75852c98-244a-4be3-8434-f39a7426ce95\",\r\n \"status\": \"Success\",\r\n \"explanation\": \"OK\",\r\n \"overwritten\": true,\r\n \"dependencyFailed\": null\r\n }\r\n },\r\n {\r\n \"Alias\": {\r\n \"name\": \"SetProjectIdTransformationAlias\",\r\n \"id\": \"7011f00c-e01a-11e7-9d18-c3cb04029276\",\r\n \"status\": \"Success\",\r\n \"explanation\": \"OK\",\r\n \"overwritten\": true,\r\n \"dependencyFailed\": null\r\n }\r\n },\r\n {\r\n \"Policy\": {\r\n \"name\": \"Policy For API LabCaseTestService_VS[2.0]\",\r\n \"id\": \"0147048a-795f-48f2-905e-7357474fc02f\",\r\n \"status\": \"Success\",\r\n \"explanation\": \"OK\",\r\n \"overwritten\": true,\r\n \"dependencyFailed\": null\r\n }\r\n },\r\n {\r\n \"PolicyAction\": {\r\n \"name\": \"Policy Action [Outbound Authentication - Transport] -> Policy For API LabCaseTestService_VS[2.0]\",\r\n \"id\": \"a2947928-5a38-49a0-b0bb-2076800987a1\",\r\n \"status\": \"Success\",\r\n \"explanation\": \"OK\",\r\n \"overwritten\": true,\r\n \"dependencyFailed\": null\r\n }\r\n },\r\n {\r\n \"PolicyAction\": {\r\n \"name\": \"Policy Action [Monitor Service Performance] -> Policy For API LabCaseTestService_VS[2.0]\",\r\n \"id\": \"11d6d5d8-a55b-480b-8305-34544937fea8\",\r\n \"status\": \"Success\",\r\n \"explanation\": \"OK\",\r\n \"overwritten\": true,\r\n \"dependencyFailed\": null\r\n }\r\n },\r\n {\r\n \"API\": {\r\n \"name\": \"LabCaseTestService_VS[2.0]\",\r\n \"id\": \"9ae31b7f-25e6-11e8-9ed0-e261b16c5360\",\r\n \"status\": \"Success\",\r\n \"explanation\": \"OK\",\r\n \"overwritten\": true,\r\n \"dependencyFailed\": null\r\n }\r\n },\r\n {\r\n \"PolicyAction\": {\r\n \"name\": \"Policy Action [Request Transformation] -> Policy For API LabCaseTestService_VS[2.0]\",\r\n \"id\": \"73a459c5-a15c-49ce-8394-459a34adb81e\",\r\n \"status\": \"Success\",\r\n \"explanation\": \"OK\",\r\n \"overwritten\": true,\r\n \"dependencyFailed\": null\r\n }\r\n },\r\n {\r\n \"Alias\": {\r\n \"name\": \"MyLabCaseAccountThesse\",\r\n \"id\": \"b73a8400-e008-11e7-9d18-f5832492b6de\",\r\n \"status\": \"Success\",\r\n \"explanation\": \"OK\",\r\n \"overwritten\": true,\r\n \"dependencyFailed\": null\r\n }\r\n },\r\n {\r\n \"PassmanData\": {\r\n \"name\": \"HTTP_AUTH_OUTBOUND_CLIENT_PWDMyLabCaseAccountThesse\",\r\n \"id\": \"HTTP_AUTH_OUTBOUND_CLIENT_PWDMyLabCaseAccountThesse\",\r\n \"status\": \"Success\",\r\n \"explanation\": \"OK\",\r\n \"overwritten\": true,\r\n \"dependencyFailed\": null\r\n }\r\n },\r\n {\r\n \"PolicyAction\": {\r\n \"name\": \"Policy Action [Log Invocation] -> Policy For API LabCaseTestService_VS[2.0]\",\r\n \"id\": \"b2fda4bb-70cd-43ba-b508-250f8ba6f5ac\",\r\n \"status\": \"Success\",\r\n \"explanation\": \"OK\",\r\n \"overwritten\": true,\r\n \"dependencyFailed\": null\r\n }\r\n },\r\n {\r\n \"PolicyAction\": {\r\n \"name\": \"Policy Action [Identify & Authorize Application] -> Policy For API LabCaseTestService_VS[2.0]\",\r\n \"id\": \"f37af4f0-1304-4cf2-b6ea-dc19b012f537\",\r\n \"status\": \"Success\",\r\n \"explanation\": \"OK\",\r\n \"overwritten\": true,\r\n \"dependencyFailed\": null\r\n }\r\n },\r\n {\r\n \"PolicyAction\": {\r\n \"name\": \"Policy Action [Straight Through Routing] -> Policy For API LabCaseTestService_VS[2.0]\",\r\n \"id\": \"fa476c9d-b30c-4d51-b7c5-80a824723f4f\",\r\n \"status\": \"Success\",\r\n \"explanation\": \"OK\",\r\n \"overwritten\": true,\r\n \"dependencyFailed\": null\r\n }\r\n },\r\n {\r\n \"PolicyAction\": {\r\n \"name\": \"Policy Action [Service Result Cache] -> Policy For API LabCaseTestService_VS[2.0]\",\r\n \"id\": \"0fc7967a-0c31-4ba2-bc8a-a70f059d3ef0\",\r\n \"status\": \"Success\",\r\n \"explanation\": \"OK\",\r\n \"overwritten\": true,\r\n \"dependencyFailed\": null\r\n }\r\n }\r\n ]\r\n }\r\n },\r\n \"includeApis\": false,\r\n \"includeApplications\": false,\r\n \"includeSubscriptions\": false\r\n },\r\n {\r\n \"id\": \"5cf6f3f5-f8ad-4810-9ef7-ed51d3fd2cfd\",\r\n \"name\": \"samplePromote_01\",\r\n \"destinationStages\": [\r\n \"2d9e280a-b529-466c-9ec8-d6b0e93026a8\"\r\n ],\r\n \"valueSubstitution\": [],\r\n \"promotedAssets\": {\r\n \"api\": [\r\n \"9ae31b7f-25e6-11e8-9ed0-e261b16c5360\"\r\n ]\r\n },\r\n \"creationTime\": \"2018-08-07 07:32:35 GMT\",\r\n \"owner\": \"Administrator\",\r\n \"status\": \"Success\",\r\n \"promotionResults\": {\r\n \"sampleStage\": {\r\n \"status\": \"Success\",\r\n \"ArchiveResult\": [\r\n {\r\n \"PolicyAction\": {\r\n \"name\": \"Policy Action [Log Invocation] -> Policy For API LabCaseTestService_VS[2.0]\",\r\n \"id\": \"b2fda4bb-70cd-43ba-b508-250f8ba6f5ac\",\r\n \"status\": \"Failed\",\r\n \"explanation\": \"Asset already exists.\",\r\n \"overwritten\": false,\r\n \"dependencyFailed\": false\r\n }\r\n },\r\n {\r\n \"Alias\": {\r\n \"name\": \"SetProjectIdTransformationAlias\",\r\n \"id\": \"7011f00c-e01a-11e7-9d18-c3cb04029276\",\r\n \"status\": \"Failed\",\r\n \"explanation\": \"Asset already exists.\",\r\n \"overwritten\": false,\r\n \"dependencyFailed\": false\r\n }\r\n },\r\n {\r\n \"Policy\": {\r\n \"name\": \"Policy For API LabCaseTestService_VS[2.0]\",\r\n \"id\": \"0147048a-795f-48f2-905e-7357474fc02f\",\r\n \"status\": \"Failed\",\r\n \"explanation\": \"Asset already exists.\",\r\n \"overwritten\": false,\r\n \"dependencyFailed\": false\r\n }\r\n },\r\n {\r\n \"PassmanData\": {\r\n \"name\": \"HTTP_AUTH_OUTBOUND_CLIENT_PWDMyLabCaseAccountThesse\",\r\n \"id\": \"HTTP_AUTH_OUTBOUND_CLIENT_PWDMyLabCaseAccountThesse\",\r\n \"status\": \"Success\",\r\n \"explanation\": \"OK\",\r\n \"overwritten\": true,\r\n \"dependencyFailed\": null\r\n }\r\n },\r\n {\r\n \"Alias\": {\r\n \"name\": \"MyLabCaseAccountThesse\",\r\n \"id\": \"b73a8400-e008-11e7-9d18-f5832492b6de\",\r\n \"status\": \"Failed\",\r\n \"explanation\": \"Asset already exists.\",\r\n \"overwritten\": false,\r\n \"dependencyFailed\": false\r\n }\r\n },\r\n {\r\n \"PolicyAction\": {\r\n \"name\": \"Policy Action [Request Transformation] -> Policy For API LabCaseTestService_VS[2.0]\",\r\n \"id\": \"73a459c5-a15c-49ce-8394-459a34adb81e\",\r\n \"status\": \"Failed\",\r\n \"explanation\": \"Asset already exists.\",\r\n \"overwritten\": false,\r\n \"dependencyFailed\": false\r\n }\r\n },\r\n {\r\n \"PolicyAction\": {\r\n \"name\": \"Policy Action [Enable HTTP / HTTPS] -> Policy For API LabCaseTestService_VS[2.0]\",\r\n \"id\": \"75852c98-244a-4be3-8434-f39a7426ce95\",\r\n \"status\": \"Failed\",\r\n \"explanation\": \"Asset already exists.\",\r\n \"overwritten\": false,\r\n \"dependencyFailed\": false\r\n }\r\n },\r\n {\r\n \"API\": {\r\n \"name\": \"LabCaseTestService_VS[2.0]\",\r\n \"id\": \"9ae31b7f-25e6-11e8-9ed0-e261b16c5360\",\r\n \"status\": \"Failed\",\r\n \"explanation\": \"Asset already exists.\",\r\n \"overwritten\": false,\r\n \"dependencyFailed\": false\r\n }\r\n },\r\n {\r\n \"PolicyAction\": {\r\n \"name\": \"Policy Action [Monitor Service Performance] -> Policy For API LabCaseTestService_VS[2.0]\",\r\n \"id\": \"11d6d5d8-a55b-480b-8305-34544937fea8\",\r\n \"status\": \"Failed\",\r\n \"explanation\": \"Asset already exists.\",\r\n \"overwritten\": false,\r\n \"dependencyFailed\": false\r\n }\r\n },\r\n {\r\n \"Alias\": {\r\n \"name\": \"LabCaseEndpointAlias\",\r\n \"id\": \"fe1d5c3c-e02a-11e7-9d18-d9340e1d9bce\",\r\n \"status\": \"Failed\",\r\n \"explanation\": \"Asset already exists.\",\r\n \"overwritten\": false,\r\n \"dependencyFailed\": false\r\n }\r\n },\r\n {\r\n \"PolicyAction\": {\r\n \"name\": \"Policy Action [Service Result Cache] -> Policy For API LabCaseTestService_VS[2.0]\",\r\n \"id\": \"0fc7967a-0c31-4ba2-bc8a-a70f059d3ef0\",\r\n \"status\": \"Failed\",\r\n \"explanation\": \"Asset already exists.\",\r\n \"overwritten\": false,\r\n \"dependencyFailed\": false\r\n }\r\n },\r\n {\r\n \"PolicyAction\": {\r\n \"name\": \"Policy Action [Straight Through Routing] -> Policy For API LabCaseTestService_VS[2.0]\",\r\n \"id\": \"fa476c9d-b30c-4d51-b7c5-80a824723f4f\",\r\n \"status\": \"Failed\",\r\n \"explanation\": \"Asset already exists.\",\r\n \"overwritten\": false,\r\n \"dependencyFailed\": false\r\n }\r\n },\r\n {\r\n \"PolicyAction\": {\r\n \"name\": \"Policy Action [Outbound Authentication - Transport] -> Policy For API LabCaseTestService_VS[2.0]\",\r\n \"id\": \"a2947928-5a38-49a0-b0bb-2076800987a1\",\r\n \"status\": \"Failed\",\r\n \"explanation\": \"Asset already exists.\",\r\n \"overwritten\": false,\r\n \"dependencyFailed\": false\r\n }\r\n },\r\n {\r\n \"PolicyAction\": {\r\n \"name\": \"Policy Action [Identify & Authorize Application] -> Policy For API LabCaseTestService_VS[2.0]\",\r\n \"id\": \"f37af4f0-1304-4cf2-b6ea-dc19b012f537\",\r\n \"status\": \"Failed\",\r\n \"explanation\": \"Asset already exists.\",\r\n \"overwritten\": false,\r\n \"dependencyFailed\": false\r\n }\r\n }\r\n ]\r\n }\r\n },\r\n \"includeApis\": false,\r\n \"includeApplications\": false,\r\n \"includeSubscriptions\": false\r\n },\r\n {\r\n \"id\": \"917e144e-70cc-4ada-8541-9f68d28483e9\",\r\n \"name\": \"samplePromote_01\",\r\n \"destinationStages\": [\r\n \"2d9e280a-b529-466c-9ec8-d6b0e93026a8\"\r\n ],\r\n \"valueSubstitution\": [],\r\n \"promotedAssets\": {\r\n \"api\": [\r\n \"d033acd7-f935-4d92-8042-b152a992b0cd\"\r\n ]\r\n },\r\n \"creationTime\": \"2018-08-07 07:33:10 GMT\",\r\n \"owner\": \"Administrator\",\r\n \"status\": \"Success\",\r\n \"promotionResults\": {\r\n \"sampleStage\": {\r\n \"status\": \"Success\",\r\n \"ArchiveResult\": [\r\n {\r\n \"Policy\": {\r\n \"name\": \"Policy For API PetStore on Heroku[1.0.0]\",\r\n \"id\": \"629edf16-3a8c-4362-b75c-2a9f9ab27ee0\",\r\n \"status\": \"Failed\",\r\n \"explanation\": \"Asset already exists.\",\r\n \"overwritten\": false,\r\n \"dependencyFailed\": false\r\n }\r\n },\r\n {\r\n \"PolicyAction\": {\r\n \"name\": \"Policy Action [Straight Through Routing] -> Policy For API PetStore on Heroku[1.0.0]\",\r\n \"id\": \"e50eba2b-6f54-4585-9dac-25b20543bf82\",\r\n \"status\": \"Failed\",\r\n \"explanation\": \"Asset already exists.\",\r\n \"overwritten\": false,\r\n \"dependencyFailed\": false\r\n }\r\n },\r\n {\r\n \"PolicyAction\": {\r\n \"name\": \"Policy Action [Enable HTTP / HTTPS] -> Policy For API PetStore on Heroku[1.0.0]\",\r\n \"id\": \"b8b508e0-a61d-49f0-9131-a9379dbd7f6e\",\r\n \"status\": \"Failed\",\r\n \"explanation\": \"Asset already exists.\",\r\n \"overwritten\": false,\r\n \"dependencyFailed\": false\r\n }\r\n },\r\n {\r\n \"API\": {\r\n \"name\": \"PetStore on Heroku[1.0.0]\",\r\n \"id\": \"d033acd7-f935-4d92-8042-b152a992b0cd\",\r\n \"status\": \"Failed\",\r\n \"explanation\": \"Asset already exists.\",\r\n \"overwritten\": false,\r\n \"dependencyFailed\": false\r\n }\r\n }\r\n ]\r\n }\r\n },\r\n \"includeApis\": false,\r\n \"includeApplications\": false,\r\n \"includeSubscriptions\": false\r\n },\r\n {\r\n \"id\": \"025d530f-e8ed-4984-99bf-9d216bd3adc0\",\r\n \"name\": \"samplePromote_01\",\r\n \"destinationStages\": [\r\n \"2d9e280a-b529-466c-9ec8-d6b0e93026a8\"\r\n ],\r\n \"valueSubstitution\": [],\r\n \"promotedAssets\": {\r\n \"api\": [\r\n \"d033acd7-f935-4d92-8042-b152a992b0cd\"\r\n ]\r\n },\r\n \"creationTime\": \"2018-08-07 07:33:57 GMT\",\r\n \"owner\": \"Administrator\",\r\n \"status\": \"Success\",\r\n \"promotionResults\": {\r\n \"sampleStage\": {\r\n \"status\": \"Success\",\r\n \"ArchiveResult\": [\r\n {\r\n \"PolicyAction\": {\r\n \"name\": \"Policy Action [Enable HTTP / HTTPS] -> Policy For API PetStore on Heroku[1.0.0]\",\r\n \"id\": \"b8b508e0-a61d-49f0-9131-a9379dbd7f6e\",\r\n \"status\": \"Success\",\r\n \"explanation\": \"OK\",\r\n \"overwritten\": true,\r\n \"dependencyFailed\": null\r\n }\r\n },\r\n {\r\n \"API\": {\r\n \"name\": \"PetStore on Heroku[1.0.0]\",\r\n \"id\": \"d033acd7-f935-4d92-8042-b152a992b0cd\",\r\n \"status\": \"Success\",\r\n \"explanation\": \"OK\",\r\n \"overwritten\": true,\r\n \"dependencyFailed\": null\r\n }\r\n },\r\n {\r\n \"Policy\": {\r\n \"name\": \"Policy For API PetStore on Heroku[1.0.0]\",\r\n \"id\": \"629edf16-3a8c-4362-b75c-2a9f9ab27ee0\",\r\n \"status\": \"Success\",\r\n \"explanation\": \"OK\",\r\n \"overwritten\": true,\r\n \"dependencyFailed\": null\r\n }\r\n },\r\n {\r\n \"PolicyAction\": {\r\n \"name\": \"Policy Action [Straight Through Routing] -> Policy For API PetStore on Heroku[1.0.0]\",\r\n \"id\": \"e50eba2b-6f54-4585-9dac-25b20543bf82\",\r\n \"status\": \"Success\",\r\n \"explanation\": \"OK\",\r\n \"overwritten\": true,\r\n \"dependencyFailed\": null\r\n }\r\n }\r\n ]\r\n }\r\n },\r\n \"includeApis\": false,\r\n \"includeApplications\": false,\r\n \"includeSubscriptions\": false\r\n }\r\n ]\r\n}" - }, - "schema" : { - "type" : "array", - "items" : { - "$ref" : "#/definitions/Promotion" - } - } - }, - "401" : { - "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." - } - }, - "security" : [ { - "Basic" : [ ] - } ] - }, - "post" : { - "description" : "This REST operation is used to promote the API Gateway assets from the source machine to destination machine where the destination machine is configured as a stage", - "operationId" : "createPromotion", - "consumes" : [ "application/json" ], - "produces" : [ "application/json" ], - "parameters" : [ { - "in" : "body", - "name" : "body", - "description" : "Promotion request payload", - "required" : true, - "schema" : { - "$ref" : "#/definitions/Promotion" - }, - "x-examples" : { - "application/json" : "{\"description\":\"Promoting the weather API version 2.0 to QA stage so that QA can start testing this API\",\"name\":\"samplePromote\",\"destinationStages\":[\"2d9e280a-b529-466c-9ec8-d6b0e93026a8\"],\"promotedAssets\":{\"api\":[\"9ae31b7f-25e6-11e8-9ed0-e261b16c5360\"],\"application\":[]}}" - } - } ], - "responses" : { - "200" : { - "description" : "Promotion of assets is completed successfully in API Gateway.", - "examples" : { - "application/json" : "{\r\n \"promotion\": {\r\n \"id\": \"025d530f-e8ed-4984-99bf-9d216bd3adc0\",\r\n \"name\": \"samplePromote_01\",\r\n \"destinationStages\": [\r\n \"2d9e280a-b529-466c-9ec8-d6b0e93026a8\"\r\n ],\r\n \"valueSubstitution\": [],\r\n \"promotedAssets\": {\r\n \"api\": [\r\n \"d033acd7-f935-4d92-8042-b152a992b0cd\"\r\n ]\r\n },\r\n \"creationTime\": \"2018-08-07 07:33:57 GMT\",\r\n \"owner\": \"Administrator\",\r\n \"status\": \"Success\",\r\n \"promotionResults\": {\r\n \"sampleStage\": {\r\n \"status\": \"Success\",\r\n \"ArchiveResult\": [\r\n {\r\n \"PolicyAction\": {\r\n \"name\": \"Policy Action [Enable HTTP / HTTPS] -> Policy For API PetStore on Heroku[1.0.0]\",\r\n \"id\": \"b8b508e0-a61d-49f0-9131-a9379dbd7f6e\",\r\n \"status\": \"Success\",\r\n \"explanation\": \"OK\",\r\n \"overwritten\": true,\r\n \"dependencyFailed\": null\r\n }\r\n },\r\n {\r\n \"API\": {\r\n \"name\": \"PetStore on Heroku[1.0.0]\",\r\n \"id\": \"d033acd7-f935-4d92-8042-b152a992b0cd\",\r\n \"status\": \"Success\",\r\n \"explanation\": \"OK\",\r\n \"overwritten\": true,\r\n \"dependencyFailed\": null\r\n }\r\n },\r\n {\r\n \"Policy\": {\r\n \"name\": \"Policy For API PetStore on Heroku[1.0.0]\",\r\n \"id\": \"629edf16-3a8c-4362-b75c-2a9f9ab27ee0\",\r\n \"status\": \"Success\",\r\n \"explanation\": \"OK\",\r\n \"overwritten\": true,\r\n \"dependencyFailed\": null\r\n }\r\n },\r\n {\r\n \"PolicyAction\": {\r\n \"name\": \"Policy Action [Straight Through Routing] -> Policy For API PetStore on Heroku[1.0.0]\",\r\n \"id\": \"e50eba2b-6f54-4585-9dac-25b20543bf82\",\r\n \"status\": \"Success\",\r\n \"explanation\": \"OK\",\r\n \"overwritten\": true,\r\n \"dependencyFailed\": null\r\n }\r\n }\r\n ]\r\n }\r\n },\r\n \"includeApis\": false,\r\n \"includeApplications\": false,\r\n \"includeSubscriptions\": false\r\n }\r\n}" - }, - "schema" : { - "$ref" : "#/definitions/Promotion" - } - }, - "400" : { - "description" : "This status code shows when the user missed the mandatory fields like destinationStages, promotedAssets in the request or provide a invalid request body" - }, - "401" : { - "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to configure a stage." - } - }, - "security" : [ { - "Basic" : [ ] - } ] - } - }, - "/promotion/{promotionId}" : { - "get" : { - "description" : "Retrieve a promotion based on the promotion id.", - "operationId" : "getPromotion", - "produces" : [ "application/json" ], - "parameters" : [ { - "name" : "promotionId", - "in" : "path", - "description" : "Promotion Id for the promotion to be retrieved", - "required" : true, - "type" : "string", - "x-example" : "353bd366-47d4-4703-aecf-9cb40cdcc864" - } ], - "responses" : { - "200" : { - "description" : "Returns the promotion based on the promotionId.", - "examples" : { - "application/json" : "{\r\n \"promotion\": {\r\n \"id\": \"025d530f-e8ed-4984-99bf-9d216bd3adc0\",\r\n \"name\": \"samplePromote_01\",\r\n \"destinationStages\": [\r\n \"2d9e280a-b529-466c-9ec8-d6b0e93026a8\"\r\n ],\r\n \"valueSubstitution\": [],\r\n \"promotedAssets\": {\r\n \"api\": [\r\n \"d033acd7-f935-4d92-8042-b152a992b0cd\"\r\n ]\r\n },\r\n \"creationTime\": \"2018-08-07 07:33:57 GMT\",\r\n \"owner\": \"Administrator\",\r\n \"status\": \"Success\",\r\n \"promotionResults\": {\r\n \"sampleStage\": {\r\n \"status\": \"Success\",\r\n \"ArchiveResult\": [\r\n {\r\n \"PolicyAction\": {\r\n \"name\": \"Policy Action [Enable HTTP / HTTPS] -> Policy For API PetStore on Heroku[1.0.0]\",\r\n \"id\": \"b8b508e0-a61d-49f0-9131-a9379dbd7f6e\",\r\n \"status\": \"Success\",\r\n \"explanation\": \"OK\",\r\n \"overwritten\": true,\r\n \"dependencyFailed\": null\r\n }\r\n },\r\n {\r\n \"API\": {\r\n \"name\": \"PetStore on Heroku[1.0.0]\",\r\n \"id\": \"d033acd7-f935-4d92-8042-b152a992b0cd\",\r\n \"status\": \"Success\",\r\n \"explanation\": \"OK\",\r\n \"overwritten\": true,\r\n \"dependencyFailed\": null\r\n }\r\n },\r\n {\r\n \"Policy\": {\r\n \"name\": \"Policy For API PetStore on Heroku[1.0.0]\",\r\n \"id\": \"629edf16-3a8c-4362-b75c-2a9f9ab27ee0\",\r\n \"status\": \"Success\",\r\n \"explanation\": \"OK\",\r\n \"overwritten\": true,\r\n \"dependencyFailed\": null\r\n }\r\n },\r\n {\r\n \"PolicyAction\": {\r\n \"name\": \"Policy Action [Straight Through Routing] -> Policy For API PetStore on Heroku[1.0.0]\",\r\n \"id\": \"e50eba2b-6f54-4585-9dac-25b20543bf82\",\r\n \"status\": \"Success\",\r\n \"explanation\": \"OK\",\r\n \"overwritten\": true,\r\n \"dependencyFailed\": null\r\n }\r\n }\r\n ]\r\n }\r\n },\r\n \"includeApis\": false,\r\n \"includeApplications\": false,\r\n \"includeSubscriptions\": false\r\n }\r\n}" - }, - "schema" : { - "$ref" : "#/definitions/Promotion" - } - }, - "404" : { - "description" : "This status code indicates that the promotionId specified is not found in the API Gateway" - }, - "401" : { - "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." - } - }, - "security" : [ { - "Basic" : [ ] - } ] - }, - "delete" : { - "description" : "Delete the promotion", - "operationId" : "deletePromotion", - "parameters" : [ { - "name" : "promotionId", - "in" : "path", - "description" : "Promotion Id for the promotion to be deleted", - "required" : true, - "type" : "string", - "x-example" : "353bd366-47d4-4703-aecf-9cb40cdcc864" - } ], - "responses" : { - "404" : { - "description" : "This status code indicates that the promotionId specified is not found in the API Gateway" - }, - "401" : { - "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API" - }, - "204" : { - "description" : "Success" - } - }, - "security" : [ { - "Basic" : [ ] - } ] - } - }, - "/rollback" : { - "get" : { - "description" : "This REST operation is used to retrieve the list of possible rollbacks a user can do from the local (target) API Gateway instance. Each rollback entry was created when a promotion of assets to the local (target) API Gateway instance from another stage", - "operationId" : "getRollbacks", - "produces" : [ "application/json" ], - "parameters" : [ ], - "responses" : { - "200" : { - "description" : "Returns the list of all rollbacks", - "examples" : { - "application/json" : "{\r\n \"rollback\": [\r\n {\r\n \"id\": \"b3c038d6-84a8-4b35-93af-21ab4151c1d4\",\r\n \"name\": \"testP2\",\r\n \"description\": \"\",\r\n\t\t\t\"promotionTime\": \"2018-12-04 09:07:43 GMT\"\r\n },\r\n {\r\n \"id\": \"01faa8db-1213-44c3-9b4a-cda173f00b4a\",\r\n \"name\": \"testP3\",\r\n \"status\": \"Success\",\r\n \"promotionTime\": \"2018-12-04 09:08:31 GMT\",\r\n \"lastRollbackTime\": \"2018-12-04 09:18:27 GMT\"\r\n }\r\n ]\r\n}" - }, - "schema" : { - "type" : "array", - "items" : { - "$ref" : "#/definitions/Rollback" - } - } - }, - "401" : { - "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." - } - }, - "security" : [ { - "Basic" : [ ] - } ] - } - }, - "/rollback/{rollbackId}" : { - "get" : { - "description" : "Retrieve a rollback based on the rollback id.", - "operationId" : "getRollback", - "produces" : [ "application/json" ], - "parameters" : [ { - "name" : "rollbackId", - "in" : "path", - "description" : "Rollback Id for the rollback to be retrieved", - "required" : true, - "type" : "string", - "x-example" : "353bd366-47d4-4703-aecf-9cb40cdcc864" - } ], - "responses" : { - "200" : { - "description" : "Returns the rollback based on the rollbackId.", - "examples" : { - "application/json" : "{\r\n \"rollback\": \r\n {\r\n \"id\": \"01faa8db-1213-44c3-9b4a-cda173f00b4a\",\r\n \"name\": \"testP3\",\r\n \"status\": \"Success\",\r\n \"promotionTime\": \"2018-12-04 09:08:31 GMT\",\r\n \"lastRollbackTime\": \"2018-12-04 09:18:27 GMT\"\r\n }\r\n}" - }, - "schema" : { - "$ref" : "#/definitions/Rollback" - } - }, - "404" : { - "description" : "This status code indicates that the rollbackId specified is not found in the API Gateway" - }, - "401" : { - "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." - } - }, - "security" : [ { - "Basic" : [ ] - } ] - }, - "put" : { - "description" : "This REST operation is used to rollback the assets to the previous state i.e the state prior to promotion. Rollback should be initiated from the local gateway instance.", - "operationId" : "doRollback", - "consumes" : [ "application/json" ], - "produces" : [ "application/json" ], - "parameters" : [ { - "name" : "rollbackId", - "in" : "path", - "description" : "Rollback Id for the promotion to be rollbacked", - "required" : true, - "type" : "string", - "x-example" : "353bd366-47d4-4703-aecf-9cb40cdcc864" - } ], - "responses" : { - "200" : { - "description" : "Returns the rollback object", - "examples" : { - "application/json" : "{\r\n \"rollback\": \r\n {\r\n \"id\": \"01faa8db-1213-44c3-9b4a-cda173f00b4a\",\r\n \"name\": \"testP3\",\r\n \"status\": \"Success\",\r\n \"promotionTime\": \"2018-12-04 09:08:31 GMT\",\r\n \"lastRollbackTime\": \"2018-12-04 09:18:27 GMT\"\r\n }\r\n}" - }, - "schema" : { - "$ref" : "#/definitions/Rollback" - } - }, - "404" : { - "description" : "This status code indicates that the rollbackId specified is not found in the API Gateway" - }, - "401" : { - "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." - } - }, - "security" : [ { - "Basic" : [ ] - } ] - }, - "delete" : { - "description" : "Delete the rollback", - "operationId" : "deleteRollback", - "parameters" : [ { - "name" : "rollbackId", - "in" : "path", - "description" : "Rollback Id for the rollback to be deleted", - "required" : true, - "type" : "string", - "x-example" : "353bd366-47d4-4703-aecf-9cb40cdcc864" - } ], - "responses" : { - "404" : { - "description" : "This status code indicates that the rollbackId specified is not found in the API Gateway" - }, - "401" : { - "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API" - }, - "204" : { - "description" : "Success" - } - }, - "security" : [ { - "Basic" : [ ] - } ] - } - } - }, - "securityDefinitions" : { - "Basic" : { - "description" : "API Gateway Administrator and API Gateway provider", - "type" : "basic" - } - }, - "definitions" : { - "Stage" : { - "type" : "object", - "properties" : { - "id" : { - "type" : "string", - "readOnly" : true - }, - "name" : { - "type" : "string", - "description" : "Unique name for the stage" - }, - "description" : { - "type" : "string", - "description" : "Description for the stage" - }, - "url" : { - "type" : "string", - "description" : "The URL of the host machine where the stage is deployed on an API Gateway installation" - }, - "username" : { - "type" : "string", - "description" : "The username of a registered API Gateway user who has the Manage promotions functional privilege in the target API Gateway instance" - }, - "password" : { - "type" : "string", - "description" : "A valid password of the API Gateway user identified by the attribute Username" - }, - "keystoreAlias" : { - "type" : "string", - "description" : "The alias of the keystore containing the private key that is used for performing asset promotion from one (source) stage to another (target) stage.\nThe Keystore alias field contains a list of the available keystore aliases in API Gateway. If there are no configured keystore aliases, this field lists the default Integration Server keystore, DEFAULT_IS_KEYSTORE ." - }, - "keyAlias" : { - "type" : "string", - "description" : "The alias of the private key that is stored in the keystore specified by the keystore alias.\nThe Key alias field contains a list of the available aliases in the selected keystore. If there are no configured keystores, this field is empty" - } - } - }, - "AssetObject" : { - "type" : "object", - "properties" : { - "name" : { - "type" : "string", - "description" : "Name of the API gateway asset", - "readOnly" : true - }, - "id" : { - "type" : "string", - "description" : "Id of the API gateway asset", - "readOnly" : true - }, - "status" : { - "type" : "string", - "description" : "Status of the API gateway asset i.e success or failure", - "readOnly" : true - }, - "explanation" : { - "type" : "string", - "description" : "Explanation for the failure", - "readOnly" : true - }, - "overwritten" : { - "type" : "boolean", - "description" : "Specifies whether the promoted asset overwrite any existing asset or not", - "readOnly" : true - }, - "dependencyFailed" : { - "type" : "boolean", - "description" : "Specified whether the dependency asset is failed or not", - "readOnly" : true - } - } - }, - "PrintArchiveResults" : { - "type" : "object", - "properties" : { - "status" : { - "type" : "string", - "description" : "Status of the promotion of assets", - "readOnly" : true - }, - "errorReason" : { - "type" : "string", - "description" : "Error reason for the promotion of assets, if the promotion is failed", - "readOnly" : true - }, - "ArchiveResult" : { - "type" : "array", - "description" : "List of the result of the promotion of all selected assets where key in the each element is the asset type", - "readOnly" : true, - "items" : { - "type" : "object", - "additionalProperties" : { - "$ref" : "#/definitions/AssetObject" - } - } - } - } - }, - "Promotion" : { - "type" : "object", - "properties" : { - "id" : { - "type" : "string", - "readOnly" : true - }, - "description" : { - "type" : "string", - "description" : "Description for the promotion" - }, - "name" : { - "type" : "string", - "description" : "Name for the promotion" - }, - "destinationStages" : { - "type" : "array", - "description" : "List of target stages (specified by stage ids) that you want to promote the assets", - "items" : { - "type" : "string" - } - }, - "promotedAssets" : { - "type" : "object", - "description" : "Map of assets with its associated asset ids to be promoted where key is the asset type and value is the list of asset ids. Possible asset types are \"USER\", \"GROUP\", \"USERS\", \"GROUPS\", \"ACCESSPROFILES\", \"LDAPGROUPS\", \"CDSGROUPS\", \"ASSERTION\", \"APPLICATION\", \"API\", \"ALIAS\", \"POLICY\", \"POLICY_ACTION\", \"PLAN\", \"PACKAGE\", \"ADMINISTRATOR_SETTING\", \"PORTAL_GATEWAY\", \"OAUTH2_SCOPE_DATA\", \"SUBSCRIPTION\", \"API_DOCUMENT\", \"APPROVAL_CONFIGURATION\", \"OUTBOUND_PROXY\", \"URL_ALIAS\", \"KEYSTORE\", \"TRUSTSTORE\", \"KERBEROS_SETTING\", \"JNDI_PROVIDER_ALIAS\", \"JMS_CONNECTION_ALIAS\", \"JMS_TRIGGER\", \"WEB_SERVICE_ENDPOINT_ALIAS\".", - "additionalProperties" : { - "type" : "array", - "items" : { - "type" : "string" - } - } - }, - "creationTime" : { - "type" : "string", - "readOnly" : true - }, - "owner" : { - "type" : "string", - "description" : "The user who initiates this promotion", - "readOnly" : true - }, - "status" : { - "type" : "string", - "description" : "Overall status of the promotion whether it's success or failure", - "readOnly" : true - }, - "errorReason" : { - "type" : "string", - "description" : "Reason for the promotion if it's failed", - "readOnly" : true - }, - "promotionResults" : { - "type" : "object", - "description" : "Result of the individual assets that is promoted to all destination stages along with the reason where key is the stage name", - "readOnly" : true, - "additionalProperties" : { - "$ref" : "#/definitions/PrintArchiveResults" - } - }, - "includeApis" : { - "type" : "boolean", - "description" : "Include the APIs associated with the applications during the promotion of applications" - }, - "includeApplications" : { - "type" : "boolean", - "description" : "Include the applications associated with the APIs during the promotion of APIs" - }, - "includeSubscriptions" : { - "type" : "boolean", - "description" : "Include the subscriptions associated with the packages during the promotion of packages" - } - } - }, - "Rollback" : { - "type" : "object", - "properties" : { - "id" : { - "type" : "string", - "readOnly" : true - }, - "name" : { - "type" : "string", - "description" : "Name for the rollback" - }, - "description" : { - "type" : "string", - "description" : "Description for the rollback" - }, - "status" : { - "type" : "string", - "description" : "Overall status of the rollback whether it's success or failure", - "readOnly" : true - }, - "sourceStage" : { - "type" : "string", - "description" : "Source stage of the promotion", - "readOnly" : true - }, - "promotedBy" : { - "type" : "string", - "description" : "User who initiated the promotion", - "readOnly" : true - }, - "promotionTime" : { - "type" : "string", - "description" : "Actual time of the promotion", - "readOnly" : true - }, - "lastRollbackTime" : { - "type" : "string", - "description" : "The time at which the asset promotion was rolled back", - "readOnly" : true - } - } - } - } -} \ No newline at end of file From e220ce769f69fa7809d3948deeba2edadb153910 Mon Sep 17 00:00:00 2001 From: Dhivakar Asokan <48990091+dhivakar-asokan@users.noreply.github.com> Date: Thu, 21 May 2020 20:30:23 +0530 Subject: [PATCH 09/22] Delete APIGatewayPublicServices.json --- .../APIGatewayPublicServices.json | 97 ------------------- 1 file changed, 97 deletions(-) delete mode 100644 apigatewayservices/APIGatewayPublicServices.json diff --git a/apigatewayservices/APIGatewayPublicServices.json b/apigatewayservices/APIGatewayPublicServices.json deleted file mode 100644 index 526ab81..0000000 --- a/apigatewayservices/APIGatewayPublicServices.json +++ /dev/null @@ -1,97 +0,0 @@ -{ - "swagger" : "2.0", - "info" : { - "description" : "API Gateway public services contains the list of all the public services. \n1. JWT: JSON Web Token (JWT) is a JSON-based open standard (RFC 7519) means of representing a set of information to be securely transmitted between two parties. A set of information is the set of claims (claim set) represented by the JWT. A claim set consists of zero or more claims represented by the name-value pairs, where the names are strings and the values are arbitrary JSON values.API Gateway can generate a JWT token itself or validate the JWT token generated by a trusted third party server.This API allows you to fetch a JWT from API Gateway and also fetch JSON Web key URI of the APIGateway.", - "version" : "10.7", - "title" : "API Gateway Public services" - }, - "host" : "localhost:5555", - "basePath" : "/rest/pub/apigateway", - "schemes" : [ "http" ], - "consumes" : [ "plain/text" ], - "produces" : [ "application/json" ], - "paths" : { - "/jwt/getJsonWebToken" : { - "get" : { - "description" : "This operation fetches JWT from APIGateway.To obtain the JWT from APIGateway the client has to has to pass the basic authentication credentials.", - "operationId" : "getJsonWebToken", - "produces" : [ "application/json" ], - "parameters" : [ { - "name" : "app_id", - "in" : "query", - "description" : "This parameter is used to specify an application id for which APIGateway generates a JWT", - "required" : false, - "type" : "string" - } ], - "responses" : { - "200" : { - "description" : "This response indicates that the client is able to fetch the JWT successfuly.", - "examples" : { - "application/json" : "{\r\n \"jwt\":\"eyJraWQiOiJzc29zIiwiYWxnIjoiUlMyNTYifQ.eyJzdWIiOiJBZG1pbmlzdHJhdG9yIiwiYXVkIjoiIiwibmJmIjoxNTIyNjcxMDMyLCJpc3MiOiJBQUEiLCJleHAiOjE1MjI2OTEwMTIsImlhdCI6MTUyMjY3MTAzMn0.C3ZtttnEPgIT9F1rvLzxjrbVr5AWDqGgicdt7O_bP2qYEgaQ3daBkGAHZeRwDPtijfzC7uL0WdEeqzUwC8ybbX-7dqz76yUhhLIeTl7O1qJj2uT8KNKUJC93-hL_SwzbQfO61rW_dHDYeXgnldZltxHE66HUU3mQOjSvQ_GuOfDdzACyMPcfVuW2_uYcT2HfxBI4l5GCIVVKI92E2JG1-Edm9A7PL8L435i64onotVl-QEaMMGMc6LqaY-pOKz6xflJQ06tt2woMhsqVf2iyNr0P8849fBCHXZkghX2is8cYaQQw2Y6cKDEtWA9ueWsPprvIGiWkyHVtUD3Jv4Gymg\" \r\n}" - }, - "schema" : { - "$ref" : "#/definitions/JWT" - } - }, - "400" : { - "description" : "This status code indicates that the requested URI is not valid " - }, - "401" : { - "description" : "This response indicates that invalid credentials have been provided while fetching the JWT." - }, - "500" : { - "description" : "This response indicates that the server has encountered an error while fetching JWT" - } - }, - "security" : [ { - "Basic" : [ ] - } ] - } - }, - "/jwt/certs" : { - "get" : { - "description" : "This is the JWKS uri of the API Gateway. It fetches all the public keys of APIGateway, which can be used by to validate the JWT generated by API Gateway. The response will be in the JWK format", - "operationId" : "JWKSUri", - "produces" : [ "application/json" ], - "parameters" : [ ], - "responses" : { - "200" : { - "description" : "This response indicates that the client is able to fetch the JWKS uri of the API Gateway.", - "examples" : { - "application/json" : "{\r\n \"keys\": [{\r\n \"kty\": \"RSA\",\r\n \"e\": \"AQAB\",\r\n \"use\": \"sig\",\r\n \"kid\": \"ssos\",\r\n \"alg\": \"RSA\",\r\n \"n\": \"oIFE3wNHbGNFYOX_Bc4Xp38atxOoGy6dfZRiykqBWWFX5UZ3Cyb_1sxvHyXUuwCqvL482gB8piaAyY1UVLZgCB9W6wUmHNR_ZADJFXchh_r51RyFTf7RG22YPQSoHaV0ei0A5A9q8cC7CfjqWH9dGfJ01kNJaXsNGlrySMga23r6NwENbIa8rUmKuSfPi5XpOmcXKcbZhNrgdMsu_0RIbjMk0wROtSV6bZHCx6SZABvdAybz2ZwBmgP6yuTNWW_wICByP1cZnLXCYC-sRkN-cDV7xtViOrbyBKI1SfFeEAVPvwxHngBQm1NCzRaRwPJ7ChOx1POdBW5wQsYjvhjTFQ\"\r\n }]\r\n}" - }, - "schema" : { - "$ref" : "#/definitions/JWKSResponse" - } - }, - "400" : { - "description" : "This status code indicates that the requested URI is not valid " - }, - "500" : { - "description" : "This response indicates that the server has encountered an error while fetching the JWKS uri of the API Gateway" - } - } - } - } - }, - "securityDefinitions" : { - "Basic" : { - "description" : "API Gateway Administrator", - "type" : "basic" - } - }, - "definitions" : { - "JWT" : { - "type" : "object", - "properties" : { - "jwt" : { - "type" : "string", - "description" : "Json Web Token (JWT) generated by APIGateway" - } - } - }, - "JWKSResponse" : { - "type" : "object" - } - } -} \ No newline at end of file From 7f9cc33dfb375f8112e501319d9b83b0d5944df3 Mon Sep 17 00:00:00 2001 From: Dhivakar Asokan <48990091+dhivakar-asokan@users.noreply.github.com> Date: Thu, 21 May 2020 20:30:28 +0530 Subject: [PATCH 10/22] Delete APIGatewaySearch.json --- apigatewayservices/APIGatewaySearch.json | 195 ----------------------- 1 file changed, 195 deletions(-) delete mode 100644 apigatewayservices/APIGatewaySearch.json diff --git a/apigatewayservices/APIGatewaySearch.json b/apigatewayservices/APIGatewaySearch.json deleted file mode 100644 index 6511483..0000000 --- a/apigatewayservices/APIGatewaySearch.json +++ /dev/null @@ -1,195 +0,0 @@ -{ - "swagger" : "2.0", - "info" : { - "description" : "The search API allows you to execute a search query in API Gateway and receive search results that match the search query. You can perform search across different objects such as API, Application, Alias, Assertions, Users and User Groups.", - "version" : "10.7", - "title" : "API Gateway Search Service" - }, - "host" : "localhost:5555", - "basePath" : "/rest/apigateway", - "schemes" : [ "http" ], - "consumes" : [ "application/json" ], - "produces" : [ "application/json" ], - "paths" : { - "/search" : { - "post" : { - "description" : "The search API allows you to execute a search query in API Gateway and get back search results that match the query. You can perform search across different objects such as API, Application, Alias, Assertions, Policies, Administrator Settings, Policy Action, Packages, Plans, Subscriptions, Users and User Groups. Following are the type of searches that does not require scope or fields. \n 1. Users - This type is used to get the list of users from IS. \n 2. User Groups - This type is used to get the list of user groups from IS. \n\n Following are the type of searches for which you can specify the scope and fields. \n 1. API - This type is used to search the APIs in API Gateway. \n 2. Application - This type is used to search the Applications created in API Gateway. \n 3. Alias - This type is used to search aliases created in API Gateway. \n 4. Assertions - This type is used to search custom assertions created in API Gateway. \n 5. Policy - This type is used to search policies in API Gateway. \n 6. Policy Action - This type is used to search policy actions in API Gateway. \n 7. Package - This type is used to search packages in API Gateway. \n 8. Plan - This type is used to search plans in API Gateway. \n 9. Administrator Setting - This type is used to search the administrator settings in API Gateway. \n 10. Subscription - This type is used to search subscriptions in API Gateway. \n \n For the above ten types, if a scope is specified, then the scope is applicable for all types regardless whether it is applicable for that or not. Also if the required fields are specified and it is not available in any other types, then the search result corresponds to that type does not have the fields. \n If from and size are specified then it skips first n records specified in from for all types and it fetches the number of records specified in size.\n\n\nexamples:\n\n1. Fetch All APIs contains run as substring\n\nPayload : { \"types\" : [\"api\"], \"scope\":[ { \"attributeName\" : \"apiName\", \"keyword\" : \".*run.*\" }] }\n\nThe above payload will fetch all APIs contains run as substring in API name. The response will contains APIs with some fields populated with default values. \n\n2. Fetch All APIs contains run as substring and specific set of fields in the response\n\nPayload : { \"types\" : [\"api\"], \"scope\":[ { \"attributeName\" : \"apiName\", \"keyword\" : \".*run.*\" }], \"responseFields\" : [\"apiName\", \"type\", \"isActive\", \"systemVersion\", \"policies\",\"publishedPortals\",\"apiVersion\",\"id\"]}\n\nTo fetch all fields, user can use \"*\" in responseFields. It will fetch all the fields in the response.\n\nPayload : { \"types\" : [\"api\"], \"scope\":[ { \"attributeName\" : \"apiName\", \"keyword\" : \".*run.*\" }], \"responseFields\" : [\"*\"]}\n\n\nThe above payload will fetch all APIs contains run as substring in API name and corresponding fields mentioned in responseFields section.\n\nThe responseFields can be identified from schema definition using below table for some of the main used types\n\nAsset type: API ,Swagger file: APIGatewayServiceManagement.json ,Definition: #/definitions/GatewayAPI\nAsset type: POLICY ,Swagger file: APIGatewayPolicyManagement.json ,Definition: #/definitions/Policy\nAsset type: POLICY_ACTION ,Swagger file: APIGatewayPolicyManagement.json ,Definition: #/definitions/PolicyAction\nAsset type: ALIAS ,Swagger file: APIGatewayAlias.json ,Definition: #/definitions/Alias\nAsset type: APPLICATION ,Swagger file:APIGatewayApplication.json ,Definition: #/definitions/Application\nAsset type: USERS ,Swagger file: APIGatewayUserManagementSwagger.json ,Definition: #/definitions/User\nAsset type: GROUPS ,Swagger file: APIGatewayUserManagementSwagger.json ,Definition: #/definitions/Group\nAsset type: ACCESSPROFILES ,Swagger file: APIGatewayUserManagementSwagger.json ,Definition: #/definitions/AccessProfile\nAsset type: API_DOCUMENT ,Swagger file: APIGatewayDocumentManagement.json ,Definition: #/definitions/Document\nAsset type: KEYSTORE ,Swagger file: APIGatewayAdministration.json ,Definition: #/definitions/KeyStore\nAsset type: TRUSTSTORE ,Swagger file: APIGatewayAdministration.json ,Definition: #/definitions/TrustStore\n\nFor other types user can use \"*\" in responseFields section to get all the fields.\n", - "operationId" : "searchByType", - "consumes" : [ "application/json" ], - "produces" : [ "application/json" ], - "parameters" : [ { - "in" : "body", - "name" : "body", - "description" : "Search Parameters to search for specific set of results on specified types", - "required" : true, - "schema" : { - "$ref" : "#/definitions/SearchContext" - }, - "x-examples" : { - "application/json" : "{\r\n\t\"types\": [\"user\",\r\n\t\"group\",\r\n\t\"api\",\r\n\t\"alias\",\r\n\t\"application\",\r\n\t\"policy\"],\r\n\t\"condition\": \"or\",\r\n\t\"scope\": [{\r\n\t\t\"attributeName\": \"apiName\",\r\n\t\t\"keyword\": \".*api.*\"\r\n\t},\r\n\t{\r\n\t\t\"attributeName\": \"names.value\",\r\n\t\t\"keyword\": \"Default Policy for API EMP\"\r\n\t},\r\n\t{\r\n\t\t\"attributeName\": \"name\",\r\n\t\t\"keyword\": \".*app.*\"\r\n\t},\r\n\t{\r\n\t\t\"attributeName\" : \"type\",\r\n\t\t\"keyword\" : \"simple\"\r\n\t},\r\n\t{\r\n\t\t\"attributeName\" : \"policyScope\",\r\n\t\t\"keyword\" : \"global\"\r\n\t}\r\n\t],\r\n\t\"responseFields\": [\"apiName\",\r\n\t\"id\",\r\n\t\"name\",\r\n\t\"owner\",\"policyScope\",\"names\"],\r\n\t\"from\": 0,\r\n\t\"size\": -1\r\n}" - } - } ], - "responses" : { - "200" : { - "description" : "This status code indicates that the search process is successful. The result is a map of type and object. Each type has it's respective search results mapped.", - "examples" : { - "application/json" : "{\r\n\t\"GROUP\": [\"API-Gateway-Administrators\",\r\n\t\"API-Gateway-Providers\",\r\n\t\"Administrators\",\r\n\t\"Anonymous\",\r\n\t\"Developers\",\r\n\t\"Everybody\",\r\n\t\"Replicators\"],\r\n\t\"POLICY\": [{\r\n\t\t\"id\": \"GlobalLogInvocationPolicy\",\r\n\t\t\"names\": [{\r\n\t\t\t\"value\": \"Transaction logging\",\r\n\t\t\t\"locale\": \"English\"\r\n\t\t}],\r\n\t\t\"policyEnforcements\": [],\r\n\t\t\"policyScope\": \"GLOBAL\",\r\n\t\t\"global\": false,\r\n\t\t\"active\": false,\r\n\t\t\"systemPolicy\": false\r\n\t},\r\n\t{\r\n\t\t\"id\": \"3808db1a-8577-41e5-af6b-dcdac470524c\",\r\n\t\t\"names\": [{\r\n\t\t\t\"value\": \"Transport Policy\",\r\n\t\t\t\"locale\": \"English\"\r\n\t\t}],\r\n\t\t\"policyEnforcements\": [],\r\n\t\t\"policyScope\": \"GLOBAL\",\r\n\t\t\"global\": false,\r\n\t\t\"active\": false,\r\n\t\t\"systemPolicy\": false\r\n\t}],\r\n\t\"ALIAS\": [{\r\n\t\t\"name\": \"Myname\",\r\n\t\t\"value\": \"API Gateway N\"\r\n\t}],\r\n\t\"APPLICATION\": [{\r\n\t\t\"name\": \"Application\",\r\n\t\t\"owner\": \"Administrator\",\r\n\t\t\"identifiers\": [],\r\n\t\t\"siteURLs\": [],\r\n\t\t\"subscription\": false\r\n\t}],\r\n\t\"API\": [{\r\n\t\t\"apiName\": \"API Gateway\",\r\n\t\t\"isActive\": false,\r\n\t\t\"policies\": [],\r\n\t\t\"publishedPortals\": [],\r\n\t\t\"systemVersion\": 1,\r\n\t\t\"id\": \"1ac48246-80eb-44c8-8901-564e025dbbde\"\r\n\t},\r\n\t{\r\n\t\t\"apiName\": \"API Gateway Policy Management\",\r\n\t\t\"isActive\": false,\r\n\t\t\"owner\": \"Administrator\",\r\n\t\t\"policies\": [],\r\n\t\t\"publishedPortals\": [],\r\n\t\t\"systemVersion\": 1,\r\n\t\t\"id\": \"7b2166a6-cf3c-4f72-a04b-72c110c302d2\"\r\n\t}],\r\n\t\"USER\": [\"Administrator\",\r\n\t\"Default\",\r\n\t\"Developer\",\r\n\t\"Replicator\",\r\n\t\"apigateway\"]\r\n}" - }, - "schema" : { - "type" : "object", - "additionalProperties" : { - "type" : "object" - } - } - }, - "401" : { - "description" : "This status code indicates that either the user did not provide any user credentials or user does not have API Gateway Administrator or API Gateway provider access rights for search." - }, - "400" : { - "description" : "This status code indicates either error occurred during the search process or user has missed some mandatory field that is required to do the search. The examples shows user missed a mandatory field \"condition\" in request body", - "examples" : { - "application/json" : "{\r\n \"errorDetails\": \" Mandatory field condition is missing in the input request body\"\r\n}" - } - }, - "500" : { - "description" : "This status code indicates that the search process is not successful and has failed due to some internal server error." - } - }, - "security" : [ { - "Basic" : [ ] - } ] - } - }, - "/search/_count" : { - "post" : { - "description" : "This REST call is intent to get the total number of records for the specified scope and types. If the scope is not specified it returns total number of assets for the specified type. Both /search and /search/_count shares the same payload. Except types,scope and condition other attributes are not considered during the REST API call.", - "operationId" : "countByType", - "consumes" : [ "application/json" ], - "produces" : [ "application/json" ], - "parameters" : [ { - "in" : "body", - "name" : "body", - "description" : "Search Parameters to search for specific set of results on specified types", - "required" : true, - "schema" : { - "$ref" : "#/definitions/SearchContext" - }, - "x-examples" : { - "application/json" : "{\r\n\t\"types\": [\"user\",\r\n\t\"group\",\r\n\t\"api\",\r\n\t\"alias\",\r\n\t\"application\",\r\n\t\"policy\"],\r\n\t\"condition\": \"or\",\r\n\t\"scope\": [{\r\n\t\t\"attributeName\": \"apiName\",\r\n\t\t\"keyword\": \".*api.*\"\r\n\t},\r\n\t{\r\n\t\t\"attributeName\": \"names.value\",\r\n\t\t\"keyword\": \"Default Policy for API EMP\"\r\n\t},\r\n\t{\r\n\t\t\"attributeName\": \"name\",\r\n\t\t\"keyword\": \".*app.*\"\r\n\t},\r\n\t{\r\n\t\t\"attributeName\" : \"type\",\r\n\t\t\"keyword\" : \"simple\"\r\n\t},\r\n\t{\r\n\t\t\"attributeName\" : \"policyScope\",\r\n\t\t\"keyword\" : \"global\"\r\n\t}\r\n\t]}" - } - } ], - "responses" : { - "200" : { - "description" : "This status code indicates the count for the specified scope is success. The result will be a map of type and count for each type.", - "examples" : { - "application/json" : "{\r\n\t\"group\":12,\r\n\t\"policy\":13,\r\n\t\"user\":4,\r\n\t\"api\":5\r\n}" - }, - "schema" : { - "type" : "object", - "additionalProperties" : { - "type" : "integer", - "format" : "int32" - } - } - }, - "401" : { - "description" : "This status code indicates that the user did not provide any user credential or user does not have API Gateway Administrator or API Gateway provider access for search." - }, - "400" : { - "description" : "This status code indicates either error occurred during the search process or user has missed some mandatory field that is required to do the search. The examples shows user missed a mandatory field \"condition\" in request body", - "examples" : { - "application/json" : "{\r\n \"errorDetails\": \" Mandatory field condition is missing in the input request body\"\r\n}" - } - }, - "500" : { - "description" : "This status code indicates the search process is not success and failed due to some internal server error." - } - }, - "security" : [ { - "Basic" : [ ] - } ] - } - } - }, - "securityDefinitions" : { - "Basic" : { - "description" : "API Gateway Administrator and API Gateway provider", - "type" : "basic" - } - }, - "definitions" : { - "SearchContext" : { - "type" : "object", - "required" : [ "types" ], - "properties" : { - "types" : { - "type" : "string", - "description" : "List of allowed types that can be searched across API Gateway.", - "enum" : [ "USER", "GROUP", "USERS", "GROUPS", "ACCESSPROFILES", "LDAPGROUPS", "CDSGROUPS", "ASSERTION", "APPLICATION", "API", "ALIAS", "POLICY", "POLICY_ACTION", "PLAN", "PACKAGE", "ADMINISTRATOR_SETTING", "PORTAL_GATEWAY", "OAUTH2_SCOPE_DATA", "SUBSCRIPTION", "API_DOCUMENT", "APPROVAL_CONFIGURATION", "OUTBOUND_PROXY", "PROXY_BYPASS", "URL_ALIAS", "KEYSTORE", "TRUSTSTORE", "KERBEROS_SETTING", "JNDI_PROVIDER_ALIAS", "JMS_CONNECTION_ALIAS", "JMS_TRIGGER", "WEB_SERVICE_ENDPOINT_ALIAS", "ACCESS_CONTROL_LIST", "RULE", "MICROGATEWAY_GROUPS" ] - }, - "scope" : { - "$ref" : "#/definitions/SearchField" - }, - "condition" : { - "type" : "string", - "description" : "Condition between scope specified. The value can be either 'and' or 'or'", - "enum" : [ "and", "or" ] - }, - "responseFields" : { - "type" : "array", - "description" : "List of fields to be fetched for the specified types.", - "items" : { - "type" : "string" - } - }, - "from" : { - "type" : "integer", - "format" : "int32", - "description" : "The starting index of the record to be fetched. Default value is 0 which fetches from the start. The index is applied to each type separately. For each type the first n records are skipped as specified in from field. If the value specified is less than zero then the default value is taken for fetching records" - }, - "size" : { - "type" : "integer", - "format" : "int32", - "description" : "Number of records to be fetched. Default value is -1, which fetches all the records. The size is applied to each type separately. Each type has the records less than or equal to the size specified. If the value specified is less than zero then the default value is taken for fetching records" - }, - "sortByField" : { - "type" : "string", - "description" : "Field name on which the sorting needs to be applied." - }, - "sortOrder" : { - "type" : "string", - "description" : "Sort order for the records", - "enum" : [ "ASC", "DESC" ] - }, - "teamFilter" : { - "type" : "array", - "description" : "This filter is used to specify list teams to apply on the search results.", - "items" : { - "type" : "string" - } - } - }, - "description" : "This defines the request structure to search across API Gateway" - }, - "SearchField" : { - "type" : "object", - "properties" : { - "attributeName" : { - "type" : "string", - "description" : "Field name to be searched for the list of types specified" - }, - "keyword" : { - "type" : "string", - "description" : "Value of the corresponding field to be matched. User can use regular expression to specify the multiple values for single attributeName. For example to find \n 1. apiDescription contains \"weather\" or equals \"country\" , we can use {\"attributeName\" : \"apiDescription\", \"keyword\" : \".*weather.*|country\"}. \n 2. apiName starts with weather - {\"attributeName\" : \"apiName\", \"keyword\" : \"weather.*\"}. \n 3. api type is REST or SOAP - {\"attributeName\" : \"type\", \"keyword\" : \"REST|SOAP\"}." - }, - "orTokenKey" : { - "type" : "boolean" - }, - "rawFieldKey" : { - "type" : "string" - } - }, - "description" : "A scope is filtering criteria for the list of types specified in search.It is a key/value pair. key is the field name on which the search is being done and value contains the search string to be searched on the field specified.To get the field name for a type, user needs to access the corresponding API Gateway REST service to know about the fields available for a particular type. " - } - } -} \ No newline at end of file From 5c632f9dadb26a2f78be95f89049ceda3259c93d Mon Sep 17 00:00:00 2001 From: Dhivakar Asokan <48990091+dhivakar-asokan@users.noreply.github.com> Date: Thu, 21 May 2020 20:30:31 +0530 Subject: [PATCH 11/22] Delete APIGatewayServerInfoSwagger.json --- .../APIGatewayServerInfoSwagger.json | 318 ------------------ 1 file changed, 318 deletions(-) delete mode 100644 apigatewayservices/APIGatewayServerInfoSwagger.json diff --git a/apigatewayservices/APIGatewayServerInfoSwagger.json b/apigatewayservices/APIGatewayServerInfoSwagger.json deleted file mode 100644 index 2f4ccd4..0000000 --- a/apigatewayservices/APIGatewayServerInfoSwagger.json +++ /dev/null @@ -1,318 +0,0 @@ -{ - "swagger" : "2.0", - "info" : { - "description" : "This swagger doc contains API Definition of API gateway ServerInfo.", - "version" : "10.7", - "title" : "API Gateway Server Information" - }, - "host" : "localhost:5555", - "basePath" : "/rest/apigateway", - "schemes" : [ "http" ], - "consumes" : [ "plain/text" ], - "produces" : [ "application/json" ], - "paths" : { - "/is/serverinfo" : { - "get" : { - "operationId" : "Server Information", - "produces" : [ "application/json" ], - "parameters" : [ ], - "responses" : { - "200" : { - "description" : "Returns API Gateway server Information ", - "schema" : { - "$ref" : "#/definitions/ServerInfo" - } - } - } - } - } - }, - "securityDefinitions" : { - "Basic" : { - "description" : "API Gateway Administrator and API Gateway provider", - "type" : "basic" - } - }, - "definitions" : { - "APIGateway" : { - "type" : "object", - "properties" : { - "Policy Management - Threat Protection" : { - "type" : "string" - }, - "Policy Management - Gateway" : { - "type" : "string" - }, - "Application Management" : { - "type" : "string" - }, - "APIManagement" : { - "type" : "string" - } - } - }, - "IntegrationServer" : { - "type" : "object", - "properties" : { - "Product Code" : { - "type" : "string" - }, - "Product Version" : { - "type" : "string" - }, - "Concurrent Sessions" : { - "type" : "string" - }, - "Clustering" : { - "type" : "string" - }, - "Publish / Subscribe" : { - "type" : "string" - }, - "Adapter Runtime" : { - "type" : "string" - }, - "Remote Invoke" : { - "type" : "string" - }, - "Guaranteed Delivery" : { - "type" : "string" - }, - "Security Auditing" : { - "type" : "string" - }, - "Distributed Cache" : { - "type" : "string" - }, - "Enterprise Gateway" : { - "type" : "string" - } - } - }, - "LicenseDetail" : { - "type" : "object", - "properties" : { - "Sales Information" : { - "$ref" : "#/definitions/SalesInformation" - }, - "productInformation" : { - "$ref" : "#/definitions/ProductInformation" - }, - "integrationServer" : { - "$ref" : "#/definitions/IntegrationServer" - }, - "licenseInformation" : { - "$ref" : "#/definitions/LicenseInformation" - }, - "API Gateway" : { - "$ref" : "#/definitions/APIGateway" - } - } - }, - "LicenseInformation" : { - "type" : "object", - "properties" : { - "Price Unit" : { - "type" : "string" - }, - "Price Quantity" : { - "type" : "string" - }, - "TypeOfInstallation" : { - "type" : "string" - }, - "LicenseType" : { - "type" : "string" - }, - "ExtendedRights" : { - "type" : "string" - }, - "LicenseVersion" : { - "type" : "string" - }, - "Metering" : { - "type" : "string" - } - } - }, - "ProductInformation" : { - "type" : "object", - "properties" : { - "Expiration Date" : { - "type" : "string" - }, - "Operating System" : { - "type" : "string" - }, - "Product Code" : { - "type" : "string" - }, - "Product ID" : { - "type" : "string" - }, - "Product Name" : { - "type" : "string" - }, - "Product Version" : { - "type" : "string" - }, - "Usage" : { - "type" : "string" - }, - "RenewalDate" : { - "type" : "string" - }, - "HigherLevPosNr" : { - "type" : "string" - }, - "HigherLevProdCode" : { - "type" : "string" - }, - "HigherLevProdName" : { - "type" : "string" - } - } - }, - "SalesInformation" : { - "type" : "object", - "properties" : { - "Serial Number" : { - "type" : "string" - }, - "License Key" : { - "type" : "string" - }, - "Customer ID" : { - "type" : "string" - }, - "Customer Name" : { - "type" : "string" - }, - "ContractDetails" : { - "type" : "string" - }, - "ContractPosNumber" : { - "type" : "string" - }, - "License Type Details" : { - "type" : "string" - }, - "AutoCallHome" : { - "type" : "string" - } - } - }, - "ServerInfo" : { - "type" : "object", - "properties" : { - "systemInfo" : { - "$ref" : "#/definitions/SystemInfo" - }, - "LicenseDetails" : { - "type" : "array", - "items" : { - "$ref" : "#/definitions/LicenseDetail" - } - }, - "package" : { - "type" : "string" - }, - "services" : { - "type" : "array", - "items" : { - "type" : "string" - } - }, - "allSvcsMinusStarts" : { - "type" : "array", - "items" : { - "type" : "string" - } - }, - "allSvcsMinusShuts" : { - "type" : "array", - "items" : { - "type" : "string" - } - }, - "loadok" : { - "type" : "string" - }, - "loaderr" : { - "type" : "string" - }, - "loadwarning" : { - "type" : "string" - }, - "startupServices" : { - "type" : "array", - "items" : { - "type" : "string" - } - }, - "shutdownServices" : { - "type" : "array", - "items" : { - "type" : "string" - } - }, - "version" : { - "type" : "string" - }, - "build" : { - "type" : "string" - }, - "description" : { - "type" : "string" - }, - "patch_nums" : { - "type" : "object" - }, - "jvm_version" : { - "type" : "string" - }, - "publisher" : { - "type" : "string" - }, - "time" : { - "type" : "object" - }, - "listACL" : { - "type" : "string" - }, - "message" : { - "type" : "string" - }, - "code" : { - "type" : "string" - } - } - }, - "SystemInfo" : { - "type" : "object", - "properties" : { - "CPU.type" : { - "type" : "string" - }, - "Hostname" : { - "type" : "string" - }, - "OS.Service.Pack" : { - "type" : "string" - }, - "HW.memory[GB]" : { - "type" : "string" - }, - "OS.Name" : { - "type" : "string" - }, - "OS.Release" : { - "type" : "string" - }, - "CPU.cores" : { - "type" : "string" - } - } - } - } -} \ No newline at end of file From fd51d203f748e8d19e1885f760b85d291d1bd190 Mon Sep 17 00:00:00 2001 From: Dhivakar Asokan <48990091+dhivakar-asokan@users.noreply.github.com> Date: Thu, 21 May 2020 20:30:35 +0530 Subject: [PATCH 12/22] Delete APIGatewayServiceManagement.json --- .../APIGatewayServiceManagement.json | 5244 ----------------- 1 file changed, 5244 deletions(-) delete mode 100644 apigatewayservices/APIGatewayServiceManagement.json diff --git a/apigatewayservices/APIGatewayServiceManagement.json b/apigatewayservices/APIGatewayServiceManagement.json deleted file mode 100644 index 16c22b3..0000000 --- a/apigatewayservices/APIGatewayServiceManagement.json +++ /dev/null @@ -1,5244 +0,0 @@ -{ - "swagger" : "2.0", - "info" : { - "description" : "API Gateway Service Management Service allows you to manage the APIs in the API Gateway. Any user with the 'Manage APIs' functional privilege can manage the APIs in the API Gateway. By default, the users who are part of either API-Gateway-Providers or API-Gateway-Administrators groups will have this privilege.\n\nAPI Gateway supports four types of APIs - REST APIs, SOAP APIs, WebSocket APIs and OData APIs. REST APIs can be created by providing the swagger (file/url), openAPI (file/url), raml (file/url) or can be created from scratch. SOAP APIs can be created using the WSDL (file/url). If the API definitions has reference schemas, then an archive containing all the definitions can be provided as an input. WebSocket APIs can be created from scratch. OData APIs can be created using their service document or metadata document url.\n\nThis service provides you with the options to create, update, read and delete of all the above API types.\n\nAn API can either be in an Active or an InActive state. An Active state indicates that the API is available for consumers. The users can use this service to activate or deactivate the API. Post activation, API Gateway generates 'Gateway Endpoints' which can be used by the API consumers to access the API. Generally API consumers use their applications to consume the APIs.\n\nThis service can also be used to manage the API Scopes. An API Scope is a collection of resources or operations in the API. Users can create multiple scopes for a single API.\n\nOnce the API is created, users can enforce the access restrictions and other rules on the API by add the policies to the API. Policies can be attached to REST, SOAP and OData APIs. Refer to the Policy Management API documentation for more details on the policies. Refer to the Document Management API documentation for more details on attaching documents to an API.\n\nThis service can also be used to publish/unpublish the APIs to/from a service registry. An API in an active state can be registered (published) to one or more service registries.", - "version" : "10.7", - "title" : "API Gateway Service Management Service" - }, - "host" : "localhost:5555", - "basePath" : "/rest/apigateway", - "schemes" : [ "http" ], - "consumes" : [ "application/json" ], - "produces" : [ "application/json" ], - "paths" : { - "/apis" : { - "get" : { - "description" : "Get all APIs or subset of APIs", - "operationId" : "getAPIs", - "produces" : [ "application/json" ], - "parameters" : [ { - "name" : "apiIds", - "in" : "query", - "description" : "API Ids for the API to be retrieved", - "required" : false, - "type" : "string", - "x-example" : "353bd366-47d4-4703-aecf-9cb40cdcc864,353bd366-47d4-4703-aecf-9cb40cdcc345" - }, { - "name" : "from", - "in" : "query", - "description" : "Starting index from the list of APIs to be retrieved", - "required" : false, - "type" : "integer" - }, { - "name" : "size", - "in" : "query", - "description" : "Number of APIs to be retrieved", - "required" : false, - "type" : "integer" - } ], - "responses" : { - "200" : { - "description" : "Returns the list of all APIs", - "examples" : { - "application/json" : "{\r\n \"apiResponse\": [\r\n {\r\n \"api\": {\r\n \"apiName\": \"ChuckNorrisAPI\",\r\n \"apiVersion\": \"v2\",\r\n \"apiDescription\": \"Chuck Norris facts are satirical factoids about martial artist and actor Chuck Norris that have become an Internet phenomenon and as a result have become widespread in popular culture. The 'facts' are normally absurd hyperbolic claims about Norris' toughness, attitude, virility, sophistication, and masculinity.\",\r\n \"isActive\": false,\r\n \"type\": \"REST\",\r\n \"publishedPortals\": [],\r\n \"systemVersion\": 2,\r\n \"id\": \"46df4227-a100-486c-9580-0bf388ec6ec7\"\r\n },\r\n \"responseStatus\": \"SUCCESS\"\r\n },\r\n {\r\n \"api\": {\r\n \"apiName\": \"ChuckNorrisAPI\",\r\n \"apiVersion\": \"1.0\",\r\n \"apiDescription\": \"Chuck Norris facts are satirical factoids about martial artist and actor Chuck Norris that have become an Internet phenomenon and as a result have become widespread in popular culture. The 'facts' are normally absurd hyperbolic claims about Norris' toughness, attitude, virility, sophistication, and masculinity.\",\r\n \"isActive\": false,\r\n \"type\": \"REST\",\r\n \"publishedPortals\": [],\r\n \"systemVersion\": 1,\r\n \"id\": \"25fb937a-8360-41ab-8be5-987b14fe631d\"\r\n },\r\n \"responseStatus\": \"SUCCESS\",\r\n \"teams\": [\r\n {\r\n \"id\": \"Administrators\",\r\n \"name\": \"Administrators\",\r\n \"canDelete\": \"false\"\r\n },\r\n {\r\n \"id\": \"Default\",\r\n \"name\": \"Default\",\r\n \"canDelete\": \"true\"\r\n }\r\n ]\r\n }\r\n ]\r\n}" - }, - "schema" : { - "type" : "array", - "items" : { - "$ref" : "#/definitions/APIResponseDelete" - } - } - }, - "401" : { - "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." - } - }, - "security" : [ { - "Basic" : [ ] - } ] - }, - "post" : { - "description" : "This REST operation is used to create an API by importing a file, url or from scratch", - "operationId" : "createAPI", - "consumes" : [ "application/json", "multipart/form-data" ], - "produces" : [ "application/json" ], - "parameters" : [ { - "name" : "file", - "in" : "formData", - "description" : "Input swagger / raml / wsdl file to be imported", - "required" : true, - "type" : "file", - "x-example" : "petstore.json" - }, { - "name" : "apiName", - "in" : "formData", - "description" : "Name of the API", - "required" : true, - "type" : "string", - "x-example" : "Swagger Petstore" - }, { - "name" : "apiDescription", - "in" : "formData", - "description" : "Description of the API", - "required" : false, - "type" : "string", - "x-example" : "This is a sample server Petstore server" - }, { - "name" : "apiVersion", - "in" : "formData", - "description" : "Version of the API", - "required" : false, - "type" : "string", - "x-example" : "V1" - }, { - "name" : "type", - "in" : "formData", - "description" : "Input file type", - "required" : true, - "type" : "string", - "x-example" : "swagger", - "enum" : [ "swagger", "raml", "wsdl", "openapi" ] - }, { - "name" : "rootFileName", - "in" : "formData", - "description" : "Name of the main file in the zip. Required only when the input file is zip format", - "required" : false, - "type" : "string", - "x-example" : "mainFile.wsdl" - }, { - "in" : "body", - "name" : "body", - "description" : "API request payload", - "required" : true, - "schema" : { - "$ref" : "#/definitions/InputAPI" - }, - "x-examples" : { - "application/json" : "{\r\n \"apiDefinition\": {\r\n \"type\": \"rest\",\r\n \"info\": {\r\n \"description\": \"Chuck Norris facts are satirical factoids about martial artist and actor Chuck Norris that have become an Internet phenomenon and as a result have become widespread in popular culture. The 'facts' are normally absurd hyperbolic claims about Norris' toughness, attitude, virility, sophistication, and masculinity.\",\r\n \"version\": \"1.0\",\r\n \"title\": \"ChuckNorrisAPI\"\r\n },\r\n \"host\": \"api.chucknorris.io\",\r\n \"basePath\": \"/jokes\",\r\n \"schemes\": [\r\n \"https\"\r\n ],\r\n \"security\": [],\r\n \"paths\": {\r\n \"/random\": {\r\n \"get\": {\r\n \"summary\": \"GET\",\r\n \"description\": \"\",\r\n \"operationId\": \"GET\",\r\n \"produces\": [\r\n \"application/json\"\r\n ],\r\n \"responses\": {},\r\n \"enabled\": true\r\n },\r\n \"enabled\": true\r\n }\r\n },\r\n \"securityDefinitions\": {},\r\n \"definitions\": {},\r\n \"baseUriParameters\": [],\r\n \"externalDocs\": [],\r\n \"servers\": [\r\n {\r\n \"url\": \"https://api.chucknorris.io/jokes\"\r\n }\r\n ],\r\n \"components\": {\r\n \"schemas\": {}\r\n }\r\n },\r\n \"nativeEndpoint\": [\r\n {\r\n \"passSecurityHeaders\": true,\r\n \"uri\": \"https://api.chucknorris.io/jokes\",\r\n \"connectionTimeoutDuration\": 0,\r\n \"alias\": false\r\n }\r\n ],\r\n \"apiName\": \"ChuckNorris\",\r\n \"apiVersion\": \"1.0\",\r\n \"apiDescription\": \"Chuck Norris facts are satirical factoids about martial artist and actor Chuck Norris that have become an Internet phenomenon and as a result have become widespread in popular culture. The 'facts' are normally absurd hyperbolic claims about Norris' toughness, attitude, virility, sophistication, and masculinity.\",\r\n \"maturityState\": \"Beta\",\r\n \"isActive\": false,\r\n \"type\": \"REST\",\r\n \"owner\": \"Administrator\",\r\n \"policies\": [\r\n \"08afbfa9-78e1-4c23-bb19-c0012464047e\"\r\n ],\r\n \"scopes\": [],\r\n \"publishedPortals\": [],\r\n \"creationDate\": \"2018-09-03 11:56:21 GMT\",\r\n \"systemVersion\": 1,\r\n \"id\": \"badc18e6-446f-4aa3-96cd-33e46bd40fb5\",\r\n \r\n\t\"teams\": [\r\n\t\t{\r\n\t\t\t\"id\": \"Default\"\r\n\t\t}\r\n\t]\r\n }" - } - } ], - "responses" : { - "200" : { - "description" : "Returns the created API object", - "examples" : { - "application/json" : "{\r\n \"apiResponse\": {\r\n \"api\": {\r\n \"apiDefinition\": {\r\n \"type\": \"rest\",\r\n \"info\": {\r\n \"description\": \"Chuck Norris facts are satirical factoids about martial artist and actor Chuck Norris that have become an Internet phenomenon and as a result have become widespread in popular culture. The 'facts' are normally absurd hyperbolic claims about Norris' toughness, attitude, virility, sophistication, and masculinity.\",\r\n \"version\": \"1.0\",\r\n \"title\": \"ChuckNorrisAPI\"\r\n },\r\n \"host\": \"api.chucknorris.io\",\r\n \"basePath\": \"/jokes\",\r\n \"schemes\": [\r\n \"https\"\r\n ],\r\n \"security\": [],\r\n \"paths\": {\r\n \"/random\": {\r\n \"get\": {\r\n \"summary\": \"GET\",\r\n \"description\": \"\",\r\n \"operationId\": \"GET\",\r\n \"produces\": [\r\n \"application/json\"\r\n ],\r\n \"responses\": {},\r\n \"enabled\": true\r\n },\r\n \"enabled\": true\r\n }\r\n },\r\n \"securityDefinitions\": {},\r\n \"definitions\": {},\r\n \"baseUriParameters\": [],\r\n \"externalDocs\": [],\r\n \"servers\": [\r\n {\r\n \"url\": \"https://api.chucknorris.io/jokes\"\r\n }\r\n ],\r\n \"components\": {\r\n \"schemas\": {}\r\n }\r\n },\r\n \"nativeEndpoint\": [\r\n {\r\n \"passSecurityHeaders\": true,\r\n \"uri\": \"https://api.chucknorris.io/jokes\",\r\n \"connectionTimeoutDuration\": 0,\r\n \"alias\": false\r\n }\r\n ],\r\n \"apiName\": \"ChuckNorris\",\r\n \"apiVersion\": \"1.0\",\r\n \"apiDescription\": \"Chuck Norris facts are satirical factoids about martial artist and actor Chuck Norris that have become an Internet phenomenon and as a result have become widespread in popular culture. The 'facts' are normally absurd hyperbolic claims about Norris' toughness, attitude, virility, sophistication, and masculinity.\",\r\n \"maturityState\": \"Beta\",\r\n \"isActive\": false,\r\n \"type\": \"REST\",\r\n \"owner\": \"Administrator\",\r\n \"policies\": [\r\n \"08afbfa9-78e1-4c23-bb19-c0012464047e\"\r\n ],\r\n \"scopes\": [],\r\n \"publishedPortals\": [],\r\n \"creationDate\": \"2018-09-03 11:56:21 GMT\",\r\n \"systemVersion\": 1,\r\n \"id\": \"badc18e6-446f-4aa3-96cd-33e46bd40fb5\"\r\n },\r\n \"responseStatus\": \"SUCCESS\",\r\n \"versions\": [\r\n {\r\n \"versionNumber\": \"1.0\",\r\n \"apiId\": \"badc18e6-446f-4aa3-96cd-33e46bd40fb5\"\r\n }\r\n ],\r\n \"teams\": [\r\n {\r\n \"id\": \"Administrators\",\r\n \"name\": \"Administrators\",\r\n \"canDelete\": \"false\"\r\n },\r\n {\r\n \"id\": \"Default\",\r\n \"name\": \"Default\",\r\n \"canDelete\": \"true\"\r\n }\r\n ] }\r\n}" - }, - "schema" : { - "$ref" : "#/definitions/APIResponseCreate" - } - }, - "400" : { - "description" : "This status code shows when the user missed the mandatory fields like type, file/url/apiDefinition in the request or provide a invalid request body" - }, - "401" : { - "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." - } - }, - "security" : [ { - "Basic" : [ ] - } ] - }, - "delete" : { - "description" : "Delete the inactive APIs", - "operationId" : "deleteAPIs", - "produces" : [ "application/json" ], - "parameters" : [ { - "name" : "apiIds", - "in" : "query", - "description" : "API Ids for the APIs to be deleted. Multiple API ids combined by comma", - "required" : true, - "type" : "string", - "x-example" : "353bd366-47d4-4703-aecf-9cb40cdcc864,353bd366-47d4-4703-aecf-9cb40cdcc854" - }, { - "name" : "forceDelete", - "in" : "query", - "description" : "Flag for force delete. Required when API is associated with some applications", - "required" : false, - "type" : "boolean", - "default" : true, - "x-example" : true - } ], - "responses" : { - "200" : { - "description" : "Returns the apiId along with the error when unsuccessful", - "schema" : { - "type" : "array", - "items" : { - "$ref" : "#/definitions/APIResponseDelete" - } - } - }, - "400" : { - "description" : "This response code returns when the mandatory parameter apiIds is missing in the query parameter" - }, - "401" : { - "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." - }, - "204" : { - "description" : "Success" - } - }, - "security" : [ { - "Basic" : [ ] - } ] - } - }, - "/apis/{apiId}/versions" : { - "get" : { - "description" : "Retrieve all the versions of the API", - "operationId" : "getVersions", - "produces" : [ "application/json" ], - "parameters" : [ { - "name" : "apiId", - "in" : "path", - "description" : "API Id for the API to retrieve the versions", - "required" : true, - "type" : "string", - "x-example" : "353bd366-47d4-4703-aecf-9cb40cdcc864" - } ], - "responses" : { - "200" : { - "description" : "Returns the API versions", - "examples" : { - "application/json" : "{\r\n \"apiResponse\": {\r\n \"api\": {\r\n \"apiDefinition\": {\r\n \"type\": \"rest\",\r\n \"info\": {\r\n \"description\": \"Chuck Norris facts are satirical factoids about martial artist and actor Chuck Norris that have become an Internet phenomenon and as a result have become widespread in popular culture. The 'facts' are normally absurd hyperbolic claims about Norris' toughness, attitude, virility, sophistication, and masculinity.\",\r\n \"version\": \"1.0\",\r\n \"title\": \"ChuckNorrisAPI\"\r\n },\r\n \"host\": \"api.chucknorris.io\",\r\n \"basePath\": \"/jokes\",\r\n \"schemes\": [\r\n \"https\"\r\n ],\r\n \"security\": [],\r\n \"paths\": {\r\n \"/random\": {\r\n \"get\": {\r\n \"summary\": \"GET\",\r\n \"description\": \"\",\r\n \"operationId\": \"GET\",\r\n \"produces\": [\r\n \"application/json\"\r\n ],\r\n \"responses\": {},\r\n \"enabled\": true\r\n },\r\n \"enabled\": true\r\n }\r\n },\r\n \"securityDefinitions\": {},\r\n \"definitions\": {},\r\n \"baseUriParameters\": [],\r\n \"externalDocs\": [],\r\n \"servers\": [\r\n {\r\n \"url\": \"https://api.chucknorris.io/jokes\"\r\n }\r\n ],\r\n \"components\": {\r\n \"schemas\": {}\r\n }\r\n },\r\n \"nativeEndpoint\": [\r\n {\r\n \"passSecurityHeaders\": true,\r\n \"uri\": \"https://api.chucknorris.io/jokes\",\r\n \"connectionTimeoutDuration\": 0,\r\n \"alias\": false\r\n }\r\n ],\r\n \"apiName\": \"ChuckNorris\",\r\n \"apiVersion\": \"1.0\",\r\n \"apiDescription\": \"Chuck Norris facts are satirical factoids about martial artist and actor Chuck Norris that have become an Internet phenomenon and as a result have become widespread in popular culture. The 'facts' are normally absurd hyperbolic claims about Norris' toughness, attitude, virility, sophistication, and masculinity.\",\r\n \"maturityState\": \"Beta\",\r\n \"isActive\": false,\r\n \"type\": \"REST\",\r\n \"owner\": \"Administrator\",\r\n \"policies\": [\r\n \"08afbfa9-78e1-4c23-bb19-c0012464047e\"\r\n ],\r\n \"scopes\": [],\r\n \"publishedPortals\": [],\r\n \"creationDate\": \"2018-09-03 11:56:21 GMT\",\r\n \"systemVersion\": 1,\r\n \"id\": \"badc18e6-446f-4aa3-96cd-33e46bd40fb5\"\r\n },\r\n \"responseStatus\": \"SUCCESS\",\r\n \"versions\": [\r\n {\r\n \"versionNumber\": \"1.0\",\r\n \"apiId\": \"badc18e6-446f-4aa3-96cd-33e46bd40fb5\"\r\n }\r\n ]\r\n }\r\n}" - }, - "schema" : { - "$ref" : "#/definitions/APIResponseDelete" - } - }, - "404" : { - "description" : "This status code indicates that the apiId specified is not found in the API Gateway" - }, - "401" : { - "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." - } - }, - "security" : [ { - "Basic" : [ ] - } ] - }, - "post" : { - "description" : "Create a new version of an API and retain applications if required", - "operationId" : "createVersion", - "consumes" : [ "application/json" ], - "produces" : [ "application/json" ], - "parameters" : [ { - "name" : "apiId", - "in" : "path", - "description" : "API Id for the API to be versioned", - "required" : true, - "type" : "string", - "x-example" : "353bd366-47d4-4703-aecf-9cb40cdcc864" - }, { - "in" : "body", - "name" : "body", - "description" : "Create version request payload", - "required" : true, - "schema" : { - "$ref" : "#/definitions/InputVersion" - }, - "x-examples" : { - "application/json" : "{\r\n\t\"newApiVersion\" : \"v2\",\r\n\t\"retainApplications\" : true\r\n}" - } - } ], - "responses" : { - "200" : { - "description" : "Return the newly created version of the API", - "examples" : { - "application/json" : "{\r\n \"apiResponse\": {\r\n \"api\": {\r\n \"apiDefinition\": {\r\n \"type\": \"rest\",\r\n \"info\": {\r\n \"description\": \"Chuck Norris facts are satirical factoids about martial artist and actor Chuck Norris that have become an Internet phenomenon and as a result have become widespread in popular culture. The 'facts' are normally absurd hyperbolic claims about Norris' toughness, attitude, virility, sophistication, and masculinity.\",\r\n \"version\": \"1.0\",\r\n \"title\": \"ChuckNorrisAPI\"\r\n },\r\n \"host\": \"api.chucknorris.io\",\r\n \"basePath\": \"/jokes\",\r\n \"schemes\": [\r\n \"https\"\r\n ],\r\n \"security\": [],\r\n \"paths\": {\r\n \"/random\": {\r\n \"get\": {\r\n \"summary\": \"GET\",\r\n \"description\": \"\",\r\n \"operationId\": \"GET\",\r\n \"produces\": [\r\n \"application/json\"\r\n ],\r\n \"responses\": {},\r\n \"enabled\": true\r\n },\r\n \"enabled\": true\r\n }\r\n },\r\n \"securityDefinitions\": {},\r\n \"definitions\": {},\r\n \"baseUriParameters\": [],\r\n \"externalDocs\": [],\r\n \"servers\": [\r\n {\r\n \"url\": \"https://api.chucknorris.io/jokes\"\r\n }\r\n ],\r\n \"components\": {\r\n \"schemas\": {}\r\n }\r\n },\r\n \"nativeEndpoint\": [\r\n {\r\n \"passSecurityHeaders\": true,\r\n \"uri\": \"https://api.chucknorris.io/jokes\",\r\n \"connectionTimeoutDuration\": 0,\r\n \"alias\": false\r\n }\r\n ],\r\n \"apiName\": \"ChuckNorris\",\r\n \"apiVersion\": \"1.0\",\r\n \"apiDescription\": \"Chuck Norris facts are satirical factoids about martial artist and actor Chuck Norris that have become an Internet phenomenon and as a result have become widespread in popular culture. The 'facts' are normally absurd hyperbolic claims about Norris' toughness, attitude, virility, sophistication, and masculinity.\",\r\n \"maturityState\": \"Beta\",\r\n \"isActive\": false,\r\n \"type\": \"REST\",\r\n \"owner\": \"Administrator\",\r\n \"policies\": [\r\n \"08afbfa9-78e1-4c23-bb19-c0012464047e\"\r\n ],\r\n \"scopes\": [],\r\n \"publishedPortals\": [],\r\n \"creationDate\": \"2018-09-03 11:56:21 GMT\",\r\n \"systemVersion\": 1,\r\n \"id\": \"badc18e6-446f-4aa3-96cd-33e46bd40fb5\"\r\n },\r\n \"responseStatus\": \"SUCCESS\",\r\n \"versions\": [\r\n {\r\n \"versionNumber\": \"1.0\",\r\n \"apiId\": \"badc18e6-446f-4aa3-96cd-33e46bd40fb5\"\r\n }\r\n ]\r\n }\r\n}" - }, - "schema" : { - "$ref" : "#/definitions/APIResponse" - } - }, - "400" : { - "description" : "This status code returns when the specified api is not the latest version or if the newApiVersion is empty" - }, - "404" : { - "description" : "Not Found" - }, - "401" : { - "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." - } - }, - "security" : [ { - "Basic" : [ ] - } ] - } - }, - "/apis/{apiId}" : { - "get" : { - "description" : "Retrieve an API based on the API id.", - "operationId" : "getAPI", - "produces" : [ "application/json" ], - "parameters" : [ { - "name" : "apiId", - "in" : "path", - "description" : "API Id for the API to be retrieved", - "required" : true, - "type" : "string", - "x-example" : "353bd366-47d4-4703-aecf-9cb40cdcc864" - }, { - "name" : "format", - "in" : "query", - "description" : "Output format of the API. If the value is 'swagger', you get a API definition in swagger format. If the value is 'raml', you get a raml document. If the value is 'openapi', you get a open API document. If the value is 'odata', you get a zip file holding the OData metadata and service document.", - "required" : false, - "type" : "string", - "x-example" : "raml" - }, { - "name" : "url", - "in" : "query", - "description" : "User selected endpoint for API definition in swagger/raml format.", - "required" : false, - "type" : "string", - "x-example" : "http://hostname:5555/gateway/servicename/1.0" - } ], - "responses" : { - "200" : { - "description" : "If the format is swagger, returns the swagger content in json and raml returns the raml content in yaml. If the format is openapi, returns the open api content in json. If the format is odata, you get a zip file holding the OData metadata and service document.", - "examples" : { - "application/json" : "{\r\n \"apiResponse\": {\r\n \"api\": {\r\n \"apiDefinition\": {\r\n \"type\": \"rest\",\r\n \"info\": {\r\n \"description\": \"Chuck Norris facts are satirical factoids about martial artist and actor Chuck Norris that have become an Internet phenomenon and as a result have become widespread in popular culture. The 'facts' are normally absurd hyperbolic claims about Norris' toughness, attitude, virility, sophistication, and masculinity.\",\r\n \"version\": \"1.0\",\r\n \"title\": \"ChuckNorrisAPI\"\r\n },\r\n \"host\": \"api.chucknorris.io\",\r\n \"basePath\": \"/jokes\",\r\n \"schemes\": [\r\n \"https\"\r\n ],\r\n \"security\": [],\r\n \"paths\": {\r\n \"/random\": {\r\n \"get\": {\r\n \"summary\": \"GET\",\r\n \"description\": \"\",\r\n \"operationId\": \"GET\",\r\n \"produces\": [\r\n \"application/json\"\r\n ],\r\n \"responses\": {},\r\n \"enabled\": true\r\n },\r\n \"enabled\": true\r\n }\r\n },\r\n \"securityDefinitions\": {},\r\n \"definitions\": {},\r\n \"baseUriParameters\": [],\r\n \"externalDocs\": [],\r\n \"servers\": [\r\n {\r\n \"url\": \"https://api.chucknorris.io/jokes\"\r\n }\r\n ],\r\n \"components\": {\r\n \"schemas\": {}\r\n }\r\n },\r\n \"nativeEndpoint\": [\r\n {\r\n \"passSecurityHeaders\": true,\r\n \"uri\": \"https://api.chucknorris.io/jokes\",\r\n \"connectionTimeoutDuration\": 0,\r\n \"alias\": false\r\n }\r\n ],\r\n \"apiName\": \"ChuckNorris\",\r\n \"apiVersion\": \"1.0\",\r\n \"apiDescription\": \"Chuck Norris facts are satirical factoids about martial artist and actor Chuck Norris that have become an Internet phenomenon and as a result have become widespread in popular culture. The 'facts' are normally absurd hyperbolic claims about Norris' toughness, attitude, virility, sophistication, and masculinity.\",\r\n \"maturityState\": \"Beta\",\r\n \"isActive\": false,\r\n \"type\": \"REST\",\r\n \"owner\": \"Administrator\",\r\n \"policies\": [\r\n \"08afbfa9-78e1-4c23-bb19-c0012464047e\"\r\n ],\r\n \"scopes\": [],\r\n \"publishedPortals\": [],\r\n \"creationDate\": \"2018-09-03 11:56:21 GMT\",\r\n \"systemVersion\": 1,\r\n \"id\": \"badc18e6-446f-4aa3-96cd-33e46bd40fb5\"\r\n },\r\n \"responseStatus\": \"SUCCESS\",\r\n \"versions\": [\r\n {\r\n \"versionNumber\": \"1.0\",\r\n \"apiId\": \"badc18e6-446f-4aa3-96cd-33e46bd40fb5\"\r\n \r\n }\r\n ],\r\n \"teams\": [\r\n {\r\n \"id\": \"Administrators\",\r\n \"name\": \"Administrators\",\r\n \"canDelete\": \"false\"\r\n },\r\n {\r\n \"id\": \"Default\",\r\n \"name\": \"Default\",\r\n \"canDelete\": \"true\"\r\n }\r\n ] }\r\n}" - }, - "schema" : { - "$ref" : "#/definitions/APIResponseGetAPI" - } - }, - "404" : { - "description" : "This status code indicates that the apiId specified is not found in the API Gateway" - }, - "401" : { - "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." - } - }, - "security" : [ { - "Basic" : [ ] - } ] - }, - "put" : { - "description" : "This REST operation is used to update an API by importing a file, url or inline.\n\nWhile updating the API, visibility of the operations can be set by enabling or disabling the operations. Disabled operations will not be exposed to the customers. By default, all the operations are exposed to the consumers.\n\nWhen updating the API using file or url, API Gateway overwrite the resources/operations for the API. But it will retain the maturity state, scopes, visibility and if API mocking is enabled, then default mocked responses, mocked conditions and IS services will also be retained.", - "operationId" : "updateAPI", - "consumes" : [ "application/json", "multipart/form-data" ], - "produces" : [ "application/json" ], - "parameters" : [ { - "name" : "apiId", - "in" : "path", - "description" : "API Id for the API to be updated", - "required" : true, - "type" : "string", - "x-example" : "353bd366-47d4-4703-aecf-9cb40cdcc864" - }, { - "name" : "file", - "in" : "formData", - "description" : "Input swagger / raml / wsdl file", - "required" : true, - "type" : "file", - "x-example" : "petstore.json" - }, { - "name" : "apiName", - "in" : "formData", - "description" : "Name of the API", - "required" : true, - "type" : "string", - "x-example" : "Swagger Petstore" - }, { - "name" : "apiDescription", - "in" : "formData", - "description" : "Description of the API", - "required" : false, - "type" : "string", - "x-example" : "This is a sample server Petstore server" - }, { - "name" : "apiVersion", - "in" : "formData", - "description" : "Version of the API", - "required" : false, - "type" : "string", - "x-example" : "V1" - }, { - "name" : "type", - "in" : "formData", - "description" : "Input file type", - "required" : true, - "type" : "string", - "x-example" : "swagger", - "enum" : [ "swagger", "raml", "wsdl", "openapi" ] - }, { - "name" : "rootFileName", - "in" : "formData", - "description" : "Name of the main file in the zip. Required when the input file is zip format", - "required" : false, - "type" : "string", - "x-example" : "mainFile.wsdl" - }, { - "in" : "body", - "name" : "body", - "description" : "API request payload", - "required" : true, - "schema" : { - "$ref" : "#/definitions/GatewayAPI" - }, - "x-examples" : { - "application/json" : "{\r\n \"apiDefinition\": {\r\n \"type\": \"rest\",\r\n \"info\": {\r\n \"description\": \"Chuck Norris facts are satirical factoids about martial artist and actor Chuck Norris that have become an Internet phenomenon and as a result have become widespread in popular culture. The 'facts' are normally absurd hyperbolic claims about Norris' toughness, attitude, virility, sophistication, and masculinity.\",\r\n \"version\": \"1.0\",\r\n \"title\": \"ChuckNorrisAPI\"\r\n },\r\n \"host\": \"api.chucknorris.io\",\r\n \"basePath\": \"/jokes\",\r\n \"schemes\": [\r\n \"https\"\r\n ],\r\n \"security\": [],\r\n \"paths\": {\r\n \"/random\": {\r\n \"get\": {\r\n \"summary\": \"GET\",\r\n \"description\": \"\",\r\n \"operationId\": \"GET\",\r\n \"produces\": [\r\n \"application/json\"\r\n ],\r\n \"responses\": {},\r\n \"enabled\": true\r\n },\r\n \"enabled\": true\r\n }\r\n },\r\n \"securityDefinitions\": {},\r\n \"definitions\": {},\r\n \"baseUriParameters\": [],\r\n \"externalDocs\": [],\r\n \"servers\": [\r\n {\r\n \"url\": \"https://api.chucknorris.io/jokes\"\r\n }\r\n ],\r\n \"components\": {\r\n \"schemas\": {}\r\n }\r\n },\r\n \"nativeEndpoint\": [\r\n {\r\n \"passSecurityHeaders\": true,\r\n \"uri\": \"https://api.chucknorris.io/jokes\",\r\n \"connectionTimeoutDuration\": 0,\r\n \"alias\": false\r\n }\r\n ],\r\n \"apiName\": \"ChuckNorris\",\r\n \"apiVersion\": \"1.0\",\r\n \"apiDescription\": \"Chuck Norris facts are satirical factoids about martial artist and actor Chuck Norris that have become an Internet phenomenon and as a result have become widespread in popular culture. The 'facts' are normally absurd hyperbolic claims about Norris' toughness, attitude, virility, sophistication, and masculinity.\",\r\n \"maturityState\": \"Beta\",\r\n \"isActive\": false,\r\n \"type\": \"REST\",\r\n \"owner\": \"Administrator\",\r\n \"policies\": [\r\n \"08afbfa9-78e1-4c23-bb19-c0012464047e\"\r\n ],\r\n \"scopes\": [],\r\n \"publishedPortals\": [],\r\n \"creationDate\": \"2018-09-03 11:56:21 GMT\",\r\n \"systemVersion\": 1,\r\n \"id\": \"badc18e6-446f-4aa3-96cd-33e46bd40fb5\"\r\n }" - } - } ], - "responses" : { - "200" : { - "description" : "Returns the updated API object", - "examples" : { - "application/json" : "{\r\n \"apiResponse\": {\r\n \"api\": {\r\n \"apiDefinition\": {\r\n \"type\": \"rest\",\r\n \"info\": {\r\n \"description\": \"Chuck Norris facts are satirical factoids about martial artist and actor Chuck Norris that have become an Internet phenomenon and as a result have become widespread in popular culture. The 'facts' are normally absurd hyperbolic claims about Norris' toughness, attitude, virility, sophistication, and masculinity.\",\r\n \"version\": \"1.0\",\r\n \"title\": \"ChuckNorrisAPI\"\r\n },\r\n \"host\": \"api.chucknorris.io\",\r\n \"basePath\": \"/jokes\",\r\n \"schemes\": [\r\n \"https\"\r\n ],\r\n \"security\": [],\r\n \"paths\": {\r\n \"/random\": {\r\n \"get\": {\r\n \"summary\": \"GET\",\r\n \"description\": \"\",\r\n \"operationId\": \"GET\",\r\n \"produces\": [\r\n \"application/json\"\r\n ],\r\n \"responses\": {},\r\n \"enabled\": true\r\n },\r\n \"enabled\": true\r\n }\r\n },\r\n \"securityDefinitions\": {},\r\n \"definitions\": {},\r\n \"baseUriParameters\": [],\r\n \"externalDocs\": [],\r\n \"servers\": [\r\n {\r\n \"url\": \"https://api.chucknorris.io/jokes\"\r\n }\r\n ],\r\n \"components\": {\r\n \"schemas\": {}\r\n }\r\n },\r\n \"nativeEndpoint\": [\r\n {\r\n \"passSecurityHeaders\": true,\r\n \"uri\": \"https://api.chucknorris.io/jokes\",\r\n \"connectionTimeoutDuration\": 0,\r\n \"alias\": false\r\n }\r\n ],\r\n \"apiName\": \"ChuckNorris\",\r\n \"apiVersion\": \"1.0\",\r\n \"apiDescription\": \"Chuck Norris facts are satirical factoids about martial artist and actor Chuck Norris that have become an Internet phenomenon and as a result have become widespread in popular culture. The 'facts' are normally absurd hyperbolic claims about Norris' toughness, attitude, virility, sophistication, and masculinity.\",\r\n \"maturityState\": \"Beta\",\r\n \"isActive\": false,\r\n \"type\": \"REST\",\r\n \"owner\": \"Administrator\",\r\n \"policies\": [\r\n \"08afbfa9-78e1-4c23-bb19-c0012464047e\"\r\n ],\r\n \"scopes\": [],\r\n \"publishedPortals\": [],\r\n \"creationDate\": \"2018-09-03 11:56:21 GMT\",\r\n \"systemVersion\": 1,\r\n \"id\": \"badc18e6-446f-4aa3-96cd-33e46bd40fb5\"\r\n },\r\n \"responseStatus\": \"SUCCESS\",\r\n \"versions\": [\r\n {\r\n \"versionNumber\": \"1.0\",\r\n \"apiId\": \"badc18e6-446f-4aa3-96cd-33e46bd40fb5\"\r\n }\r\n ]\r\n }\r\n}" - }, - "schema" : { - "$ref" : "#/definitions/APIResponseCreate" - } - }, - "404" : { - "description" : "This status code indicates that the apiId specified is not found in the API Gateway" - }, - "400" : { - "description" : "This status code shows when the user missed the mandatory fields like type, file/url/apiDefinition in the request or provide a invalid request body" - }, - "401" : { - "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." - } - }, - "security" : [ { - "Basic" : [ ] - } ] - }, - "delete" : { - "description" : "Delete the inactive API", - "operationId" : "deleteAPI", - "parameters" : [ { - "name" : "apiId", - "in" : "path", - "description" : "API Id for the API to be deleted", - "required" : true, - "type" : "string", - "x-example" : "353bd366-47d4-4703-aecf-9cb40cdcc864" - }, { - "name" : "forceDelete", - "in" : "query", - "description" : "Flag for force delete. Required when API is associated with some applications", - "required" : false, - "type" : "boolean", - "default" : true, - "x-example" : true - } ], - "responses" : { - "200" : { - "description" : "Returns the apiId along with the error when unsuccessful", - "schema" : { - "$ref" : "#/definitions/APIResponseDelete" - } - }, - "400" : { - "description" : "This response code returns when the deleted API is published to API portal or in active state" - }, - "404" : { - "description" : "This status code indicates that the apiId specified is not found in the API Gateway" - }, - "401" : { - "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API" - }, - "204" : { - "description" : "Success" - } - }, - "security" : [ { - "Basic" : [ ] - } ] - } - }, - "/apis/{apiId}/activate" : { - "put" : { - "description" : "Activate an API so that API is exposed to consumers", - "operationId" : "activateAPI", - "produces" : [ "application/json" ], - "parameters" : [ { - "name" : "apiId", - "in" : "path", - "description" : "API Id for the API to be activated", - "required" : true, - "type" : "string", - "x-example" : "353bd366-47d4-4703-aecf-9cb40cdcc864" - } ], - "responses" : { - "200" : { - "description" : "Returns the API object after successful activation", - "examples" : { - "application/json" : "{\r\n \"apiResponse\": {\r\n \"api\": {\r\n \"apiDefinition\": {\r\n \"type\": \"rest\",\r\n \"info\": {\r\n \"description\": \"Chuck Norris facts are satirical factoids about martial artist and actor Chuck Norris that have become an Internet phenomenon and as a result have become widespread in popular culture. The 'facts' are normally absurd hyperbolic claims about Norris' toughness, attitude, virility, sophistication, and masculinity.\",\r\n \"version\": \"1.0\",\r\n \"title\": \"ChuckNorrisAPI\"\r\n },\r\n \"host\": \"api.chucknorris.io\",\r\n \"basePath\": \"/jokes\",\r\n \"schemes\": [\r\n \"https\"\r\n ],\r\n \"security\": [],\r\n \"paths\": {\r\n \"/random\": {\r\n \"get\": {\r\n \"summary\": \"GET\",\r\n \"description\": \"\",\r\n \"operationId\": \"GET\",\r\n \"produces\": [\r\n \"application/json\"\r\n ],\r\n \"responses\": {},\r\n \"enabled\": true\r\n },\r\n \"enabled\": true\r\n }\r\n },\r\n \"securityDefinitions\": {},\r\n \"definitions\": {},\r\n \"baseUriParameters\": [],\r\n \"externalDocs\": [],\r\n \"servers\": [\r\n {\r\n \"url\": \"https://api.chucknorris.io/jokes\"\r\n }\r\n ],\r\n \"components\": {\r\n \"schemas\": {}\r\n }\r\n },\r\n \"nativeEndpoint\": [\r\n {\r\n \"passSecurityHeaders\": true,\r\n \"uri\": \"https://api.chucknorris.io/jokes\",\r\n \"connectionTimeoutDuration\": 0,\r\n \"alias\": false\r\n }\r\n ],\r\n \"apiName\": \"ChuckNorris\",\r\n \"apiVersion\": \"1.0\",\r\n \"apiDescription\": \"Chuck Norris facts are satirical factoids about martial artist and actor Chuck Norris that have become an Internet phenomenon and as a result have become widespread in popular culture. The 'facts' are normally absurd hyperbolic claims about Norris' toughness, attitude, virility, sophistication, and masculinity.\",\r\n \"maturityState\": \"Beta\",\r\n \"isActive\": false,\r\n \"type\": \"REST\",\r\n \"owner\": \"Administrator\",\r\n \"policies\": [\r\n \"08afbfa9-78e1-4c23-bb19-c0012464047e\"\r\n ],\r\n \"scopes\": [],\r\n \"publishedPortals\": [],\r\n \"creationDate\": \"2018-09-03 11:56:21 GMT\",\r\n \"systemVersion\": 1,\r\n \"id\": \"badc18e6-446f-4aa3-96cd-33e46bd40fb5\"\r\n },\r\n \"responseStatus\": \"SUCCESS\",\r\n \"versions\": [\r\n {\r\n \"versionNumber\": \"1.0\",\r\n \"apiId\": \"badc18e6-446f-4aa3-96cd-33e46bd40fb5\"\r\n }\r\n ]\r\n }\r\n}" - }, - "schema" : { - "$ref" : "#/definitions/APIResponse" - } - }, - "400" : { - "description" : "This status code shows when the API is already in activated state or when no operations/resources are present or none are enabled" - }, - "404" : { - "description" : "This status code indicates that the apiId specified is not found in the API Gateway" - }, - "401" : { - "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." - } - }, - "security" : [ { - "Basic" : [ ] - } ] - } - }, - "/apis/{apiId}/deactivate" : { - "put" : { - "description" : "Deactivate an API so that API is not exposed to consumers", - "operationId" : "deactivateAPI", - "produces" : [ "application/json" ], - "parameters" : [ { - "name" : "apiId", - "in" : "path", - "description" : "API Id for the API to be deactivated", - "required" : true, - "type" : "string", - "x-example" : "353bd366-47d4-4703-aecf-9cb40cdcc864" - } ], - "responses" : { - "200" : { - "description" : "Returns the API object after successful deactivation", - "examples" : { - "application/json" : "{\r\n \"apiResponse\": {\r\n \"api\": {\r\n \"apiDefinition\": {\r\n \"type\": \"rest\",\r\n \"info\": {\r\n \"description\": \"Chuck Norris facts are satirical factoids about martial artist and actor Chuck Norris that have become an Internet phenomenon and as a result have become widespread in popular culture. The 'facts' are normally absurd hyperbolic claims about Norris' toughness, attitude, virility, sophistication, and masculinity.\",\r\n \"version\": \"1.0\",\r\n \"title\": \"ChuckNorrisAPI\"\r\n },\r\n \"host\": \"api.chucknorris.io\",\r\n \"basePath\": \"/jokes\",\r\n \"schemes\": [\r\n \"https\"\r\n ],\r\n \"security\": [],\r\n \"paths\": {\r\n \"/random\": {\r\n \"get\": {\r\n \"summary\": \"GET\",\r\n \"description\": \"\",\r\n \"operationId\": \"GET\",\r\n \"produces\": [\r\n \"application/json\"\r\n ],\r\n \"responses\": {},\r\n \"enabled\": true\r\n },\r\n \"enabled\": true\r\n }\r\n },\r\n \"securityDefinitions\": {},\r\n \"definitions\": {},\r\n \"baseUriParameters\": [],\r\n \"externalDocs\": [],\r\n \"servers\": [\r\n {\r\n \"url\": \"https://api.chucknorris.io/jokes\"\r\n }\r\n ],\r\n \"components\": {\r\n \"schemas\": {}\r\n }\r\n },\r\n \"nativeEndpoint\": [\r\n {\r\n \"passSecurityHeaders\": true,\r\n \"uri\": \"https://api.chucknorris.io/jokes\",\r\n \"connectionTimeoutDuration\": 0,\r\n \"alias\": false\r\n }\r\n ],\r\n \"apiName\": \"ChuckNorris\",\r\n \"apiVersion\": \"1.0\",\r\n \"apiDescription\": \"Chuck Norris facts are satirical factoids about martial artist and actor Chuck Norris that have become an Internet phenomenon and as a result have become widespread in popular culture. The 'facts' are normally absurd hyperbolic claims about Norris' toughness, attitude, virility, sophistication, and masculinity.\",\r\n \"maturityState\": \"Beta\",\r\n \"isActive\": false,\r\n \"type\": \"REST\",\r\n \"owner\": \"Administrator\",\r\n \"policies\": [\r\n \"08afbfa9-78e1-4c23-bb19-c0012464047e\"\r\n ],\r\n \"scopes\": [],\r\n \"publishedPortals\": [],\r\n \"creationDate\": \"2018-09-03 11:56:21 GMT\",\r\n \"systemVersion\": 1,\r\n \"id\": \"badc18e6-446f-4aa3-96cd-33e46bd40fb5\"\r\n },\r\n \"responseStatus\": \"SUCCESS\",\r\n \"versions\": [\r\n {\r\n \"versionNumber\": \"1.0\",\r\n \"apiId\": \"badc18e6-446f-4aa3-96cd-33e46bd40fb5\"\r\n }\r\n ]\r\n }\r\n}" - }, - "schema" : { - "$ref" : "#/definitions/APIResponse" - } - }, - "400" : { - "description" : "This status code shows when the API is already in de-activated state" - }, - "404" : { - "description" : "This status code indicates that the apiId specified is not found in the API Gateway" - }, - "401" : { - "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." - } - }, - "security" : [ { - "Basic" : [ ] - } ] - } - }, - "/apis/{apiId}/publish" : { - "put" : { - "description" : "This REST operation is used to publish API to the registered API Portal", - "operationId" : "publishAPI", - "consumes" : [ "application/json" ], - "produces" : [ "application/json" ], - "parameters" : [ { - "name" : "apiId", - "in" : "path", - "description" : "API Id for the API to be published", - "required" : true, - "type" : "string", - "x-example" : "353bd366-47d4-4703-aecf-9cb40cdcc864" - }, { - "in" : "body", - "name" : "body", - "description" : "API publish request payload", - "required" : true, - "schema" : { - "$ref" : "#/definitions/InputPublish" - }, - "x-examples" : { - "application/json" : "{\r\n\t\"portalGatewayId\" : \"69bac781-6c60-4db3-86f7-50af3ec4963a\",\r\n\t\"communities\" : [\"3bdf8005-5685-3ef5-b132-de4681963fb6\"],\r\n\t\"endpoints\" : [\"https://api.chucknorris.io/jokes\"]\r\n}" - } - } ], - "responses" : { - "200" : { - "description" : "Returns the API object after successful publish", - "examples" : { - "application/json" : "{\r\n \"apiResponse\": {\r\n \"api\": {\r\n \"apiDefinition\": {\r\n \"type\": \"rest\",\r\n \"info\": {\r\n \"vendorExtensions\": {},\r\n \"description\": \"Chuck Norris facts are satirical factoids about martial artist and actor Chuck Norris that have become an Internet phenomenon and as a result have become widespread in popular culture. The 'facts' are normally absurd hyperbolic claims about Norris' toughness, attitude, virility, sophistication, and masculinity.\",\r\n \"version\": \"1.0\",\r\n \"title\": \"ChuckNorrisAPI\"\r\n },\r\n \"host\": \"api.chucknorris.io\",\r\n \"basePath\": \"/jokes\",\r\n \"schemes\": [\r\n \"https\"\r\n ],\r\n \"paths\": {\r\n \"/random\": {\r\n \"get\": {\r\n \"summary\": \"GET\",\r\n \"description\": \"\",\r\n \"operationId\": \"GET\",\r\n \"produces\": [\r\n \"application/json\"\r\n ],\r\n \"parameters\": [],\r\n \"responses\": {},\r\n \"enabled\": true\r\n },\r\n \"enabled\": true\r\n }\r\n },\r\n \"definitions\": {}\r\n },\r\n \"nativeEndpoint\": [\r\n {\r\n \"passSecurityHeaders\": true,\r\n \"uri\": \"https://api.chucknorris.io/jokes\",\r\n \"connectionTimeoutDuration\": 0,\r\n \"alias\": false\r\n }\r\n ],\r\n \"apiName\": \"ChuckNorrisAPI\",\r\n \"apiVersion\": \"1.0\",\r\n \"apiDescription\": \"Chuck Norris facts are satirical factoids about martial artist and actor Chuck Norris that have become an Internet phenomenon and as a result have become widespread in popular culture. The 'facts' are normally absurd hyperbolic claims about Norris' toughness, attitude, virility, sophistication, and masculinity.\",\r\n \"maturityState\": \"Beta\",\r\n \"isActive\": false,\r\n \"type\": \"REST\",\r\n \"owner\": \"Administrator\",\r\n \"policies\": [\r\n \"879068cd-8628-4f2a-b903-4e6613ca12ba\"\r\n ],\r\n \"referencedFiles\": {\r\n \"ChuckNorrisAPI.json\": \"{\\r\\n \\\"swagger\\\": \\\"2.0\\\",\\r\\n \\\"info\\\": {\\r\\n \\\"description\\\": \\\"Chuck Norris facts are satirical factoids about martial artist and actor Chuck Norris that have become an Internet phenomenon and as a result have become widespread in popular culture. The 'facts' are normally absurd hyperbolic claims about Norris' toughness, attitude, virility, sophistication, and masculinity.\\\",\\r\\n \\\"title\\\": \\\"ChuckNorrisAPI\\\",\\r\\n \\\"version\\\": \\\"1.0\\\"\\r\\n },\\r\\n \\\"host\\\": \\\"api.chucknorris.io\\\",\\r\\n \\\"basePath\\\": \\\"/jokes\\\",\\r\\n \\\"schemes\\\": [\\r\\n \\\"https\\\"\\r\\n ],\\r\\n \\\"paths\\\": {\\r\\n \\\"/random\\\": {\\r\\n \\\"get\\\": {\\r\\n \\\"summary\\\": \\\"GET\\\",\\r\\n \\\"deprecated\\\": false,\\r\\n \\\"produces\\\": [\\r\\n \\\"application/json\\\"\\r\\n ],\\r\\n \\\"description\\\": \\\"\\\",\\r\\n \\\"operationId\\\": \\\"GET\\\"\\r\\n }\\r\\n }\\r\\n }\\r\\n}\\r\\n\"\r\n },\r\n \"scopes\": [],\r\n \"publishedPortals\": [],\r\n \"creationDate\": \"2017-03-13 09:38:30 GMT\",\r\n \"systemVersion\": 1,\r\n \"id\": \"25fb937a-8360-41ab-8be5-987b14fe631d\",\r\n \"oauth2ScopeName\": \"25fb937a-8360-41ab-8be5-987b14fe631d\"\r\n },\r\n \"responseStatus\": \"SUCCESS\"\r\n }\r\n}" - }, - "schema" : { - "$ref" : "#/definitions/APIResponseCreate" - } - }, - "400" : { - "description" : "This status code shows when the user missed the mandatory portalGatewayId or invalid portalGatewayId in the request body" - }, - "404" : { - "description" : "This status code indicates that the apiId specified is not found in the API Gateway" - }, - "401" : { - "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." - } - }, - "security" : [ { - "Basic" : [ ] - } ] - } - }, - "/apis/{apiId}/unpublish" : { - "put" : { - "description" : "Unpublish API from the registered API Portal", - "operationId" : "unpublishAPI", - "produces" : [ "application/json" ], - "parameters" : [ { - "name" : "apiId", - "in" : "path", - "description" : "API Id for the API to be unpublished", - "required" : true, - "type" : "string", - "x-example" : "353bd366-47d4-4703-aecf-9cb40cdcc864" - } ], - "responses" : { - "200" : { - "description" : "Returns the API object after successful unpublish", - "examples" : { - "application/json" : "{\r\n \"apiResponse\": {\r\n \"api\": {\r\n \"apiDefinition\": {\r\n \"type\": \"rest\",\r\n \"info\": {\r\n \"vendorExtensions\": {},\r\n \"description\": \"Chuck Norris facts are satirical factoids about martial artist and actor Chuck Norris that have become an Internet phenomenon and as a result have become widespread in popular culture. The 'facts' are normally absurd hyperbolic claims about Norris' toughness, attitude, virility, sophistication, and masculinity.\",\r\n \"version\": \"1.0\",\r\n \"title\": \"ChuckNorrisAPI\"\r\n },\r\n \"host\": \"api.chucknorris.io\",\r\n \"basePath\": \"/jokes\",\r\n \"schemes\": [\r\n \"https\"\r\n ],\r\n \"paths\": {\r\n \"/random\": {\r\n \"get\": {\r\n \"summary\": \"GET\",\r\n \"description\": \"\",\r\n \"operationId\": \"GET\",\r\n \"produces\": [\r\n \"application/json\"\r\n ],\r\n \"parameters\": [],\r\n \"responses\": {},\r\n \"enabled\": true\r\n },\r\n \"enabled\": true\r\n }\r\n },\r\n \"definitions\": {}\r\n },\r\n \"nativeEndpoint\": [\r\n {\r\n \"passSecurityHeaders\": true,\r\n \"uri\": \"https://api.chucknorris.io/jokes\",\r\n \"connectionTimeoutDuration\": 0,\r\n \"alias\": false\r\n }\r\n ],\r\n \"apiName\": \"ChuckNorrisAPI\",\r\n \"apiVersion\": \"1.0\",\r\n \"apiDescription\": \"Chuck Norris facts are satirical factoids about martial artist and actor Chuck Norris that have become an Internet phenomenon and as a result have become widespread in popular culture. The 'facts' are normally absurd hyperbolic claims about Norris' toughness, attitude, virility, sophistication, and masculinity.\",\r\n \"maturityState\": \"Beta\",\r\n \"isActive\": false,\r\n \"type\": \"REST\",\r\n \"owner\": \"Administrator\",\r\n \"policies\": [\r\n \"879068cd-8628-4f2a-b903-4e6613ca12ba\"\r\n ],\r\n \"referencedFiles\": {\r\n \"ChuckNorrisAPI.json\": \"{\\r\\n \\\"swagger\\\": \\\"2.0\\\",\\r\\n \\\"info\\\": {\\r\\n \\\"description\\\": \\\"Chuck Norris facts are satirical factoids about martial artist and actor Chuck Norris that have become an Internet phenomenon and as a result have become widespread in popular culture. The 'facts' are normally absurd hyperbolic claims about Norris' toughness, attitude, virility, sophistication, and masculinity.\\\",\\r\\n \\\"title\\\": \\\"ChuckNorrisAPI\\\",\\r\\n \\\"version\\\": \\\"1.0\\\"\\r\\n },\\r\\n \\\"host\\\": \\\"api.chucknorris.io\\\",\\r\\n \\\"basePath\\\": \\\"/jokes\\\",\\r\\n \\\"schemes\\\": [\\r\\n \\\"https\\\"\\r\\n ],\\r\\n \\\"paths\\\": {\\r\\n \\\"/random\\\": {\\r\\n \\\"get\\\": {\\r\\n \\\"summary\\\": \\\"GET\\\",\\r\\n \\\"deprecated\\\": false,\\r\\n \\\"produces\\\": [\\r\\n \\\"application/json\\\"\\r\\n ],\\r\\n \\\"description\\\": \\\"\\\",\\r\\n \\\"operationId\\\": \\\"GET\\\"\\r\\n }\\r\\n }\\r\\n }\\r\\n}\\r\\n\"\r\n },\r\n \"scopes\": [],\r\n \"publishedPortals\": [],\r\n \"creationDate\": \"2017-03-13 09:38:30 GMT\",\r\n \"systemVersion\": 1,\r\n \"id\": \"25fb937a-8360-41ab-8be5-987b14fe631d\",\r\n \"oauth2ScopeName\": \"25fb937a-8360-41ab-8be5-987b14fe631d\"\r\n },\r\n \"responseStatus\": \"SUCCESS\"\r\n }\r\n}" - }, - "schema" : { - "$ref" : "#/definitions/APIResponseCreate" - } - }, - "400" : { - "description" : "This status code shows when the user missed the mandatory portalGatewayId or invalid portalGatewayId in the request body" - }, - "404" : { - "description" : "This status code indicates that the apiId specified is not found in the API Gateway" - }, - "401" : { - "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." - } - }, - "security" : [ { - "Basic" : [ ] - } ] - } - }, - "/apis/{apiId}/mock/enable" : { - "put" : { - "description" : "In API Gateway, you can mock an API implementation. API Gateway lets you mock an API by simulating the native service. API Mocking is useful feature in API first approach, where in the provider may choose to expose the mocked API to the consumers when the actual API doesn't exist or isn't complete. \n In API Gateway, when you enable mocking for an API, a default mock response is created for each combination of resource, operation, status code and content-type based on the example and schema set in the API definition. As an API Provider, you can add or modify the default mock responses.\n\nYou can specify conditions at the operation level and configure IS services at the API level for a mocked API in the update API operation. At runtime, when the mocked API is invoked instead of calling the native service, API Gateway returns the mocked response to the consumer based on the below priorities:\n1. If any of the conditions for the invoked operation satisfies, API Gateway returns the associated mocked response.\n2. If no condition is specified or none of the condition for the invoked operation is satisfied, then API Gateway will return \na. the response from an IS service, if an IS service is configured b. default mocked response, if no IS services are configured", - "operationId" : "enableMockAPI", - "produces" : [ "application/json" ], - "parameters" : [ { - "name" : "apiId", - "in" : "path", - "description" : "API Id for the API to be activated", - "required" : true, - "type" : "string", - "x-example" : "353bd366-47d4-4703-aecf-9cb40cdcc864" - }, { - "name" : "retainDefaultMockResponses", - "in" : "query", - "description" : "Flag to retain generated mocked responses. When this is set to true, default mocked responses will be retained. If it's set to false, new default mocked responses will be generated using the examples, schema in the API", - "required" : false, - "type" : "boolean", - "default" : false, - "x-example" : true - } ], - "responses" : { - "200" : { - "description" : "Returns the API object after successfully enabling mocking of an API", - "examples" : { - "application/json" : "{\r\n \"apiResponse\": {\r\n \"api\": {\r\n \"apiDefinition\": {\r\n \"type\": \"rest\",\r\n \"info\": {\r\n \"description\": \"API to demonstrate mocking functionality in international developers day\",\r\n \"version\": \"v1\",\r\n \"title\": \"API_MOCKING\"\r\n },\r\n \"host\": \"localhost\",\r\n \"schemes\": [\r\n \"http\"\r\n ],\r\n \"consumes\": [\r\n \"application/json\"\r\n ],\r\n \"security\": [],\r\n \"paths\": {\r\n \"/conditionBasedMockedResponse\": {\r\n \"post\": {\r\n \"summary\": \"Configure condition and mocked response\",\r\n \"operationId\": \"conditionBasedMockedResponse\",\r\n \"produces\": [\r\n \"text/plain\"\r\n ],\r\n \"responses\": {\r\n \"200\": {\r\n \"description\": \"200 response\",\r\n \"content\": {\r\n \"text/plain\": {\r\n \"example\": \"No condition evaluates to true. \\nSo API-Gateway sent this default response.\"\r\n }\r\n }\r\n }\r\n },\r\n \"mockedResponses\": {\r\n \"200\": {\r\n \"responseBody\": {\r\n \"text/plain\": \"No condition evaluates to true. \\nSo API-Gateway sent this default response.\"\r\n }\r\n }\r\n },\r\n \"enabled\": true\r\n },\r\n \"parameters\": [],\r\n \"displayName\": \"/conditionBasedMockedResponse\",\r\n \"enabled\": true\r\n },\r\n \"/customESBMockedResponse\": {\r\n \"post\": {\r\n \"summary\": \"Configure custom ESB mocked response\",\r\n \"operationId\": \"customESBMockedResponse\",\r\n \"produces\": [\r\n \"application/json\"\r\n ],\r\n \"responses\": {\r\n \"200\": {\r\n \"description\": \"200 response\"\r\n }\r\n },\r\n \"mockedResponses\": {\r\n \"200\": {\r\n \"responseBody\": {\r\n \"application/json\": \"\"\r\n }\r\n }\r\n },\r\n \"enabled\": true\r\n },\r\n \"parameters\": [],\r\n \"displayName\": \"/customESBMockedResponse\",\r\n \"enabled\": true\r\n },\r\n \"/dynamicMockedResponse\": {\r\n \"post\": {\r\n \"summary\": \"Dynamic mocked response set\",\r\n \"operationId\": \"dynamicMockedResponse\",\r\n \"produces\": [\r\n \"application/json\"\r\n ],\r\n \"responses\": {\r\n \"200\": {\r\n \"description\": \"200 response\"\r\n }\r\n },\r\n \"mockedResponses\": {\r\n \"200\": {\r\n \"responseBody\": {\r\n \"application/json\": \"\"\r\n }\r\n }\r\n },\r\n \"enabled\": true\r\n },\r\n \"parameters\": [],\r\n \"displayName\": \"/dynamicMockedResponse\",\r\n \"enabled\": true\r\n },\r\n \"/staticMockedResponse\": {\r\n \"post\": {\r\n \"summary\": \"Default mocked response from example\",\r\n \"operationId\": \"generateFromExample\",\r\n \"produces\": [\r\n \"application/json\",\r\n \"application/xml\"\r\n ],\r\n \"responses\": {\r\n \"200\": {\r\n \"description\": \"200 response generated from example\",\r\n \"content\": {\r\n \"application/json\": {\r\n \"example\": \"{\\\"resource\\\" : \\\"/generateFromExample\\\",\\\"description\\\" : \\\"Default mocked response from example for status code 200\\\"}\"\r\n },\r\n \"application/xml\": {\r\n \"example\": \"/generateFromExampleDefault mocked response from example for status code 200\"\r\n }\r\n }\r\n },\r\n \"201\": {\r\n \"description\": \"201 response generated from schema\",\r\n \"content\": {\r\n \"application/json\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/Pet\"\r\n }\r\n },\r\n \"application/xml\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/Pet\"\r\n }\r\n }\r\n }\r\n }\r\n },\r\n \"mockedResponses\": {\r\n \"200\": {\r\n \"responseBody\": {\r\n \"application/json\": \"{\\\"resource\\\" : \\\"/generateFromExample\\\",\\\"description\\\" : \\\"Default mocked response from example for status code 200\\\"}\",\r\n \"application/xml\": \"/generateFromExampleDefault mocked response from example for status code 200\"\r\n }\r\n },\r\n \"201\": {\r\n \"responseBody\": {\r\n \"application/json\": \"{\\\"birthday\\\":2059397944,\\\"name\\\":\\\"\\\"}\",\r\n \"application/xml\": \"921604684\"\r\n }\r\n }\r\n },\r\n \"enabled\": true\r\n },\r\n \"parameters\": [],\r\n \"displayName\": \"/staticMockedResponse\",\r\n \"enabled\": true\r\n }\r\n },\r\n \"securityDefinitions\": {},\r\n \"definitions\": {},\r\n \"baseUriParameters\": [],\r\n \"externalDocs\": [],\r\n \"servers\": [\r\n {\r\n \"url\": \"http://localhost\"\r\n }\r\n ],\r\n \"components\": {\r\n \"schemas\": {\r\n \"Pet\": {\r\n \"required\": [\r\n \"name\"\r\n ],\r\n \"type\": \"object\",\r\n \"properties\": {\r\n \"birthday\": {\r\n \"type\": \"integer\",\r\n \"format\": \"int32\"\r\n },\r\n \"name\": {\r\n \"type\": \"string\"\r\n }\r\n }\r\n }\r\n }\r\n }\r\n },\r\n \"nativeEndpoint\": [\r\n {\r\n \"passSecurityHeaders\": true,\r\n \"uri\": \"http://localhost\",\r\n \"connectionTimeoutDuration\": 0,\r\n \"alias\": false\r\n }\r\n ],\r\n \"apiName\": \"APIMocking\",\r\n \"apiVersion\": \"v1\",\r\n \"apiDescription\": \"API to demonstrate mocking functionality in international developers day\",\r\n \"maturityState\": \"Beta\",\r\n \"isActive\": false,\r\n \"type\": \"REST\",\r\n \"owner\": \"Administrator\",\r\n \"policies\": [\r\n \"19773e29-2838-4efc-aa04-793b48f4d22b\"\r\n ],\r\n \"scopes\": [],\r\n \"publishedPortals\": [],\r\n \"creationDate\": \"2018-11-01 13:44:58 GMT\",\r\n \"systemVersion\": 1,\r\n \"mockService\": {\r\n \"enableMock\": true\r\n },\r\n \"id\": \"afd8eb5e-bba8-447b-8e28-76aac23ba074\"\r\n },\r\n \"responseStatus\": \"SUCCESS\",\r\n \"versions\": [\r\n {\r\n \"versionNumber\": \"v1\",\r\n \"apiId\": \"afd8eb5e-bba8-447b-8e28-76aac23ba074\"\r\n }\r\n ]\r\n }\r\n}" - }, - "schema" : { - "$ref" : "#/definitions/APIResponse" - } - }, - "400" : { - "description" : "This status code shows when the API is already in activated state or when invalid json or xml is provided in the example part of the operation" - }, - "404" : { - "description" : "This status code indicates that the apiId specified is not found in the API Gateway" - }, - "401" : { - "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." - } - }, - "security" : [ { - "Basic" : [ ] - } ] - } - }, - "/apis/{apiId}/mock/disable" : { - "put" : { - "description" : "Once API is disabled from mocking capability, at runtime all the API invocations are redirected to the native service instead of sending the mocked response", - "operationId" : "disableMockAPI", - "produces" : [ "application/json" ], - "parameters" : [ { - "name" : "apiId", - "in" : "path", - "description" : "API Id for the API to be deactivated", - "required" : true, - "type" : "string", - "x-example" : "353bd366-47d4-4703-aecf-9cb40cdcc864" - } ], - "responses" : { - "200" : { - "description" : "Returns the API object after successful disabling mocking of an API", - "examples" : { - "application/json" : "{\r\n \"apiResponse\": {\r\n \"api\": {\r\n \"apiDefinition\": {\r\n \"type\": \"rest\",\r\n \"info\": {\r\n \"description\": \"API to demonstrate mocking functionality in international developers day\",\r\n \"version\": \"v1\",\r\n \"title\": \"API_MOCKING\"\r\n },\r\n \"host\": \"localhost\",\r\n \"schemes\": [\r\n \"http\"\r\n ],\r\n \"consumes\": [\r\n \"application/json\"\r\n ],\r\n \"security\": [],\r\n \"paths\": {\r\n \"/conditionBasedMockedResponse\": {\r\n \"post\": {\r\n \"summary\": \"Configure condition and mocked response\",\r\n \"operationId\": \"conditionBasedMockedResponse\",\r\n \"produces\": [\r\n \"text/plain\"\r\n ],\r\n \"responses\": {\r\n \"200\": {\r\n \"description\": \"200 response\",\r\n \"content\": {\r\n \"text/plain\": {\r\n \"example\": \"No condition evaluates to true. \\nSo API-Gateway sent this default response.\"\r\n }\r\n }\r\n }\r\n },\r\n \"mockedResponses\": {\r\n \"200\": {\r\n \"responseBody\": {\r\n \"text/plain\": \"No condition evaluates to true. \\nSo API-Gateway sent this default response.\"\r\n }\r\n }\r\n },\r\n \"enabled\": true\r\n },\r\n \"parameters\": [],\r\n \"displayName\": \"/conditionBasedMockedResponse\",\r\n \"enabled\": true\r\n },\r\n \"/customESBMockedResponse\": {\r\n \"post\": {\r\n \"summary\": \"Configure custom ESB mocked response\",\r\n \"operationId\": \"customESBMockedResponse\",\r\n \"produces\": [\r\n \"application/json\"\r\n ],\r\n \"responses\": {\r\n \"200\": {\r\n \"description\": \"200 response\"\r\n }\r\n },\r\n \"mockedResponses\": {\r\n \"200\": {\r\n \"responseBody\": {\r\n \"application/json\": \"\"\r\n }\r\n }\r\n },\r\n \"enabled\": true\r\n },\r\n \"parameters\": [],\r\n \"displayName\": \"/customESBMockedResponse\",\r\n \"enabled\": true\r\n },\r\n \"/dynamicMockedResponse\": {\r\n \"post\": {\r\n \"summary\": \"Dynamic mocked response set\",\r\n \"operationId\": \"dynamicMockedResponse\",\r\n \"produces\": [\r\n \"application/json\"\r\n ],\r\n \"responses\": {\r\n \"200\": {\r\n \"description\": \"200 response\"\r\n }\r\n },\r\n \"mockedResponses\": {\r\n \"200\": {\r\n \"responseBody\": {\r\n \"application/json\": \"\"\r\n }\r\n }\r\n },\r\n \"enabled\": true\r\n },\r\n \"parameters\": [],\r\n \"displayName\": \"/dynamicMockedResponse\",\r\n \"enabled\": true\r\n },\r\n \"/staticMockedResponse\": {\r\n \"post\": {\r\n \"summary\": \"Default mocked response from example\",\r\n \"operationId\": \"generateFromExample\",\r\n \"produces\": [\r\n \"application/json\",\r\n \"application/xml\"\r\n ],\r\n \"responses\": {\r\n \"200\": {\r\n \"description\": \"200 response generated from example\",\r\n \"content\": {\r\n \"application/json\": {\r\n \"example\": \"{\\\"resource\\\" : \\\"/generateFromExample\\\",\\\"description\\\" : \\\"Default mocked response from example for status code 200\\\"}\"\r\n },\r\n \"application/xml\": {\r\n \"example\": \"/generateFromExampleDefault mocked response from example for status code 200\"\r\n }\r\n }\r\n },\r\n \"201\": {\r\n \"description\": \"201 response generated from schema\",\r\n \"content\": {\r\n \"application/json\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/Pet\"\r\n }\r\n },\r\n \"application/xml\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/Pet\"\r\n }\r\n }\r\n }\r\n }\r\n },\r\n \"mockedResponses\": {\r\n \"200\": {\r\n \"responseBody\": {\r\n \"application/json\": \"{\\\"resource\\\" : \\\"/generateFromExample\\\",\\\"description\\\" : \\\"Default mocked response from example for status code 200\\\"}\",\r\n \"application/xml\": \"/generateFromExampleDefault mocked response from example for status code 200\"\r\n }\r\n },\r\n \"201\": {\r\n \"responseBody\": {\r\n \"application/json\": \"{\\\"birthday\\\":2059397944,\\\"name\\\":\\\"\\\"}\",\r\n \"application/xml\": \"921604684\"\r\n }\r\n }\r\n },\r\n \"enabled\": true\r\n },\r\n \"parameters\": [],\r\n \"displayName\": \"/staticMockedResponse\",\r\n \"enabled\": true\r\n }\r\n },\r\n \"securityDefinitions\": {},\r\n \"definitions\": {},\r\n \"baseUriParameters\": [],\r\n \"externalDocs\": [],\r\n \"servers\": [\r\n {\r\n \"url\": \"http://localhost\"\r\n }\r\n ],\r\n \"components\": {\r\n \"schemas\": {\r\n \"Pet\": {\r\n \"required\": [\r\n \"name\"\r\n ],\r\n \"type\": \"object\",\r\n \"properties\": {\r\n \"birthday\": {\r\n \"type\": \"integer\",\r\n \"format\": \"int32\"\r\n },\r\n \"name\": {\r\n \"type\": \"string\"\r\n }\r\n }\r\n }\r\n }\r\n }\r\n },\r\n \"nativeEndpoint\": [\r\n {\r\n \"passSecurityHeaders\": true,\r\n \"uri\": \"http://localhost\",\r\n \"connectionTimeoutDuration\": 0,\r\n \"alias\": false\r\n }\r\n ],\r\n \"apiName\": \"APIMocking\",\r\n \"apiVersion\": \"v1\",\r\n \"apiDescription\": \"API to demonstrate mocking functionality in international developers day\",\r\n \"maturityState\": \"Beta\",\r\n \"isActive\": false,\r\n \"type\": \"REST\",\r\n \"owner\": \"Administrator\",\r\n \"policies\": [\r\n \"19773e29-2838-4efc-aa04-793b48f4d22b\"\r\n ],\r\n \"scopes\": [],\r\n \"publishedPortals\": [],\r\n \"creationDate\": \"2018-11-01 13:44:58 GMT\",\r\n \"systemVersion\": 1,\r\n \"mockService\": {\r\n \"enableMock\": false\r\n },\r\n \"id\": \"afd8eb5e-bba8-447b-8e28-76aac23ba074\"\r\n },\r\n \"responseStatus\": \"SUCCESS\",\r\n \"versions\": [\r\n {\r\n \"versionNumber\": \"v1\",\r\n \"apiId\": \"afd8eb5e-bba8-447b-8e28-76aac23ba074\"\r\n }\r\n ]\r\n }\r\n}" - }, - "schema" : { - "$ref" : "#/definitions/APIResponse" - } - }, - "400" : { - "description" : "This status code shows when the API is already in activated state or in mocked state" - }, - "404" : { - "description" : "This status code indicates that the apiId specified is not found in the API Gateway" - }, - "401" : { - "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." - } - }, - "security" : [ { - "Basic" : [ ] - } ] - } - }, - "/apis/{apiId}/implementation" : { - "put" : { - "description" : "An API Provider tool can use this operation to update the API in APIGateway after completion of its implementation in their end", - "operationId" : "notifyAPIImplementation", - "consumes" : [ "multipart/form-data" ], - "produces" : [ "application/json" ], - "parameters" : [ { - "name" : "apiId", - "in" : "path", - "description" : "API Id for the API to be updated", - "required" : true, - "type" : "string", - "x-example" : "353bd366-47d4-4703-aecf-9cb40cdcc864" - }, { - "name" : "nativeBaseURL", - "in" : "query", - "description" : "Base URL of the native API", - "required" : false, - "type" : "string", - "x-example" : "http://localhost:8080/myservice/v1" - }, { - "name" : "overwriteAlias", - "in" : "query", - "description" : "Flag to replace the endpoint alias that is used in the routing policy of the API with the given value of 'nativeBaseURL' parameter.", - "required" : false, - "type" : "boolean", - "x-example" : true - }, { - "name" : "maturityState", - "in" : "query", - "description" : "Value of the 'maturity state' attribute of the API. The 'maturity state' of the API can be set to its one of possible value (from its defines values in extended settings configuration) to depict the completion its implementation", - "required" : false, - "type" : "string", - "x-example" : "Production" - } ], - "responses" : { - "200" : { - "description" : "Returns the updated API object", - "schema" : { - "$ref" : "#/definitions/APIResponse" - } - }, - "404" : { - "description" : "This status code indicates that the apiId specified is not found in the API Gateway" - }, - "400" : { - "description" : "This status code shows when the user missed the mandatory fields like type, file/url/apiDefinition in the request or provide a invalid request body" - }, - "401" : { - "description" : "" - } - }, - "security" : [ { - "Basic" : [ ] - } ] - } - }, - "/apis/{apiId}/applications" : { - "get" : { - "description" : "Retrieves the list of registered applications of an API", - "operationId" : "getApplications", - "produces" : [ "application/json" ], - "parameters" : [ { - "name" : "apiId", - "in" : "path", - "description" : "API Id for the API to find the associated applications", - "required" : true, - "type" : "string", - "x-example" : "353bd366-47d4-4703-aecf-9cb40cdcc864" - } ], - "responses" : { - "200" : { - "description" : "Returns the list of associated applications", - "examples" : { - "application/json" : "{\r\n \"applications\": [\r\n {\r\n \"name\": \"app1\",\r\n \"description\": null,\r\n \"contactEmails\": [],\r\n \"identifiers\": [],\r\n \"siteURLs\": [],\r\n \"version\": \"1.0\",\r\n \"id\": \"ae48cd69-421e-4bdf-a4d0-e86996a78f68\",\r\n \"created\": \"2017-03-13 13:12:03 GMT\",\r\n \"lastupdated\": null,\r\n \"consumingAPIs\": [\r\n \"25fb937a-8360-41ab-8be5-987b14fe631d\"\r\n ],\r\n \"accessTokens\": {\r\n \"apiAccessKey_credentials\": {\r\n \"apiAccessKey\": \"cec4b46b-3569-4f73-a561-172dd67c182a\",\r\n \"expirationInterval\": null\r\n },\r\n \"oauth_credentials\": {\r\n \"clientID\": \"40b78ed3-d171-4bd3-99db-51dd2fa71753\",\r\n \"clientSecret\": \"024b9525-6526-45c8-a66c-d192442064e1\",\r\n \"clientName\": \"app1-6b753c2a-0567-462d-a4ea-1b143ab7a381\",\r\n \"scopes\": [\r\n \"25fb937a-8360-41ab-8be5-987b14fe631d\"\r\n ],\r\n \"token_lifetime\": \"3600\",\r\n \"token_refresh_limit\": \"0\",\r\n \"redirect_uris\": [\r\n \"https://placeholder_redirect_uri\"\r\n ],\r\n \"Type\": \"confidential\"\r\n }\r\n }\r\n }\r\n ]\r\n}" - }, - "schema" : { - "type" : "array", - "items" : { - "$ref" : "#/definitions/Application" - } - } - }, - "404" : { - "description" : "This status code indicates that the apiId specified is not found in the API Gateway" - }, - "401" : { - "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." - } - }, - "security" : [ { - "Basic" : [ ] - } ] - } - }, - "/apis/{apiId}/source" : { - "get" : { - "description" : "Download the API definition that was used to create the API. This is applicable only for SOAP APIs.", - "operationId" : "getSource", - "produces" : [ "multipart/mixed" ], - "parameters" : [ { - "name" : "apiId", - "in" : "path", - "description" : "API Id for the API to download the source content", - "required" : true, - "type" : "string", - "x-example" : "353bd366-47d4-4703-aecf-9cb40cdcc864" - } ], - "responses" : { - "200" : { - "description" : "Returns the source files along with the root file name", - "examples" : { - "multipart/mixed" : "Message-ID: <296841806.5.1489555643275.JavaMail.MRIZ@MCMRIZ01>\r\nMIME-Version: 1.0\r\nContent-Type: multipart/mixed; \r\n\tboundary=\"----=_Part_4_1098332532.1489555643274\"\r\n\r\n------=_Part_4_1098332532.1489555643274\r\ncontent-type: application/zip\r\nContent-Disposition: attachment; filename=\"echoService.zip\"\r\n\r\nfile content in zip format\r\n------=_Part_4_1098332532.1489555643274\r\ncontent-type: text/plain\r\nContent-Disposition: inline; name=\"rootFileName\"\r\n\r\necho.wsdl\r\n------=_Part_4_1098332532.1489555643274--" - }, - "schema" : { - "type" : "array", - "items" : { - "$ref" : "#/definitions/Multipart" - } - } - }, - "404" : { - "description" : "This status code indicates that the apiId specified is not found in the API Gateway" - }, - "400" : { - "description" : "This status code returns when the specified API is not a SOAP API" - }, - "401" : { - "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." - } - }, - "security" : [ { - "Basic" : [ ] - } ] - } - }, - "/apis/{apiId}/globalPolicies" : { - "get" : { - "description" : "Retrieves the list of active global policies applicable to this API", - "operationId" : "getAssociatedGlobalPolicies", - "produces" : [ "application/json" ], - "parameters" : [ { - "name" : "apiId", - "in" : "path", - "description" : "API Id for the API to find the list of applicable global policies", - "required" : true, - "type" : "string", - "x-example" : "353bd366-47d4-4703-aecf-9cb40cdcc864" - } ], - "responses" : { - "200" : { - "description" : "Returns the list of global policy names", - "examples" : { - "application/json" : "{\r\n \"globalPolicies\": [\r\n \"GlobalLogInvocationPolicy\"\r\n ]\r\n}" - }, - "schema" : { - "$ref" : "#/definitions/APIResponseGetGlobalPolicies" - } - }, - "404" : { - "description" : "This status code indicates that the apiId specified is not found in the API Gateway" - }, - "401" : { - "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." - } - }, - "security" : [ { - "Basic" : [ ] - } ] - } - }, - "/apis/{apiId}/scopes" : { - "get" : { - "description" : "An API Scope is a collection of resources or operations in an API. Users can create multiple scopes for a single API. Policies can be attached to an API level or scope level. This method retrieves the scopes of an API.\n\nYou can create, modify or delete the scopes in the update API operation using PUT /api/{apiId}", - "operationId" : "getScopes", - "produces" : [ "application/json" ], - "parameters" : [ { - "name" : "apiId", - "in" : "path", - "description" : "API Id for the API to retrieve the versions", - "required" : true, - "type" : "string", - "x-example" : "353bd366-47d4-4703-aecf-9cb40cdcc864" - } ], - "responses" : { - "200" : { - "description" : "Returns API scopes", - "examples" : { - "application/json" : "{\r\n \"scopeReferences\": [\r\n {\r\n \"references\": [\r\n {\r\n \"resourcePath\": \"/random\",\r\n \"supportedOperations\": []\r\n }\r\n ],\r\n \"scope\": {\r\n \"name\": \"Get_Scopes\",\r\n \"description\": \"Dummy description of the scope\",\r\n \"policies\": [\r\n \"db1a42f4-e038-4a1b-82f4-8fee6fbd5687\"\r\n ]\r\n }\r\n }\r\n ]\r\n}" - }, - "schema" : { - "type" : "array", - "items" : { - "$ref" : "#/definitions/ScopeResourceIndex" - } - } - }, - "404" : { - "description" : "This status code indicates that the apiId specified is not found in the API Gateway" - }, - "401" : { - "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." - } - }, - "security" : [ { - "Basic" : [ ] - } ] - } - }, - "/apis/{apiId}/scopes/{scopeName}" : { - "get" : { - "description" : "Retrieve scopes of an API based on the scope name", - "operationId" : "getScopeByScopeName", - "produces" : [ "application/json" ], - "parameters" : [ { - "name" : "apiId", - "in" : "path", - "description" : "API Id for the API to retrieve the versions", - "required" : true, - "type" : "string", - "x-example" : "353bd366-47d4-4703-aecf-9cb40cdcc864" - }, { - "name" : "scopeName", - "in" : "path", - "description" : "Name of the scope", - "required" : true, - "type" : "string", - "x-example" : "getScope" - } ], - "responses" : { - "200" : { - "description" : "Returns API scopes", - "examples" : { - "application/json" : "{\r\n \"scopeReferences\": [\r\n {\r\n \"references\": [\r\n {\r\n \"resourcePath\": \"/random\",\r\n \"supportedOperations\": []\r\n }\r\n ],\r\n \"scope\": {\r\n \"name\": \"Get_Scopes\",\r\n \"description\": \"Dummy description of the scope\",\r\n \"policies\": [\r\n \"db1a42f4-e038-4a1b-82f4-8fee6fbd5687\"\r\n ]\r\n }\r\n }\r\n ]\r\n}" - }, - "schema" : { - "type" : "array", - "items" : { - "$ref" : "#/definitions/ScopeResourceIndex" - } - } - }, - "404" : { - "description" : "This status code indicates that the apiId specified is not found in the API Gateway or scopeName is not found in the list of scopes" - }, - "401" : { - "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." - } - }, - "security" : [ { - "Basic" : [ ] - } ] - } - }, - "/apis/{apiId}/providerspecification" : { - "get" : { - "description" : "Downloads the provider specification of REST and SOAP based APIs. Provider specification is nothing but, the specification file (in swagger or wsdl format) with out the concrete API Gateway endpoint and contains all resources/methods/operation irrespective of whether they are exposed to consumer", - "operationId" : "downloadProviderSpecification", - "produces" : [ "application/json" ], - "parameters" : [ { - "name" : "apiId", - "in" : "path", - "description" : "API Id for the API to retrieve the versions", - "required" : true, - "type" : "string", - "x-example" : "353bd366-47d4-4703-aecf-9cb40cdcc864" - }, { - "name" : "format", - "in" : "query", - "description" : "Output format of the API specification. For REST APIs the value is 'swagger'; for SOAP APIs use the value as 'wsdl'", - "required" : true, - "type" : "string", - "x-example" : "swagger", - "enum" : [ "swagger", "wsdl" ] - } ], - "responses" : { - "200" : { - "description" : "If the format is swagger, returns the swagger content in json. If the format is wsdl, returns the wsdl content in xml.", - "schema" : { - "$ref" : "#/definitions/APIResponseGetAPI" - } - }, - "404" : { - "description" : "This status code indicates that the apiId specified is not found in the API Gateway" - }, - "401" : { - "description" : "" - } - }, - "security" : [ { - "Basic" : [ ] - } ] - } - }, - "/serviceRegistry/unpublish" : { - "put" : { - "description" : "Unpublish one or more APIs from one or more service registries", - "operationId" : "unpublishFromServiceRegistry", - "produces" : [ "application/json" ], - "parameters" : [ { - "in" : "body", - "name" : "body", - "description" : "Service registry unpublish payload", - "required" : true, - "schema" : { - "$ref" : "#/definitions/InputServiceRegistryUnpublish" - }, - "x-examples" : { - "application/json" : "{\r\n \"unpublishInfo\": {\r\n \"serviceRegistryIds\": [\r\n \"aec973cd-1e4c-4a93-93a4-950e32d39156\"\r\n ],\r\n \"apiId\": \"afe8b72e-e1a5-47c6-9b43-e7f12858c091\"\r\n },\r\n \"forceUnpublish\": false\r\n}ds" - } - } ], - "responses" : { - "200" : { - "description" : "Returns the service registry unpublish response", - "examples" : { - "application/json" : "{\r\n \"unpublishResponse\": {\r\n \"apiId\": \"afe8b72e-e1a5-47c6-9b43-e7f12858c091\",\r\n \"apiName\": \"CalcService\",\r\n \"apiVersion\": \"10.3\",\r\n \"serviceRegistryUnpublishResponses\": [\r\n {\r\n \"serviceRegistryId\": \"aec973cd-1e4c-4a93-93a4-950e32d39156\",\r\n \"serviceRegistryName\": \"MyServiceConsul\",\r\n \"success\": true,\r\n \"description\": \" Unpublish successful\"\r\n }\r\n ]\r\n }\r\n}" - }, - "schema" : { - "$ref" : "#/definitions/ServiceRegistryUnpublishPutResponse" - } - }, - "401" : { - "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." - } - }, - "security" : [ { - "Basic" : [ ] - } ] - } - }, - "/serviceRegistry/publish" : { - "get" : { - "description" : "Retrieve the service registry publish information for the API", - "operationId" : "getServiceRegistryPublishInfo", - "produces" : [ "application/json" ], - "parameters" : [ { - "name" : "apiId", - "in" : "query", - "description" : "API Id of the API for which ServiceRegistryPublishInfo is to be fetched", - "required" : true, - "type" : "string", - "x-example" : "353bd366-47d4-4703-aecf-9cb40cdcc864" - } ], - "responses" : { - "200" : { - "description" : "Returns the service registry publish info for the API", - "examples" : { - "application/json" : "{\r\n \"publishInfo\": {\r\n \"apiId\": \"afe8b72e-e1a5-47c6-9b43-e7f12858c091\",\r\n \"serviceRegistryPublishInfo\": [\r\n {\r\n \"serviceRegistryId\": \"aec973cd-1e4c-4a93-93a4-950e32d39156\",\r\n \"status\": \"PUBLISHED\",\r\n \"name\": \"MyServiceConsul\",\r\n \"gatewayEndpoints\": [\r\n {\r\n \"gatewayEndpoint\": \"http://localhost:5555/ws/calc/1\",\r\n \"status\": \"PUBLISHED\"\r\n },\r\n {\r\n \"gatewayEndpoint\": \"http://localhost:1111/ws/calc/1\",\r\n \"status\": \"NEW\"\r\n }\r\n ]\r\n }\r\n ]\r\n }\r\n}" - }, - "schema" : { - "$ref" : "#/definitions/ServiceRegistryPublishGetResponse" - } - }, - "404" : { - "description" : "This status code indicates that Publish Info for the apiId specified is not found in API Gateway" - }, - "401" : { - "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." - } - }, - "security" : [ { - "Basic" : [ ] - } ] - }, - "put" : { - "description" : "Publish one or more APIs to one or more service registries", - "operationId" : "publishToServiceRegistry", - "produces" : [ "application/json" ], - "parameters" : [ { - "in" : "body", - "name" : "body", - "description" : "Service registry publish payload", - "required" : true, - "schema" : { - "$ref" : "#/definitions/InputServiceRegistryPublish" - }, - "x-examples" : { - "application/json" : "{\r\n \"publishInfo\": {\r\n \"serviceRegistryPublishInfo\": [\r\n {\r\n \"gatewayEndpoints\": [\r\n {\r\n \"gatewayEndpoint\": \"http://localhost:5555/ws/calc/1\"\r\n }\r\n ],\r\n \"serviceRegistryId\": \"aec973cd-1e4c-4a93-93a4-950e32d39156\"\r\n }\r\n ],\r\n \"apiId\": \"afe8b72e-e1a5-47c6-9b43-e7f12858c091\"\r\n }\r\n}" - } - } ], - "responses" : { - "200" : { - "description" : "Returns the status of the publish operations given in the request.", - "examples" : { - "application/json" : "{\r\n \"publishResponse\": {\r\n \"apiId\": \"afe8b72e-e1a5-47c6-9b43-e7f12858c091\",\r\n \"apiName\": \"CalcService\",\r\n \"apiVersion\": \"10.3\",\r\n \"serviceRegistryPublishResponses\": [\r\n {\r\n \"serviceRegistryId\": \"aec973cd-1e4c-4a93-93a4-950e32d39156\",\r\n \"serviceRegistryName\": \"MyServiceConsul\",\r\n \"status\": \"PUBLISHED\",\r\n \"gatewayEndpoints\": [\r\n {\r\n \"gatewayEndpoint\": \"http://localhost:5555/ws/calc/1\",\r\n \"status\": \"PUBLISHED\",\r\n }\r\n ],\r\n \"success\": true,\r\n \"description\": \"Publish successful\"\r\n }\r\n ]\r\n }\r\n}" - }, - "schema" : { - "$ref" : "#/definitions/ServiceRegistryPublishPutResponse" - } - }, - "400" : { - "description" : "This status code indicates an invalid request body" - }, - "404" : { - "description" : "This status code indicates that API with given apiId is not found in API Gateway" - }, - "401" : { - "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." - } - }, - "security" : [ { - "Basic" : [ ] - } ] - } - }, - "/integrationServer/publish" : { - "get" : { - "description" : "Retrieve the integration server publish information for the API. Only REST and SOAP APIs are supported.", - "operationId" : "getIntegrationServerPublishInfo", - "produces" : [ "application/json" ], - "parameters" : [ { - "name" : "apiId", - "in" : "query", - "description" : "API Id of the API for which IntegrationServerPublishInfo is to be fetched", - "required" : true, - "type" : "string", - "x-example" : "353bd366-47d4-4703-aecf-9cb40cdcc864" - } ], - "responses" : { - "200" : { - "description" : "Returns the integration server publish info for the API", - "schema" : { - "$ref" : "#/definitions/ServiceRegistryPublishGetResponse" - } - }, - "404" : { - "description" : "This status code indicates that Publish Info for the apiId specified is not found in API Gateway" - }, - "401" : { - "description" : "" - } - }, - "security" : [ { - "Basic" : [ ] - } ] - }, - "put" : { - "description" : "Publish one or more APIs to one or more integration servers. Only REST and SOAP APIs are supported.", - "operationId" : "publishToIntegrationServer", - "produces" : [ "application/json" ], - "parameters" : [ { - "in" : "body", - "name" : "body", - "description" : "Integration server publish payload", - "required" : true, - "schema" : { - "$ref" : "#/definitions/InputIntegrationServerPublish" - } - } ], - "responses" : { - "200" : { - "description" : "Returns the status of the publish operations given in the request.", - "schema" : { - "$ref" : "#/definitions/ServiceRegistryPublishPutResponse" - } - }, - "400" : { - "description" : "This status code indicates an invalid request body" - }, - "404" : { - "description" : "This status code indicates that API with given apiId is not found in API Gateway" - }, - "401" : { - "description" : "" - } - }, - "security" : [ { - "Basic" : [ ] - } ] - } - } - }, - "securityDefinitions" : { - "Basic" : { - "description" : "API Gateway Administrator and API Gateway provider", - "type" : "basic" - } - }, - "definitions" : { - "API" : { - "type" : "object", - "discriminator" : "type", - "properties" : { - "type" : { - "type" : "string" - }, - "description" : { - "type" : "string" - }, - "title" : { - "type" : "string" - }, - "version" : { - "type" : "string" - }, - "uri" : { - "type" : "array", - "uniqueItems" : true, - "items" : { - "type" : "string" - } - }, - "serviceRegistryDisplayName" : { - "type" : "string" - } - } - }, - "AbstractParameter" : { - "type" : "object", - "properties" : { - "vendorExtensions" : { - "type" : "object", - "additionalProperties" : { - "type" : "object" - } - }, - "name" : { - "type" : "string", - "description" : "The name of the parameter. Parameter names are case sensitive" - }, - "in" : { - "type" : "string", - "description" : "The location of the parameter. Possible values are \"query\", \"header\", \"path\" or \"cookie\"" - }, - "description" : { - "type" : "string", - "description" : "A brief description of the parameter. This could contain examples of use" - }, - "required" : { - "type" : "boolean", - "description" : "Determines whether this parameter is mandatory. If the parameter location is \"path\", this property is REQUIRED and its value MUST be true. Otherwise, the property MAY be included and its default value is false" - }, - "get$ref" : { - "type" : "string", - "description" : "The available paths and operations for the API" - }, - "allowEmptyValue" : { - "type" : "boolean", - "description" : "Sets the ability to pass empty-valued parameters. This is valid only for query parameters and allows sending a parameter with an empty value" - } - } - }, - "ActionImport" : { - "type" : "object", - "properties" : { - "action" : { - "type" : "string" - }, - "enabled" : { - "type" : "boolean" - } - } - }, - "ArrayModel" : { - "allOf" : [ { - "$ref" : "#/definitions/Model" - }, { - "type" : "object", - "properties" : { - "items" : { - "$ref" : "#/definitions/Property" - }, - "minItems" : { - "type" : "integer", - "format" : "int32" - }, - "maxItems" : { - "type" : "integer", - "format" : "int32" - } - } - } ] - }, - "ArrayProperty" : { - "allOf" : [ { - "$ref" : "#/definitions/Property" - }, { - "type" : "object", - "properties" : { - "uniqueItems" : { - "type" : "boolean" - }, - "items" : { - "$ref" : "#/definitions/Property" - }, - "maxItems" : { - "type" : "integer", - "format" : "int32" - }, - "minItems" : { - "type" : "integer", - "format" : "int32" - } - } - } ] - }, - "ArraySchema" : { - "allOf" : [ { - "$ref" : "#/definitions/Schema" - }, { - "type" : "object", - "properties" : { - "type" : { - "type" : "string" - }, - "items" : { - "$ref" : "#/definitions/Schema" - } - } - } ] - }, - "AuthorizationValue" : { - "type" : "object", - "properties" : { - "value" : { - "type" : "string" - }, - "type" : { - "type" : "string" - }, - "keyName" : { - "type" : "string" - } - } - }, - "BaseIntegerProperty" : { - "allOf" : [ { - "$ref" : "#/definitions/Property" - }, { - "type" : "object", - "properties" : { - "minimum" : { - "type" : "number" - }, - "maximum" : { - "type" : "number" - }, - "multipleOf" : { - "type" : "number" - }, - "exclusiveMinimum" : { - "type" : "boolean" - }, - "exclusiveMaximum" : { - "type" : "boolean" - } - } - } ] - }, - "BodyParameter" : { - "allOf" : [ { - "$ref" : "#/definitions/Parameter" - }, { - "type" : "object", - "properties" : { - "name" : { - "type" : "string", - "description" : "The name of the parameter. Parameter names are case sensitive" - }, - "in" : { - "type" : "string", - "description" : "The location of the parameter. Possible values are \"query\", \"header\", \"path\" or \"cookie\"" - }, - "description" : { - "type" : "string", - "description" : "A brief description of the parameter. This could contain examples of use" - }, - "required" : { - "type" : "boolean", - "description" : "Determines whether this parameter is mandatory. If the parameter location is \"path\", this property is REQUIRED and its value MUST be true. Otherwise, the property MAY be included and its default value is false" - }, - "get$ref" : { - "type" : "string", - "description" : "The available paths and operations for the API" - }, - "allowEmptyValue" : { - "type" : "boolean", - "description" : "Sets the ability to pass empty-valued parameters. This is valid only for query parameters and allows sending a parameter with an empty value" - }, - "schema" : { - "type" : "object", - "additionalProperties" : { - "$ref" : "#/definitions/Model" - } - }, - "examples" : { - "type" : "object", - "additionalProperties" : { - "type" : "string" - } - } - } - } ] - }, - "BooleanProperty" : { - "allOf" : [ { - "$ref" : "#/definitions/Property" - }, { - "type" : "object", - "properties" : { - "enum" : { - "type" : "array", - "items" : { - "type" : "boolean" - } - } - } - } ] - }, - "BooleanSchema" : { - "allOf" : [ { - "$ref" : "#/definitions/Schema" - }, { - "type" : "object", - "properties" : { - "type" : { - "type" : "string" - } - } - } ] - }, - "Callback" : { - "type" : "object", - "properties" : { - "vendorExtensions" : { - "type" : "object", - "additionalProperties" : { - "type" : "object" - } - }, - "get$ref" : { - "type" : "string" - }, - "callbacksMap" : { - "type" : "object", - "description" : "A Path Item Object used to define a callback request and expected responses", - "additionalProperties" : { - "$ref" : "#/definitions/Path" - } - } - } - }, - "Components" : { - "type" : "object", - "properties" : { - "vendorExtensions" : { - "type" : "object", - "additionalProperties" : { - "type" : "object" - } - }, - "schemas" : { - "type" : "object", - "description" : "An object to hold reusable schema objects", - "additionalProperties" : { - "$ref" : "#/definitions/Schema" - } - }, - "responses" : { - "type" : "object", - "description" : "An object to hold reusable response objects", - "additionalProperties" : { - "$ref" : "#/definitions/Response" - } - }, - "parameters" : { - "type" : "object", - "description" : "An object to hold reusable parameter objects", - "additionalProperties" : { - "$ref" : "#/definitions/Parameter" - } - }, - "examples" : { - "type" : "object", - "description" : "An object to hold reusable example objects", - "additionalProperties" : { - "$ref" : "#/definitions/Example" - } - }, - "requestBodies" : { - "type" : "object", - "description" : "An object to hold reusable requestBody objects", - "additionalProperties" : { - "$ref" : "#/definitions/RequestBody" - } - }, - "headers" : { - "type" : "object", - "description" : "An object to hold reusable header objects", - "additionalProperties" : { - "$ref" : "#/definitions/Header" - } - }, - "securitySchemes" : { - "type" : "object", - "description" : "An object to hold reusable securityScheme objects", - "additionalProperties" : { - "$ref" : "#/definitions/SecurityScheme" - } - }, - "links" : { - "type" : "object", - "description" : "An object to hold reusable link objects", - "additionalProperties" : { - "$ref" : "#/definitions/Link" - } - }, - "callbacks" : { - "type" : "object", - "description" : "An object to hold reusable callback objects", - "additionalProperties" : { - "$ref" : "#/definitions/Callback" - } - } - } - }, - "ComposedModel" : { - "allOf" : [ { - "$ref" : "#/definitions/Model" - }, { - "type" : "object", - "properties" : { - "allOf" : { - "type" : "array", - "items" : { - "$ref" : "#/definitions/Model" - } - }, - "anyOf" : { - "type" : "array", - "items" : { - "$ref" : "#/definitions/Model" - } - }, - "oneOf" : { - "type" : "array", - "items" : { - "$ref" : "#/definitions/Model" - } - }, - "parent" : { - "$ref" : "#/definitions/Model" - }, - "child" : { - "$ref" : "#/definitions/Model" - }, - "interfaces" : { - "type" : "array", - "items" : { - "$ref" : "#/definitions/Model" - } - } - } - } ] - }, - "ComposedProperty" : { - "allOf" : [ { - "$ref" : "#/definitions/Property" - }, { - "type" : "object", - "properties" : { - "allOf" : { - "type" : "array", - "items" : { - "$ref" : "#/definitions/Property" - } - }, - "anyOf" : { - "type" : "array", - "items" : { - "$ref" : "#/definitions/Property" - } - }, - "oneOf" : { - "type" : "array", - "items" : { - "$ref" : "#/definitions/Property" - } - } - } - } ] - }, - "ComposedSchema" : { - "allOf" : [ { - "$ref" : "#/definitions/Schema" - }, { - "type" : "object", - "properties" : { - "allOf" : { - "type" : "array", - "description" : "Must be valid against all of the subschemas", - "items" : { - "$ref" : "#/definitions/Schema" - } - }, - "anyOf" : { - "type" : "array", - "description" : "Must be valid against any of the subschemas", - "items" : { - "$ref" : "#/definitions/Schema" - } - }, - "oneOf" : { - "type" : "array", - "description" : "Must be valid against exactly one of the subschemas", - "items" : { - "$ref" : "#/definitions/Schema" - } - } - } - } ] - }, - "Contact" : { - "type" : "object", - "properties" : { - "name" : { - "type" : "string", - "description" : "The identifying name of the contact person/organization" - }, - "url" : { - "type" : "string", - "description" : "The URL pointing to the contact information" - }, - "email" : { - "type" : "string", - "description" : "The email address of the contact person/organization" - } - } - }, - "CookieParameter" : { - "allOf" : [ { - "$ref" : "#/definitions/Parameter" - }, { - "type" : "object", - "properties" : { - "name" : { - "type" : "string", - "description" : "The name of the parameter. Parameter names are case sensitive" - }, - "in" : { - "type" : "string", - "description" : "The location of the parameter. Possible values are \"query\", \"header\", \"path\" or \"cookie\"" - }, - "description" : { - "type" : "string", - "description" : "A brief description of the parameter. This could contain examples of use" - }, - "required" : { - "type" : "boolean", - "description" : "Determines whether this parameter is mandatory. If the parameter location is \"path\", this property is REQUIRED and its value MUST be true. Otherwise, the property MAY be included and its default value is false" - }, - "get$ref" : { - "type" : "string", - "description" : "The available paths and operations for the API" - }, - "allowEmptyValue" : { - "type" : "boolean", - "description" : "Sets the ability to pass empty-valued parameters. This is valid only for query parameters and allows sending a parameter with an empty value" - }, - "deprecated" : { - "type" : "boolean", - "description" : "Determines whether this parameter is mandatory. If the parameter location is \"path\", this property is REQUIRED and its value MUST be true. Otherwise, the property MAY be included and its default value is false" - }, - "style" : { - "type" : "string", - "description" : "Describes how the parameter value will be serialized depending on the type of the parameter value. Default values (based on value of in): for query - form; for path - simple; for header - simple; for cookie - form", - "enum" : [ "MATRIX", "LABEL", "FORM", "SIMPLE", "SPACEDELIMITED", "PIPEDELIMITED", "DEEPOBJECT" ] - }, - "explode" : { - "type" : "boolean", - "description" : "When this is true, parameter values of type array or object generate separate parameters for each value of the array or key-value pair of the map. For other types of parameters this property has no effect. When style is form, the default value is true. For all other styles, the default value is false" - }, - "allowReserved" : { - "type" : "boolean", - "description" : "Determines whether the parameter value SHOULD allow reserved characters, as defined by RFC3986 :/?#[]@!$&'()*+,;= to be included without percent-encoding. This property only applies to parameters with an in value of query. The default value is false" - }, - "examples" : { - "type" : "object", - "description" : "Examples of the media type. Each example SHOULD contain a value in the correct format as specified in the parameter encoding. The examples field is mutually exclusive of the example field. Furthermore, if referencing a schema which contains an example, the examples value SHALL override the example provided by the schema", - "additionalProperties" : { - "$ref" : "#/definitions/Example" - } - }, - "extendedExample" : { - "type" : "object", - "description" : "Example of the media type. The example SHOULD match the specified schema and encoding properties if present. The example field is mutually exclusive of the examples field. Furthermore, if referencing a schema which contains an example, the example value SHALL override the example provided by the schema. To represent examples of media types that cannot naturally be represented in JSON or YAML, a string value can contain the example with escaping where necessary" - }, - "content" : { - "type" : "object", - "description" : "A map containing the representations for the parameter. The key is the media type and the value describes it. The map MUST only contain one entry", - "additionalProperties" : { - "$ref" : "#/definitions/MediaType" - } - }, - "xpath" : { - "$ref" : "#/definitions/Xpath" - }, - "default" : { - "type" : "string" - }, - "parameterSchema" : { - "$ref" : "#/definitions/Schema" - }, - "_enum" : { - "type" : "array", - "items" : { - "type" : "string" - } - } - } - } ] - }, - "DateTimeProperty" : { - "allOf" : [ { - "$ref" : "#/definitions/Property" - }, { - "type" : "object", - "properties" : { - "enum" : { - "type" : "array", - "items" : { - "type" : "object" - } - } - } - } ] - }, - "DecimalProperty" : { - "allOf" : [ { - "$ref" : "#/definitions/Property" - }, { - "type" : "object", - "properties" : { - "minimum" : { - "type" : "number" - }, - "maximum" : { - "type" : "number" - }, - "multipleOf" : { - "type" : "number" - }, - "exclusiveMinimum" : { - "type" : "boolean" - }, - "exclusiveMaximum" : { - "type" : "boolean" - } - } - } ] - }, - "EntitySet" : { - "type" : "object", - "properties" : { - "entityType" : { - "type" : "string" - }, - "parameters" : { - "type" : "object", - "additionalProperties" : { - "type" : "array", - "items" : { - "type" : "string" - } - } - }, - "enabled" : { - "type" : "boolean" - } - } - }, - "EntityType" : { - "type" : "object", - "properties" : { - "properties" : { - "type" : "object", - "additionalProperties" : { - "type" : "object" - } - }, - "navigationProperties" : { - "type" : "object", - "additionalProperties" : { - "$ref" : "#/definitions/EntitySet" - } - }, - "methods" : { - "type" : "object", - "additionalProperties" : { - "$ref" : "#/definitions/MethodParameters" - } - } - } - }, - "Example" : { - "type" : "object", - "properties" : { - "vendorExtensions" : { - "type" : "object", - "additionalProperties" : { - "type" : "object" - } - }, - "summary" : { - "type" : "string", - "description" : "Short description for the example" - }, - "description" : { - "type" : "string", - "description" : "Long description for the example" - }, - "value" : { - "type" : "object", - "description" : "Embedded literal example. The value field and externalValue field are mutually exclusive. To represent examples of media types that cannot naturally represented in JSON or YAML, use a string value to contain the example, escaping where necessary" - }, - "externalValue" : { - "type" : "string", - "description" : "A URL that points to the literal example. This provides the capability to reference examples that cannot easily be included in JSON or YAML documents. The value field and externalValue field are mutually exclusive" - }, - "get$ref" : { - "type" : "string" - } - } - }, - "ExternalDocs" : { - "type" : "object", - "properties" : { - "vendorExtensions" : { - "type" : "object", - "additionalProperties" : { - "type" : "object" - } - }, - "description" : { - "type" : "string", - "description" : "A short description of the target documentation" - }, - "url" : { - "type" : "string", - "description" : "The URL for the target documentation" - } - } - }, - "FormParameter" : { - "allOf" : [ { - "$ref" : "#/definitions/Parameter" - }, { - "type" : "object", - "properties" : { - "name" : { - "type" : "string", - "description" : "The name of the parameter. Parameter names are case sensitive" - }, - "in" : { - "type" : "string", - "description" : "The location of the parameter. Possible values are \"query\", \"header\", \"path\" or \"cookie\"" - }, - "description" : { - "type" : "string", - "description" : "A brief description of the parameter. This could contain examples of use" - }, - "required" : { - "type" : "boolean", - "description" : "Determines whether this parameter is mandatory. If the parameter location is \"path\", this property is REQUIRED and its value MUST be true. Otherwise, the property MAY be included and its default value is false" - }, - "get$ref" : { - "type" : "string", - "description" : "The available paths and operations for the API" - }, - "allowEmptyValue" : { - "type" : "boolean", - "description" : "Sets the ability to pass empty-valued parameters. This is valid only for query parameters and allows sending a parameter with an empty value" - }, - "deprecated" : { - "type" : "boolean", - "description" : "Determines whether this parameter is mandatory. If the parameter location is \"path\", this property is REQUIRED and its value MUST be true. Otherwise, the property MAY be included and its default value is false" - }, - "style" : { - "type" : "string", - "description" : "Describes how the parameter value will be serialized depending on the type of the parameter value. Default values (based on value of in): for query - form; for path - simple; for header - simple; for cookie - form", - "enum" : [ "MATRIX", "LABEL", "FORM", "SIMPLE", "SPACEDELIMITED", "PIPEDELIMITED", "DEEPOBJECT" ] - }, - "explode" : { - "type" : "boolean", - "description" : "When this is true, parameter values of type array or object generate separate parameters for each value of the array or key-value pair of the map. For other types of parameters this property has no effect. When style is form, the default value is true. For all other styles, the default value is false" - }, - "allowReserved" : { - "type" : "boolean", - "description" : "Determines whether the parameter value SHOULD allow reserved characters, as defined by RFC3986 :/?#[]@!$&'()*+,;= to be included without percent-encoding. This property only applies to parameters with an in value of query. The default value is false" - }, - "examples" : { - "type" : "object", - "description" : "Examples of the media type. Each example SHOULD contain a value in the correct format as specified in the parameter encoding. The examples field is mutually exclusive of the example field. Furthermore, if referencing a schema which contains an example, the examples value SHALL override the example provided by the schema", - "additionalProperties" : { - "$ref" : "#/definitions/Example" - } - }, - "extendedExample" : { - "type" : "object", - "description" : "Example of the media type. The example SHOULD match the specified schema and encoding properties if present. The example field is mutually exclusive of the examples field. Furthermore, if referencing a schema which contains an example, the example value SHALL override the example provided by the schema. To represent examples of media types that cannot naturally be represented in JSON or YAML, a string value can contain the example with escaping where necessary" - }, - "content" : { - "type" : "object", - "description" : "A map containing the representations for the parameter. The key is the media type and the value describes it. The map MUST only contain one entry", - "additionalProperties" : { - "$ref" : "#/definitions/MediaType" - } - }, - "xpath" : { - "$ref" : "#/definitions/Xpath" - }, - "default" : { - "type" : "string" - }, - "parameterSchema" : { - "$ref" : "#/definitions/Schema" - }, - "_enum" : { - "type" : "array", - "items" : { - "type" : "string" - } - } - } - } ] - }, - "FunctionImport" : { - "type" : "object", - "properties" : { - "function" : { - "type" : "string" - }, - "enabled" : { - "type" : "boolean" - } - } - }, - "GatewaySchema" : { - "allOf" : [ { - "$ref" : "#/definitions/Schema" - }, { - "type" : "object", - "properties" : { - "type" : { - "type" : "string" - }, - "schema" : { - "type" : "string" - } - } - } ] - }, - "Header" : { - "type" : "object", - "properties" : { - "vendorExtensions" : { - "type" : "object", - "additionalProperties" : { - "type" : "object" - } - }, - "name" : { - "type" : "string", - "description" : "The name of the parameter. Parameter names are case sensitive" - }, - "in" : { - "type" : "string", - "description" : "The location of the parameter. Possible values are \"query\", \"header\", \"path\" or \"cookie\"" - }, - "description" : { - "type" : "string", - "description" : "A brief description of the parameter. This could contain examples of use" - }, - "required" : { - "type" : "boolean", - "description" : "Determines whether this parameter is mandatory. If the parameter location is \"path\", this property is REQUIRED and its value MUST be true. Otherwise, the property MAY be included and its default value is false" - }, - "get$ref" : { - "type" : "string", - "description" : "The available paths and operations for the API" - }, - "allowEmptyValue" : { - "type" : "boolean", - "description" : "Sets the ability to pass empty-valued parameters. This is valid only for query parameters and allows sending a parameter with an empty value" - }, - "deprecated" : { - "type" : "boolean", - "description" : "Determines whether this parameter is mandatory. If the parameter location is \"path\", this property is REQUIRED and its value MUST be true. Otherwise, the property MAY be included and its default value is false" - }, - "style" : { - "type" : "string", - "description" : "Describes how the parameter value will be serialized depending on the type of the parameter value. Default values (based on value of in): for query - form; for path - simple; for header - simple; for cookie - form", - "enum" : [ "MATRIX", "LABEL", "FORM", "SIMPLE", "SPACEDELIMITED", "PIPEDELIMITED", "DEEPOBJECT" ] - }, - "explode" : { - "type" : "boolean", - "description" : "When this is true, parameter values of type array or object generate separate parameters for each value of the array or key-value pair of the map. For other types of parameters this property has no effect. When style is form, the default value is true. For all other styles, the default value is false" - }, - "allowReserved" : { - "type" : "boolean", - "description" : "Determines whether the parameter value SHOULD allow reserved characters, as defined by RFC3986 :/?#[]@!$&'()*+,;= to be included without percent-encoding. This property only applies to parameters with an in value of query. The default value is false" - }, - "examples" : { - "type" : "object", - "description" : "Examples of the media type. Each example SHOULD contain a value in the correct format as specified in the parameter encoding. The examples field is mutually exclusive of the example field. Furthermore, if referencing a schema which contains an example, the examples value SHALL override the example provided by the schema", - "additionalProperties" : { - "$ref" : "#/definitions/Example" - } - }, - "extendedExample" : { - "type" : "object", - "description" : "Example of the media type. The example SHOULD match the specified schema and encoding properties if present. The example field is mutually exclusive of the examples field. Furthermore, if referencing a schema which contains an example, the example value SHALL override the example provided by the schema. To represent examples of media types that cannot naturally be represented in JSON or YAML, a string value can contain the example with escaping where necessary" - }, - "content" : { - "type" : "object", - "description" : "A map containing the representations for the parameter. The key is the media type and the value describes it. The map MUST only contain one entry", - "additionalProperties" : { - "$ref" : "#/definitions/MediaType" - } - }, - "xpath" : { - "$ref" : "#/definitions/Xpath" - }, - "default" : { - "type" : "string" - }, - "parameterSchema" : { - "$ref" : "#/definitions/Schema" - }, - "_enum" : { - "type" : "array", - "items" : { - "type" : "string" - } - } - } - }, - "HeaderParameter" : { - "allOf" : [ { - "$ref" : "#/definitions/Parameter" - }, { - "type" : "object", - "properties" : { - "name" : { - "type" : "string", - "description" : "The name of the parameter. Parameter names are case sensitive" - }, - "in" : { - "type" : "string", - "description" : "The location of the parameter. Possible values are \"query\", \"header\", \"path\" or \"cookie\"" - }, - "description" : { - "type" : "string", - "description" : "A brief description of the parameter. This could contain examples of use" - }, - "required" : { - "type" : "boolean", - "description" : "Determines whether this parameter is mandatory. If the parameter location is \"path\", this property is REQUIRED and its value MUST be true. Otherwise, the property MAY be included and its default value is false" - }, - "get$ref" : { - "type" : "string", - "description" : "The available paths and operations for the API" - }, - "allowEmptyValue" : { - "type" : "boolean", - "description" : "Sets the ability to pass empty-valued parameters. This is valid only for query parameters and allows sending a parameter with an empty value" - }, - "deprecated" : { - "type" : "boolean", - "description" : "Determines whether this parameter is mandatory. If the parameter location is \"path\", this property is REQUIRED and its value MUST be true. Otherwise, the property MAY be included and its default value is false" - }, - "style" : { - "type" : "string", - "description" : "Describes how the parameter value will be serialized depending on the type of the parameter value. Default values (based on value of in): for query - form; for path - simple; for header - simple; for cookie - form", - "enum" : [ "MATRIX", "LABEL", "FORM", "SIMPLE", "SPACEDELIMITED", "PIPEDELIMITED", "DEEPOBJECT" ] - }, - "explode" : { - "type" : "boolean", - "description" : "When this is true, parameter values of type array or object generate separate parameters for each value of the array or key-value pair of the map. For other types of parameters this property has no effect. When style is form, the default value is true. For all other styles, the default value is false" - }, - "allowReserved" : { - "type" : "boolean", - "description" : "Determines whether the parameter value SHOULD allow reserved characters, as defined by RFC3986 :/?#[]@!$&'()*+,;= to be included without percent-encoding. This property only applies to parameters with an in value of query. The default value is false" - }, - "examples" : { - "type" : "object", - "description" : "Examples of the media type. Each example SHOULD contain a value in the correct format as specified in the parameter encoding. The examples field is mutually exclusive of the example field. Furthermore, if referencing a schema which contains an example, the examples value SHALL override the example provided by the schema", - "additionalProperties" : { - "$ref" : "#/definitions/Example" - } - }, - "extendedExample" : { - "type" : "object", - "description" : "Example of the media type. The example SHOULD match the specified schema and encoding properties if present. The example field is mutually exclusive of the examples field. Furthermore, if referencing a schema which contains an example, the example value SHALL override the example provided by the schema. To represent examples of media types that cannot naturally be represented in JSON or YAML, a string value can contain the example with escaping where necessary" - }, - "content" : { - "type" : "object", - "description" : "A map containing the representations for the parameter. The key is the media type and the value describes it. The map MUST only contain one entry", - "additionalProperties" : { - "$ref" : "#/definitions/MediaType" - } - }, - "xpath" : { - "$ref" : "#/definitions/Xpath" - }, - "default" : { - "type" : "string" - }, - "parameterSchema" : { - "$ref" : "#/definitions/Schema" - }, - "_enum" : { - "type" : "array", - "items" : { - "type" : "string" - } - } - } - } ] - }, - "Info" : { - "type" : "object", - "properties" : { - "vendorExtensions" : { - "type" : "object", - "additionalProperties" : { - "type" : "object" - } - }, - "description" : { - "type" : "string", - "description" : "A short description of the application" - }, - "version" : { - "type" : "string", - "description" : "Version of the API" - }, - "title" : { - "type" : "string", - "description" : "The title of the application" - }, - "termsOfService" : { - "type" : "string", - "description" : "A URL to the Terms of Service for the API" - }, - "contact" : { - "$ref" : "#/definitions/Contact" - }, - "license" : { - "$ref" : "#/definitions/Licence" - } - } - }, - "InputAPI" : { - "type" : "object", - "required" : [ "apiName", "type" ], - "properties" : { - "url" : { - "type" : "string", - "description" : "Required when creating an API by importing URL" - }, - "authorizationValue" : { - "$ref" : "#/definitions/AuthorizationValue" - }, - "apiDefinition" : { - "$ref" : "#/definitions/API" - }, - "apiName" : { - "type" : "string" - }, - "apiVersion" : { - "type" : "string" - }, - "apiDescription" : { - "type" : "string" - }, - "maturityState" : { - "type" : "string" - }, - "type" : { - "type" : "string" - }, - "rootFileName" : { - "type" : "string", - "description" : "Required when creating an API by importing protected URL" - }, - "teams" : { - "type" : "array", - "description" : "Contains teams to which the API must be assigned.", - "items" : { - "$ref" : "#/definitions/Team" - } - } - } - }, - "IntegerSchema" : { - "allOf" : [ { - "$ref" : "#/definitions/Schema" - }, { - "type" : "object", - "properties" : { - "type" : { - "type" : "string" - }, - "format" : { - "type" : "string" - }, - "default" : { - "$ref" : "#/definitions/Number" - }, - "enum" : { - "type" : "array", - "items" : { - "$ref" : "#/definitions/Number" - } - } - } - } ] - }, - "Licence" : { - "type" : "object", - "properties" : { - "vendorExtensions" : { - "type" : "object", - "additionalProperties" : { - "type" : "object" - } - }, - "name" : { - "type" : "string", - "description" : "The license name used for the API" - }, - "url" : { - "type" : "string", - "description" : "A URL to the license used for the API" - } - } - }, - "Link" : { - "type" : "object", - "properties" : { - "vendorExtensions" : { - "type" : "object", - "additionalProperties" : { - "type" : "object" - } - }, - "operationRef" : { - "type" : "string", - "description" : "A relative or absolute reference to an OAS operation. This field is mutually exclusive of the operationId field, and MUST point to an Operation Object. Relative operationRef values MAY be used to locate an existing Operation Object in the API definition" - }, - "operationId" : { - "type" : "string", - "description" : "The name of an existing, resolvable OAS operation, as defined with a unique operationId. This field is mutually exclusive of the operationRef field" - }, - "parameters" : { - "type" : "object", - "description" : "A map representing parameters to pass to an operation as specified with operationId or identified via operationRef. The key is the parameter name to be used, whereas the value can be a constant or an expression to be evaluated and passed to the linked operation. The parameter name can be qualified using the parameter location [{in}.]{name} for operations that use the same parameter name in different locations (e.g. path.id)", - "additionalProperties" : { - "type" : "string" - } - }, - "requestBody" : { - "type" : "string", - "description" : "A literal value or {expression} to use as a request body when calling the target operation" - }, - "description" : { - "type" : "string", - "description" : "A description of the link" - }, - "get$ref" : { - "type" : "string" - } - } - }, - "MapProperty" : { - "allOf" : [ { - "$ref" : "#/definitions/Property" - }, { - "type" : "object", - "properties" : { - "additionalProperties" : { - "$ref" : "#/definitions/Property" - }, - "minProperties" : { - "type" : "integer", - "format" : "int32" - }, - "maxProperties" : { - "type" : "integer", - "format" : "int32" - } - } - } ] - }, - "MediaType" : { - "type" : "object", - "properties" : { - "vendorExtensions" : { - "type" : "object", - "additionalProperties" : { - "type" : "object" - } - }, - "schema" : { - "$ref" : "#/definitions/Schema" - }, - "examples" : { - "type" : "object", - "description" : "Examples of the media type. Each example object SHOULD match the media type and specified schema if present. The examples field is mutually exclusive of the example field. Furthermore, if referencing a schema which contains an example, the examples value SHALL override the example provided by the schema", - "additionalProperties" : { - "$ref" : "#/definitions/Example" - } - }, - "example" : { - "type" : "object", - "description" : "Example of the media type. The example object SHOULD be in the correct format as specified by the media type. The example field is mutually exclusive of the examples field. Furthermore, if referencing a schema which contains an example, the example value SHALL override the example provided by the schema" - } - } - }, - "MessageFrame" : { - "type" : "object", - "properties" : { - "origin" : { - "type" : "string", - "enum" : [ "Server", "Client" ] - }, - "type" : { - "type" : "string", - "enum" : [ "Binary", "Text" ] - }, - "messagePayload" : { - "type" : "string" - }, - "messageDescription" : { - "type" : "string" - } - } - }, - "MethodParameters" : { - "type" : "object", - "properties" : { - "enabled" : { - "type" : "boolean" - }, - "parameters" : { - "type" : "object", - "additionalProperties" : { - "type" : "string" - } - }, - "returnType" : { - "type" : "string" - } - } - }, - "MockedCondition" : { - "type" : "object", - "properties" : { - "mockedConditionParameter" : { - "type" : "string", - "enum" : [ "Body", "Header", "QueryParameter" ] - }, - "mockedLevel1Operator" : { - "type" : "string", - "enum" : [ "Equals", "NotEquals", "ContainsKey", "ContainsKeyValue" ] - }, - "mockedLevel2Operator" : { - "type" : "string", - "enum" : [ "Equals", "NotEquals", "Contains", "StartsWith", "EndsWith" ] - }, - "value1" : { - "type" : "string" - }, - "value2" : { - "type" : "string" - }, - "conditionName" : { - "type" : "string" - } - } - }, - "MockedConditionsBasedCustomResponse" : { - "type" : "object", - "properties" : { - "mockedConditionList" : { - "type" : "array", - "items" : { - "$ref" : "#/definitions/MockedCondition" - } - }, - "mockedResponse" : { - "$ref" : "#/definitions/MockedResponse" - } - } - }, - "MockedResponse" : { - "type" : "object", - "properties" : { - "responseBody" : { - "type" : "object", - "additionalProperties" : { - "type" : "object" - } - }, - "responseHeaders" : { - "type" : "object", - "additionalProperties" : { - "type" : "object" - } - }, - "statusCode" : { - "type" : "string" - } - } - }, - "Model" : { - "type" : "object", - "discriminator" : "type", - "properties" : { - "properties" : { - "type" : "object", - "additionalProperties" : { - "type" : "object" - } - }, - "type" : { - "type" : "string" - }, - "title" : { - "type" : "string" - }, - "description" : { - "type" : "string" - }, - "example" : { - "type" : "object" - }, - "vendorExtensions" : { - "type" : "object", - "additionalProperties" : { - "type" : "object" - } - }, - "reference" : { - "type" : "string" - }, - "externalDocs" : { - "$ref" : "#/definitions/ExternalDocs" - } - } - }, - "ModelImpl" : { - "allOf" : [ { - "$ref" : "#/definitions/Model" - }, { - "type" : "object", - "properties" : { - "format" : { - "type" : "string" - }, - "name" : { - "type" : "string" - }, - "required" : { - "type" : "array", - "items" : { - "type" : "string" - } - }, - "properties" : { - "type" : "object", - "readOnly" : true, - "additionalProperties" : { - "$ref" : "#/definitions/Property" - } - }, - "discriminator" : { - "type" : "string" - }, - "xml" : { - "$ref" : "#/definitions/Xml" - }, - "defaultValue" : { - "type" : "object" - }, - "allowEmptyValue" : { - "type" : "boolean" - }, - "uniqueItems" : { - "type" : "boolean" - }, - "minimum" : { - "type" : "number" - }, - "maximum" : { - "type" : "number" - }, - "enum" : { - "type" : "array", - "items" : { - "type" : "string" - } - } - } - } ] - }, - "Namespaces" : { - "type" : "object", - "properties" : { - "prefix" : { - "type" : "string" - }, - "uri" : { - "type" : "string" - } - } - }, - "Number" : { - "type" : "object" - }, - "NumberSchema" : { - "allOf" : [ { - "$ref" : "#/definitions/Schema" - }, { - "type" : "object", - "properties" : { - "type" : { - "type" : "string" - }, - "default" : { - "type" : "number", - "description" : "The default value represents what would be assumed by the consumer of the input as the value of the schema if one is not provided. Unlike JSON Schema, the value MUST conform to the defined type for the Schema Object defined at the same level. For example, if type is string, then default can be \"foo\" but cannot be 1" - }, - "enum" : { - "type" : "array", - "items" : { - "type" : "number" - } - } - } - } ] - }, - "OAuth2Definition" : { - "type" : "object", - "properties" : { - "vendorExtensions" : { - "type" : "object", - "additionalProperties" : { - "type" : "object" - } - }, - "description" : { - "type" : "string" - }, - "type" : { - "type" : "string" - }, - "authorizationUrl" : { - "type" : "string" - }, - "authorizationGrants" : { - "type" : "array", - "items" : { - "type" : "string" - } - }, - "tokenUrl" : { - "type" : "string" - }, - "flow" : { - "type" : "string" - }, - "scopes" : { - "type" : "object", - "additionalProperties" : { - "type" : "object" - } - }, - "refreshUrl" : { - "type" : "string" - }, - "securitySchemeDescriptor" : { - "$ref" : "#/definitions/SecuritySchemeDescriptor" - } - } - }, - "OAuthFlows" : { - "type" : "object", - "properties" : { - "vendorExtensions" : { - "type" : "object", - "additionalProperties" : { - "type" : "object" - } - }, - "implicit" : { - "$ref" : "#/definitions/OAuth2Definition" - }, - "password" : { - "$ref" : "#/definitions/OAuth2Definition" - }, - "clientCredentials" : { - "$ref" : "#/definitions/OAuth2Definition" - }, - "authorizationCode" : { - "$ref" : "#/definitions/OAuth2Definition" - } - } - }, - "ODataAPI" : { - "allOf" : [ { - "$ref" : "#/definitions/API" - }, { - "type" : "object", - "properties" : { - "odataVersion" : { - "type" : "string" - }, - "serviceRoot" : { - "type" : "string" - }, - "serviceDocument" : { - "type" : "string" - }, - "metaDataDocument" : { - "type" : "string" - }, - "entitySets" : { - "type" : "object", - "additionalProperties" : { - "$ref" : "#/definitions/EntitySet" - } - }, - "singletons" : { - "type" : "object", - "additionalProperties" : { - "$ref" : "#/definitions/EntitySet" - } - }, - "actionImports" : { - "type" : "object", - "additionalProperties" : { - "$ref" : "#/definitions/ActionImport" - } - }, - "functionImports" : { - "type" : "object", - "additionalProperties" : { - "$ref" : "#/definitions/FunctionImport" - } - }, - "entityTypes" : { - "type" : "object", - "additionalProperties" : { - "$ref" : "#/definitions/EntityType" - } - }, - "actions" : { - "type" : "object", - "additionalProperties" : { - "$ref" : "#/definitions/EntityType" - } - }, - "functions" : { - "type" : "object", - "additionalProperties" : { - "$ref" : "#/definitions/EntityType" - } - }, - "tags" : { - "type" : "array", - "items" : { - "$ref" : "#/definitions/Tag" - } - }, - "apiTags" : { - "type" : "array", - "items" : { - "type" : "string" - } - }, - "serviceRegistryDisplayName" : { - "type" : "string", - "description" : "The name of the API in service registry when the API is published to a service registry." - } - } - } ] - }, - "ObjectProperty" : { - "allOf" : [ { - "$ref" : "#/definitions/Property" - }, { - "type" : "object", - "properties" : { - "properties" : { - "type" : "object", - "additionalProperties" : { - "$ref" : "#/definitions/Property" - } - } - } - } ] - }, - "ObjectSchema" : { - "allOf" : [ { - "$ref" : "#/definitions/Schema" - }, { - "type" : "object", - "properties" : { - "type" : { - "type" : "string" - } - } - } ] - }, - "Operation" : { - "type" : "object", - "properties" : { - "vendorExtensions" : { - "type" : "object", - "additionalProperties" : { - "type" : "object" - } - }, - "tags" : { - "type" : "array", - "description" : "A list of tags for API documentation control. Tags can be used for logical grouping of operations by resources or any other qualifier", - "items" : { - "type" : "string" - } - }, - "summary" : { - "type" : "string", - "description" : "A short summary of what the operation does" - }, - "description" : { - "type" : "string", - "description" : "A verbose explanation of the operation behavior" - }, - "operationId" : { - "type" : "string", - "description" : "Unique string used to identify the operation. The id MUST be unique among all operations described in the API. The operationId value is case-sensitive" - }, - "parameters" : { - "type" : "array", - "description" : "A list of parameters that are applicable for this operation. If a parameter is already defined at the Path Item, the new definition will override it but can never remove it", - "items" : { - "$ref" : "#/definitions/Parameter" - } - }, - "responses" : { - "type" : "object", - "description" : "The list of possible responses as they are returned from executing this operation", - "additionalProperties" : { - "$ref" : "#/definitions/Response" - } - }, - "mockedResponses" : { - "type" : "object", - "description" : "The list of possible mocked responses as they are returned from executing this operation and it's applicable only for mocked APIs", - "additionalProperties" : { - "$ref" : "#/definitions/MockedResponse" - } - }, - "mockedConditionsBasedCustomResponsesList" : { - "type" : "array", - "description" : "The list of mocked conditions and it's applicable only for mocked APIs", - "items" : { - "$ref" : "#/definitions/MockedConditionsBasedCustomResponse" - } - }, - "externalDocs" : { - "$ref" : "#/definitions/ExternalDocs" - }, - "deprecated" : { - "type" : "boolean", - "description" : "Declares this operation to be deprecated. Consumers SHOULD refrain from usage of the declared operation. Default value is false" - }, - "enabled" : { - "type" : "boolean" - }, - "scopes" : { - "type" : "array", - "items" : { - "type" : "string" - } - }, - "requestBody" : { - "$ref" : "#/definitions/RequestBody" - }, - "callbacks" : { - "type" : "object", - "description" : "An optional, string description, intended to apply to all operations in this path", - "additionalProperties" : { - "$ref" : "#/definitions/Callback" - } - } - } - }, - "Parameter" : { - "type" : "object", - "properties" : { - "vendorExtensions" : { - "type" : "object", - "additionalProperties" : { - "type" : "object" - } - }, - "name" : { - "type" : "string", - "description" : "The name of the parameter. Parameter names are case sensitive" - }, - "in" : { - "type" : "string", - "description" : "The location of the parameter. Possible values are \"query\", \"header\", \"path\" or \"cookie\"" - }, - "description" : { - "type" : "string", - "description" : "A brief description of the parameter. This could contain examples of use" - }, - "required" : { - "type" : "boolean", - "description" : "Determines whether this parameter is mandatory. If the parameter location is \"path\", this property is REQUIRED and its value MUST be true. Otherwise, the property MAY be included and its default value is false" - }, - "get$ref" : { - "type" : "string", - "description" : "The available paths and operations for the API" - }, - "allowEmptyValue" : { - "type" : "boolean", - "description" : "Sets the ability to pass empty-valued parameters. This is valid only for query parameters and allows sending a parameter with an empty value" - }, - "deprecated" : { - "type" : "boolean", - "description" : "Determines whether this parameter is mandatory. If the parameter location is \"path\", this property is REQUIRED and its value MUST be true. Otherwise, the property MAY be included and its default value is false" - }, - "style" : { - "type" : "string", - "description" : "Describes how the parameter value will be serialized depending on the type of the parameter value. Default values (based on value of in): for query - form; for path - simple; for header - simple; for cookie - form", - "enum" : [ "MATRIX", "LABEL", "FORM", "SIMPLE", "SPACEDELIMITED", "PIPEDELIMITED", "DEEPOBJECT" ] - }, - "explode" : { - "type" : "boolean", - "description" : "When this is true, parameter values of type array or object generate separate parameters for each value of the array or key-value pair of the map. For other types of parameters this property has no effect. When style is form, the default value is true. For all other styles, the default value is false" - }, - "allowReserved" : { - "type" : "boolean", - "description" : "Determines whether the parameter value SHOULD allow reserved characters, as defined by RFC3986 :/?#[]@!$&'()*+,;= to be included without percent-encoding. This property only applies to parameters with an in value of query. The default value is false" - }, - "examples" : { - "type" : "object", - "description" : "Examples of the media type. Each example SHOULD contain a value in the correct format as specified in the parameter encoding. The examples field is mutually exclusive of the example field. Furthermore, if referencing a schema which contains an example, the examples value SHALL override the example provided by the schema", - "additionalProperties" : { - "$ref" : "#/definitions/Example" - } - }, - "extendedExample" : { - "type" : "object", - "description" : "Example of the media type. The example SHOULD match the specified schema and encoding properties if present. The example field is mutually exclusive of the examples field. Furthermore, if referencing a schema which contains an example, the example value SHALL override the example provided by the schema. To represent examples of media types that cannot naturally be represented in JSON or YAML, a string value can contain the example with escaping where necessary" - }, - "content" : { - "type" : "object", - "description" : "A map containing the representations for the parameter. The key is the media type and the value describes it. The map MUST only contain one entry", - "additionalProperties" : { - "$ref" : "#/definitions/MediaType" - } - }, - "xpath" : { - "$ref" : "#/definitions/Xpath" - }, - "default" : { - "type" : "string" - }, - "parameterSchema" : { - "$ref" : "#/definitions/Schema" - }, - "_enum" : { - "type" : "array", - "items" : { - "type" : "string" - } - } - } - }, - "Path" : { - "type" : "object", - "properties" : { - "vendorExtensions" : { - "type" : "object", - "additionalProperties" : { - "type" : "object" - } - }, - "get" : { - "$ref" : "#/definitions/Operation" - }, - "put" : { - "$ref" : "#/definitions/Operation" - }, - "post" : { - "$ref" : "#/definitions/Operation" - }, - "head" : { - "$ref" : "#/definitions/Operation" - }, - "delete" : { - "$ref" : "#/definitions/Operation" - }, - "patch" : { - "$ref" : "#/definitions/Operation" - }, - "options" : { - "$ref" : "#/definitions/Operation" - }, - "trace" : { - "$ref" : "#/definitions/Operation" - }, - "parameters" : { - "type" : "array", - "description" : "A list of parameters that are applicable for all the operations described under this path. These parameters can be overridden at the operation level, but cannot be removed there", - "items" : { - "type" : "object" - } - }, - "scopes" : { - "type" : "array", - "items" : { - "type" : "string" - } - }, - "tags" : { - "type" : "array", - "items" : { - "type" : "string" - } - }, - "displayName" : { - "type" : "string" - }, - "description" : { - "type" : "string", - "description" : "An optional, string description, intended to apply to all operations in this path" - }, - "enabled" : { - "type" : "boolean" - }, - "get$ref" : { - "type" : "string", - "description" : "Allows for an external definition of this path item" - }, - "summary" : { - "type" : "string", - "description" : "An optional, string summary, intended to apply to all operations in this path" - } - } - }, - "PathParameter" : { - "allOf" : [ { - "$ref" : "#/definitions/Parameter" - }, { - "type" : "object", - "properties" : { - "name" : { - "type" : "string", - "description" : "The name of the parameter. Parameter names are case sensitive" - }, - "in" : { - "type" : "string", - "description" : "The location of the parameter. Possible values are \"query\", \"header\", \"path\" or \"cookie\"" - }, - "description" : { - "type" : "string", - "description" : "A brief description of the parameter. This could contain examples of use" - }, - "required" : { - "type" : "boolean", - "description" : "Determines whether this parameter is mandatory. If the parameter location is \"path\", this property is REQUIRED and its value MUST be true. Otherwise, the property MAY be included and its default value is false" - }, - "get$ref" : { - "type" : "string", - "description" : "The available paths and operations for the API" - }, - "allowEmptyValue" : { - "type" : "boolean", - "description" : "Sets the ability to pass empty-valued parameters. This is valid only for query parameters and allows sending a parameter with an empty value" - }, - "deprecated" : { - "type" : "boolean", - "description" : "Determines whether this parameter is mandatory. If the parameter location is \"path\", this property is REQUIRED and its value MUST be true. Otherwise, the property MAY be included and its default value is false" - }, - "style" : { - "type" : "string", - "description" : "Describes how the parameter value will be serialized depending on the type of the parameter value. Default values (based on value of in): for query - form; for path - simple; for header - simple; for cookie - form", - "enum" : [ "MATRIX", "LABEL", "FORM", "SIMPLE", "SPACEDELIMITED", "PIPEDELIMITED", "DEEPOBJECT" ] - }, - "explode" : { - "type" : "boolean", - "description" : "When this is true, parameter values of type array or object generate separate parameters for each value of the array or key-value pair of the map. For other types of parameters this property has no effect. When style is form, the default value is true. For all other styles, the default value is false" - }, - "allowReserved" : { - "type" : "boolean", - "description" : "Determines whether the parameter value SHOULD allow reserved characters, as defined by RFC3986 :/?#[]@!$&'()*+,;= to be included without percent-encoding. This property only applies to parameters with an in value of query. The default value is false" - }, - "examples" : { - "type" : "object", - "description" : "Examples of the media type. Each example SHOULD contain a value in the correct format as specified in the parameter encoding. The examples field is mutually exclusive of the example field. Furthermore, if referencing a schema which contains an example, the examples value SHALL override the example provided by the schema", - "additionalProperties" : { - "$ref" : "#/definitions/Example" - } - }, - "extendedExample" : { - "type" : "object", - "description" : "Example of the media type. The example SHOULD match the specified schema and encoding properties if present. The example field is mutually exclusive of the examples field. Furthermore, if referencing a schema which contains an example, the example value SHALL override the example provided by the schema. To represent examples of media types that cannot naturally be represented in JSON or YAML, a string value can contain the example with escaping where necessary" - }, - "content" : { - "type" : "object", - "description" : "A map containing the representations for the parameter. The key is the media type and the value describes it. The map MUST only contain one entry", - "additionalProperties" : { - "$ref" : "#/definitions/MediaType" - } - }, - "xpath" : { - "$ref" : "#/definitions/Xpath" - }, - "default" : { - "type" : "string" - }, - "parameterSchema" : { - "$ref" : "#/definitions/Schema" - }, - "_enum" : { - "type" : "array", - "items" : { - "type" : "string" - } - } - } - } ] - }, - "Property" : { - "type" : "object", - "discriminator" : "type", - "properties" : { - "name" : { - "type" : "string" - }, - "readOnly" : { - "type" : "boolean" - }, - "type" : { - "type" : "string" - }, - "title" : { - "type" : "string" - }, - "description" : { - "type" : "string" - }, - "required" : { - "type" : "boolean" - }, - "format" : { - "type" : "string" - }, - "access" : { - "type" : "string" - }, - "example" : { - "type" : "object" - }, - "vendorExtensions" : { - "type" : "object", - "additionalProperties" : { - "type" : "object" - } - }, - "position" : { - "type" : "integer", - "format" : "int32" - }, - "xml" : { - "$ref" : "#/definitions/Xml" - }, - "allowEmptyValue" : { - "type" : "boolean" - } - } - }, - "QueryParameter" : { - "allOf" : [ { - "$ref" : "#/definitions/Parameter" - }, { - "type" : "object", - "properties" : { - "name" : { - "type" : "string", - "description" : "The name of the parameter. Parameter names are case sensitive" - }, - "in" : { - "type" : "string", - "description" : "The location of the parameter. Possible values are \"query\", \"header\", \"path\" or \"cookie\"" - }, - "description" : { - "type" : "string", - "description" : "A brief description of the parameter. This could contain examples of use" - }, - "required" : { - "type" : "boolean", - "description" : "Determines whether this parameter is mandatory. If the parameter location is \"path\", this property is REQUIRED and its value MUST be true. Otherwise, the property MAY be included and its default value is false" - }, - "get$ref" : { - "type" : "string", - "description" : "The available paths and operations for the API" - }, - "allowEmptyValue" : { - "type" : "boolean", - "description" : "Sets the ability to pass empty-valued parameters. This is valid only for query parameters and allows sending a parameter with an empty value" - }, - "deprecated" : { - "type" : "boolean", - "description" : "Determines whether this parameter is mandatory. If the parameter location is \"path\", this property is REQUIRED and its value MUST be true. Otherwise, the property MAY be included and its default value is false" - }, - "style" : { - "type" : "string", - "description" : "Describes how the parameter value will be serialized depending on the type of the parameter value. Default values (based on value of in): for query - form; for path - simple; for header - simple; for cookie - form", - "enum" : [ "MATRIX", "LABEL", "FORM", "SIMPLE", "SPACEDELIMITED", "PIPEDELIMITED", "DEEPOBJECT" ] - }, - "explode" : { - "type" : "boolean", - "description" : "When this is true, parameter values of type array or object generate separate parameters for each value of the array or key-value pair of the map. For other types of parameters this property has no effect. When style is form, the default value is true. For all other styles, the default value is false" - }, - "allowReserved" : { - "type" : "boolean", - "description" : "Determines whether the parameter value SHOULD allow reserved characters, as defined by RFC3986 :/?#[]@!$&'()*+,;= to be included without percent-encoding. This property only applies to parameters with an in value of query. The default value is false" - }, - "examples" : { - "type" : "object", - "description" : "Examples of the media type. Each example SHOULD contain a value in the correct format as specified in the parameter encoding. The examples field is mutually exclusive of the example field. Furthermore, if referencing a schema which contains an example, the examples value SHALL override the example provided by the schema", - "additionalProperties" : { - "$ref" : "#/definitions/Example" - } - }, - "extendedExample" : { - "type" : "object", - "description" : "Example of the media type. The example SHOULD match the specified schema and encoding properties if present. The example field is mutually exclusive of the examples field. Furthermore, if referencing a schema which contains an example, the example value SHALL override the example provided by the schema. To represent examples of media types that cannot naturally be represented in JSON or YAML, a string value can contain the example with escaping where necessary" - }, - "content" : { - "type" : "object", - "description" : "A map containing the representations for the parameter. The key is the media type and the value describes it. The map MUST only contain one entry", - "additionalProperties" : { - "$ref" : "#/definitions/MediaType" - } - }, - "xpath" : { - "$ref" : "#/definitions/Xpath" - }, - "default" : { - "type" : "string" - }, - "parameterSchema" : { - "$ref" : "#/definitions/Schema" - }, - "_enum" : { - "type" : "array", - "items" : { - "type" : "string" - } - } - } - } ] - }, - "RefModel" : { - "allOf" : [ { - "$ref" : "#/definitions/Model" - }, { - "type" : "object", - "properties" : { - "refFormat" : { - "type" : "string", - "enum" : [ "URL", "RELATIVE", "INTERNAL" ] - }, - "get$ref" : { - "type" : "string" - }, - "simpleRef" : { - "type" : "string" - } - } - } ] - }, - "RefParameter" : { - "allOf" : [ { - "$ref" : "#/definitions/Parameter" - }, { - "type" : "object", - "properties" : { - "name" : { - "type" : "string", - "description" : "The name of the parameter. Parameter names are case sensitive" - }, - "in" : { - "type" : "string", - "description" : "The location of the parameter. Possible values are \"query\", \"header\", \"path\" or \"cookie\"" - }, - "description" : { - "type" : "string", - "description" : "A brief description of the parameter. This could contain examples of use" - }, - "required" : { - "type" : "boolean", - "description" : "Determines whether this parameter is mandatory. If the parameter location is \"path\", this property is REQUIRED and its value MUST be true. Otherwise, the property MAY be included and its default value is false" - }, - "get$ref" : { - "type" : "string", - "description" : "The available paths and operations for the API" - }, - "allowEmptyValue" : { - "type" : "boolean", - "description" : "Sets the ability to pass empty-valued parameters. This is valid only for query parameters and allows sending a parameter with an empty value" - }, - "deprecated" : { - "type" : "boolean", - "description" : "Determines whether this parameter is mandatory. If the parameter location is \"path\", this property is REQUIRED and its value MUST be true. Otherwise, the property MAY be included and its default value is false" - }, - "style" : { - "type" : "string", - "description" : "Describes how the parameter value will be serialized depending on the type of the parameter value. Default values (based on value of in): for query - form; for path - simple; for header - simple; for cookie - form", - "enum" : [ "MATRIX", "LABEL", "FORM", "SIMPLE", "SPACEDELIMITED", "PIPEDELIMITED", "DEEPOBJECT" ] - }, - "explode" : { - "type" : "boolean", - "description" : "When this is true, parameter values of type array or object generate separate parameters for each value of the array or key-value pair of the map. For other types of parameters this property has no effect. When style is form, the default value is true. For all other styles, the default value is false" - }, - "allowReserved" : { - "type" : "boolean", - "description" : "Determines whether the parameter value SHOULD allow reserved characters, as defined by RFC3986 :/?#[]@!$&'()*+,;= to be included without percent-encoding. This property only applies to parameters with an in value of query. The default value is false" - }, - "examples" : { - "type" : "object", - "description" : "Examples of the media type. Each example SHOULD contain a value in the correct format as specified in the parameter encoding. The examples field is mutually exclusive of the example field. Furthermore, if referencing a schema which contains an example, the examples value SHALL override the example provided by the schema", - "additionalProperties" : { - "$ref" : "#/definitions/Example" - } - }, - "extendedExample" : { - "type" : "object", - "description" : "Example of the media type. The example SHOULD match the specified schema and encoding properties if present. The example field is mutually exclusive of the examples field. Furthermore, if referencing a schema which contains an example, the example value SHALL override the example provided by the schema. To represent examples of media types that cannot naturally be represented in JSON or YAML, a string value can contain the example with escaping where necessary" - }, - "content" : { - "type" : "object", - "description" : "A map containing the representations for the parameter. The key is the media type and the value describes it. The map MUST only contain one entry", - "additionalProperties" : { - "$ref" : "#/definitions/MediaType" - } - }, - "xpath" : { - "$ref" : "#/definitions/Xpath" - }, - "default" : { - "type" : "string" - }, - "parameterSchema" : { - "$ref" : "#/definitions/Schema" - }, - "_enum" : { - "type" : "array", - "items" : { - "type" : "string" - } - } - } - } ] - }, - "RefProperty" : { - "allOf" : [ { - "$ref" : "#/definitions/Property" - }, { - "type" : "object", - "properties" : { - "refFormat" : { - "type" : "string", - "enum" : [ "URL", "RELATIVE", "INTERNAL" ] - }, - "get$ref" : { - "type" : "string" - }, - "simpleRef" : { - "type" : "string" - } - } - } ] - }, - "RequestBody" : { - "type" : "object", - "properties" : { - "vendorExtensions" : { - "type" : "object", - "additionalProperties" : { - "type" : "object" - } - }, - "description" : { - "type" : "string", - "description" : "A brief description of the request body. This could contain examples of use" - }, - "content" : { - "type" : "object", - "description" : "The content of the request body. The key is a media type or media type range and the value describes it", - "additionalProperties" : { - "$ref" : "#/definitions/MediaType" - } - }, - "required" : { - "type" : "boolean", - "description" : "Determines if the request body is required in the request. Defaults to false" - }, - "get$ref" : { - "type" : "string" - } - } - }, - "Response" : { - "type" : "object", - "properties" : { - "vendorExtensions" : { - "type" : "object", - "additionalProperties" : { - "type" : "object" - } - }, - "description" : { - "type" : "string", - "description" : "A short description of the response" - }, - "headersV3" : { - "type" : "object", - "description" : "Maps a header name to its definition. RFC7230 states header names are case insensitive. If a response header is defined with the name \"Content-Type\", it SHALL be ignored", - "additionalProperties" : { - "$ref" : "#/definitions/Header" - } - }, - "content" : { - "type" : "object", - "description" : "A map containing descriptions of potential response payloads. The key is a media type or media type range and the value describes it", - "additionalProperties" : { - "$ref" : "#/definitions/MediaType" - } - }, - "links" : { - "type" : "object", - "description" : "A map of operations links that can be followed from the response. The key of the map is a short name for the link, following the naming constraints of the names for Component Objects.", - "additionalProperties" : { - "$ref" : "#/definitions/Link" - } - }, - "get$ref" : { - "type" : "string" - } - } - }, - "RestAPI" : { - "allOf" : [ { - "$ref" : "#/definitions/API" - }, { - "type" : "object", - "properties" : { - "vendorExtensions" : { - "type" : "object", - "additionalProperties" : { - "type" : "object" - } - }, - "info" : { - "$ref" : "#/definitions/Info" - }, - "serviceRegistryDisplayName" : { - "type" : "string", - "description" : "The name of the API in service registry when the API is published to a service registry." - }, - "tags" : { - "type" : "array", - "description" : "A list of tags with additional metadata", - "items" : { - "$ref" : "#/definitions/Tag" - } - }, - "paths" : { - "type" : "object", - "description" : "The available paths and operations for the API", - "additionalProperties" : { - "$ref" : "#/definitions/Path" - } - }, - "externalDocs" : { - "type" : "array", - "description" : "Additional external documentation", - "items" : { - "$ref" : "#/definitions/ExternalDocs" - } - }, - "servers" : { - "type" : "array", - "description" : "An array of Server Objects, which provide connectivity information to a target server", - "items" : { - "$ref" : "#/definitions/Server" - } - }, - "components" : { - "$ref" : "#/definitions/Components" - }, - "apiTags" : { - "type" : "array", - "items" : { - "type" : "string" - } - } - } - } ] - }, - "RestEnabledPath" : { - "type" : "object", - "properties" : { - "vendorExtensions" : { - "type" : "object", - "additionalProperties" : { - "type" : "object" - } - }, - "get" : { - "$ref" : "#/definitions/Operation" - }, - "put" : { - "$ref" : "#/definitions/Operation" - }, - "post" : { - "$ref" : "#/definitions/Operation" - }, - "head" : { - "$ref" : "#/definitions/Operation" - }, - "delete" : { - "$ref" : "#/definitions/Operation" - }, - "patch" : { - "$ref" : "#/definitions/Operation" - }, - "options" : { - "$ref" : "#/definitions/Operation" - }, - "trace" : { - "$ref" : "#/definitions/Operation" - }, - "parameters" : { - "type" : "array", - "description" : "A list of parameters that are applicable for all the operations described under this path. These parameters can be overridden at the operation level, but cannot be removed there", - "items" : { - "type" : "object" - } - }, - "scopes" : { - "type" : "array", - "items" : { - "type" : "string" - } - }, - "tags" : { - "type" : "array", - "items" : { - "type" : "string" - } - }, - "displayName" : { - "type" : "string" - }, - "description" : { - "type" : "string", - "description" : "An optional, string description, intended to apply to all operations in this path" - }, - "enabled" : { - "type" : "boolean" - }, - "get$ref" : { - "type" : "string", - "description" : "Allows for an external definition of this path item" - }, - "summary" : { - "type" : "string", - "description" : "An optional, string summary, intended to apply to all operations in this path" - }, - "name" : { - "type" : "string" - }, - "invokePath" : { - "type" : "string" - } - } - }, - "SOAPAPI" : { - "allOf" : [ { - "$ref" : "#/definitions/API" - }, { - "type" : "object", - "properties" : { - "wsdl" : { - "type" : "string" - }, - "baseWsdlUri" : { - "type" : "string" - }, - "nativeUri" : { - "type" : "array", - "uniqueItems" : true, - "items" : { - "type" : "string" - } - }, - "rootFileFolder" : { - "type" : "string" - }, - "serviceName" : { - "type" : "string" - }, - "operationsInfo" : { - "type" : "array", - "uniqueItems" : true, - "items" : { - "$ref" : "#/definitions/SOAPOperation" - } - }, - "serviceRegistryDisplayName" : { - "type" : "string", - "description" : "The name of the API in service registry when the API is published to a service registry." - }, - "operationPolicies" : { - "type" : "object", - "additionalProperties" : { - "type" : "string" - } - }, - "isRESTInvokeEnabled" : { - "type" : "boolean" - }, - "tags" : { - "type" : "array", - "items" : { - "$ref" : "#/definitions/Tag" - } - }, - "apiTags" : { - "type" : "array", - "items" : { - "type" : "string" - } - }, - "primaryEndpoint" : { - "type" : "object", - "additionalProperties" : { - "type" : "boolean" - } - } - } - } ] - }, - "SOAPBinding" : { - "type" : "object", - "properties" : { - "name" : { - "type" : "string" - }, - "type" : { - "type" : "string" - }, - "specifier" : { - "type" : "string" - }, - "interFace" : { - "$ref" : "#/definitions/SOAPInterface" - }, - "inputMessage" : { - "type" : "string" - }, - "outputMessage" : { - "type" : "string" - }, - "faultMessages" : { - "type" : "array", - "items" : { - "type" : "string" - } - } - } - }, - "SOAPInterface" : { - "type" : "object", - "properties" : { - "name" : { - "type" : "string" - }, - "operations" : { - "type" : "array", - "items" : { - "$ref" : "#/definitions/SOAPOperation" - } - } - } - }, - "SOAPOperation" : { - "type" : "object", - "properties" : { - "name" : { - "type" : "string" - }, - "namespace" : { - "type" : "string" - }, - "enabled" : { - "type" : "boolean" - }, - "bindings" : { - "type" : "array", - "items" : { - "$ref" : "#/definitions/SOAPBinding" - } - }, - "mockedResponses" : { - "type" : "object", - "additionalProperties" : { - "$ref" : "#/definitions/MockedResponse" - } - }, - "mockedConditionsBasedCustomResponsesList" : { - "type" : "array", - "items" : { - "$ref" : "#/definitions/MockedConditionsBasedCustomResponse" - } - }, - "defined" : { - "type" : "boolean" - }, - "soapAction" : { - "type" : "string" - }, - "isRESTInvokeEnabled" : { - "type" : "boolean" - }, - "restEnabledPath" : { - "$ref" : "#/definitions/RestEnabledPath" - }, - "scopes" : { - "type" : "array", - "items" : { - "type" : "string" - } - }, - "tags" : { - "type" : "array", - "items" : { - "type" : "string" - } - } - } - }, - "Schema" : { - "type" : "object", - "discriminator" : "type", - "properties" : { - "vendorExtensions" : { - "type" : "object", - "additionalProperties" : { - "type" : "object" - } - }, - "name" : { - "type" : "string", - "description" : "User defined name for the property" - }, - "title" : { - "type" : "string", - "description" : "User defined title for the property" - }, - "multipleOf" : { - "type" : "number", - "description" : "Numbers can be restricted to a multiple of a given number, using the multipleOf keyword. It may be set to any positive number." - }, - "maximum" : { - "type" : "number", - "description" : "Upper limit in the ranges of numbers, (or exclusiveMinimum and exclusiveMaximum for expressing exclusive range)" - }, - "exclusiveMaximum" : { - "type" : "boolean", - "description" : "Indicate whether maximum are exclusive of the value" - }, - "minimum" : { - "type" : "number", - "description" : "Lower limit in the ranges of numbers" - }, - "exclusiveMinimum" : { - "type" : "boolean", - "description" : "Indicate whether minimum are exclusive of the value" - }, - "maxLength" : { - "type" : "integer", - "format" : "int32", - "description" : "The maximum length of a string can be constrained using the minLength" - }, - "minLength" : { - "type" : "integer", - "format" : "int32", - "description" : "The minimum length of a string can be constrained using the minLength" - }, - "pattern" : { - "type" : "string", - "description" : "The pattern keyword is used to restrict a string to a particular regular expression. The regular expression syntax is the one defined in JavaScript (ECMA 262 specifically)" - }, - "maxItems" : { - "type" : "integer", - "format" : "int32", - "description" : "The maximum length of the array can be specified" - }, - "minItems" : { - "type" : "integer", - "format" : "int32", - "description" : "The minimum length of the array can be specified" - }, - "uniqueItems" : { - "type" : "boolean", - "description" : "A schema can ensure that each of the items in an array is unique. Simply set the uniqueItems keyword to true" - }, - "maxProperties" : { - "type" : "integer", - "format" : "int32", - "description" : "The maximum number of properties on an object can be restricted" - }, - "minProperties" : { - "type" : "integer", - "format" : "int32", - "description" : "The minimum number of properties on an object can be restricted" - }, - "required" : { - "type" : "array", - "description" : "By default, the properties defined by the properties keyword are not required. However, one can provide a list of required properties using the required keyword.\nThe required keyword takes an array of zero or more strings. Each of these strings must be unique.", - "items" : { - "type" : "string" - } - }, - "type" : { - "type" : "string", - "description" : "It specifies the data type for a schema" - }, - "not" : { - "$ref" : "#/definitions/Schema" - }, - "properties" : { - "type" : "object", - "description" : "The properties (key-value pairs) on an object are defined using the properties keyword. The value of properties is an object, where each key is the name of a property and each value is of type schema used to validate that property", - "additionalProperties" : { - "$ref" : "#/definitions/Schema" - } - }, - "additionalProperties" : { - "$ref" : "#/definitions/Schema" - }, - "description" : { - "type" : "string", - "description" : "Provide a more lengthy explanation about the purpose of the data described by the schema" - }, - "format" : { - "type" : "string", - "description" : "The format keyword allows for basic semantic validation on certain kinds of string values that are commonly used" - }, - "get$ref" : { - "type" : "string" - }, - "nullable" : { - "type" : "boolean", - "description" : "Allows sending a null value for the defined schema. Default value is false" - }, - "readOnly" : { - "type" : "boolean", - "description" : "Relevant only for Schema \"properties\" definitions. Declares the property as \"read only\". This means that it MAY be sent as part of a response but SHOULD NOT be sent as part of the request. If the property is marked as readOnly being true and is in the required list, the required will take effect on the response only. A property MUST NOT be marked as both readOnly and writeOnly being true. Default value is false" - }, - "writeOnly" : { - "type" : "boolean", - "description" : "Relevant only for Schema \"properties\" definitions. Declares the property as \"write only\". Therefore, it MAY be sent as part of a request but SHOULD NOT be sent as part of the response. If the property is marked as writeOnly being true and is in the required list, the required will take effect on the request only. A property MUST NOT be marked as both readOnly and writeOnly being true. Default value is false" - }, - "example" : { - "type" : "object", - "description" : "A free-form property to include an example of an instance for this schema. To represent examples that cannot be naturally represented in JSON or YAML, a string value can be used to contain the example with escaping where necessary" - }, - "externalDocs" : { - "$ref" : "#/definitions/ExternalDocs" - }, - "deprecated" : { - "type" : "boolean", - "description" : "Specifies that a schema is deprecated and SHOULD be transitioned out of usage. Default value is false" - }, - "xml" : { - "$ref" : "#/definitions/Xml" - }, - "default" : { - "type" : "object", - "description" : "The default value represents what would be assumed by the consumer of the input as the value of the schema if one is not provided. Unlike JSON Schema, the value MUST conform to the defined type for the Schema Object defined at the same level. For example, if type is string, then default can be \"foo\" but cannot be 1" - }, - "enum" : { - "type" : "array", - "items" : { - "type" : "object" - } - } - } - }, - "SecurityScheme" : { - "type" : "object", - "properties" : { - "vendorExtensions" : { - "type" : "object", - "additionalProperties" : { - "type" : "object" - } - }, - "type" : { - "type" : "string", - "enum" : [ "APIKEY", "HTTP", "OAUTH2", "OPENIDCONNECT" ] - }, - "description" : { - "type" : "string" - }, - "name" : { - "type" : "string" - }, - "get$ref" : { - "type" : "string" - }, - "in" : { - "type" : "string", - "enum" : [ "COOKIE", "HEADER", "QUERY" ] - }, - "scheme" : { - "type" : "string" - }, - "bearerFormat" : { - "type" : "string" - }, - "flows" : { - "$ref" : "#/definitions/OAuthFlows" - }, - "openIdConnectUrl" : { - "type" : "string" - } - } - }, - "SecuritySchemeDescriptor" : { - "type" : "object", - "properties" : { - "headers" : { - "type" : "object", - "additionalProperties" : { - "type" : "object" - } - }, - "queryParameters" : { - "type" : "object", - "additionalProperties" : { - "type" : "object" - } - }, - "responses" : { - "type" : "object", - "additionalProperties" : { - "type" : "object" - } - } - } - }, - "Server" : { - "type" : "object", - "properties" : { - "vendorExtensions" : { - "type" : "object", - "additionalProperties" : { - "type" : "object" - } - }, - "url" : { - "type" : "string", - "description" : "A URL to the target host. This URL supports Server Variables and MAY be relative, to indicate that the host location is relative to the location where the OpenAPI document is being served. Variable substitutions will be made when a variable is named in {brackets}" - }, - "description" : { - "type" : "string", - "description" : "An optional string describing the host designated by the URL" - }, - "variables" : { - "type" : "object", - "description" : "A map between a variable name and its value. The value is used for substitution in the server's URL template", - "additionalProperties" : { - "$ref" : "#/definitions/ServerVariable" - } - } - } - }, - "ServerVariable" : { - "type" : "object", - "properties" : { - "vendorExtensions" : { - "type" : "object", - "additionalProperties" : { - "type" : "object" - } - }, - "description" : { - "type" : "string", - "description" : "An optional description for the server variable" - }, - "default" : { - "type" : "string" - }, - "enum" : { - "type" : "array", - "items" : { - "type" : "string" - } - } - } - }, - "StringProperty" : { - "allOf" : [ { - "$ref" : "#/definitions/Property" - }, { - "type" : "object", - "properties" : { - "minLength" : { - "type" : "integer", - "format" : "int32" - }, - "maxLength" : { - "type" : "integer", - "format" : "int32" - }, - "pattern" : { - "type" : "string" - }, - "enum" : { - "type" : "array", - "items" : { - "type" : "string" - } - }, - "default" : { - "type" : "string" - } - } - } ] - }, - "StringSchema" : { - "allOf" : [ { - "$ref" : "#/definitions/Schema" - }, { - "type" : "object", - "properties" : { - "type" : { - "type" : "string" - }, - "default" : { - "type" : "string", - "description" : "The default value represents what would be assumed by the consumer of the input as the value of the schema if one is not provided. Unlike JSON Schema, the value MUST conform to the defined type for the Schema Object defined at the same level. For example, if type is string, then default can be \"foo\" but cannot be 1" - }, - "enum" : { - "type" : "array", - "items" : { - "type" : "string" - } - } - } - } ] - }, - "StringSchemaModel" : { - "allOf" : [ { - "$ref" : "#/definitions/Model" - }, { - "type" : "object", - "properties" : { - "schema" : { - "type" : "string" - } - } - } ] - }, - "StringSchemaProperty" : { - "allOf" : [ { - "$ref" : "#/definitions/Property" - }, { - "type" : "object", - "properties" : { - "schema" : { - "type" : "string" - } - } - } ] - }, - "Tag" : { - "type" : "object", - "properties" : { - "vendorExtensions" : { - "type" : "object", - "additionalProperties" : { - "type" : "object" - } - }, - "name" : { - "type" : "string", - "description" : "The name of the tag" - }, - "description" : { - "type" : "string", - "description" : "A short description for the tag" - }, - "externalDocs" : { - "$ref" : "#/definitions/ExternalDocs" - } - } - }, - "Team" : { - "type" : "object", - "properties" : { - "id" : { - "type" : "string", - "description" : "Team id" - }, - "name" : { - "type" : "string", - "description" : "Team name" - }, - "source" : { - "type" : "string", - "description" : "The value is to identify whether the team is created from global team assignment or from user or by system", - "enum" : [ "USER", "GLOBAL_ASSIGNMENT", "SYSTEM" ] - } - } - }, - "WebsocketAPI" : { - "allOf" : [ { - "$ref" : "#/definitions/API" - }, { - "type" : "object", - "properties" : { - "nativeUri" : { - "type" : "array", - "uniqueItems" : true, - "items" : { - "type" : "string" - } - }, - "supportedSubProtocols" : { - "type" : "array", - "items" : { - "type" : "string" - } - }, - "tags" : { - "type" : "array", - "items" : { - "$ref" : "#/definitions/Tag" - } - }, - "externalDocs" : { - "type" : "array", - "items" : { - "$ref" : "#/definitions/ExternalDocs" - } - }, - "messages" : { - "type" : "array", - "items" : { - "$ref" : "#/definitions/MessageFrame" - } - }, - "parameters" : { - "type" : "object", - "additionalProperties" : { - "$ref" : "#/definitions/AbstractParameter" - } - }, - "apiTags" : { - "type" : "array", - "items" : { - "type" : "string" - } - } - } - } ] - }, - "Xml" : { - "type" : "object", - "properties" : { - "vendorExtensions" : { - "type" : "object", - "additionalProperties" : { - "type" : "object" - } - }, - "name" : { - "type" : "string", - "description" : "Replaces the name of the element/attribute used for the described schema property. When defined within items, it will affect the name of the individual XML elements within the list. When defined alongside type being array (outside the items), it will affect the wrapping element and only if wrapped is true. If wrapped is false, it will be ignored" - }, - "namespace" : { - "type" : "string", - "description" : "The URI of the namespace definition" - }, - "prefix" : { - "type" : "string", - "description" : "The prefix to be used for the name" - }, - "attribute" : { - "type" : "boolean", - "description" : "Declares whether the property definition translates to an attribute instead of an element. Default value is false" - }, - "wrapped" : { - "type" : "boolean", - "description" : "MAY be used only for an array definition. Signifies whether the array is wrapped (for example, ) or unwrapped (). Default value is false" - } - } - }, - "Xpath" : { - "type" : "object", - "properties" : { - "xpath" : { - "type" : "string" - }, - "namespaces" : { - "type" : "array", - "items" : { - "$ref" : "#/definitions/Namespaces" - } - } - } - }, - "APIResponseCreate" : { - "type" : "object", - "properties" : { - "api" : { - "$ref" : "#/definitions/GatewayAPI" - }, - "apiId" : { - "type" : "string" - }, - "errorReason" : { - "type" : "string" - }, - "responseStatus" : { - "type" : "string", - "enum" : [ "SUCCESS", "ERROR", "NOT_FOUND", "BAD_REQUEST", "PARTIAL_SUCCESS" ] - } - } - }, - "Endpoint" : { - "type" : "object", - "properties" : { - "optimizationTechnique" : { - "type" : "string" - }, - "passSecurityHeaders" : { - "type" : "boolean" - }, - "uri" : { - "type" : "string" - }, - "connectionTimeoutDuration" : { - "type" : "integer", - "format" : "int32" - }, - "alias" : { - "type" : "boolean" - } - } - }, - "GatewayAPI" : { - "type" : "object", - "properties" : { - "apiDefinition" : { - "$ref" : "#/definitions/API" - }, - "nativeEndpoint" : { - "type" : "array", - "readOnly" : true, - "uniqueItems" : true, - "items" : { - "$ref" : "#/definitions/Endpoint" - } - }, - "apiName" : { - "type" : "string" - }, - "apiVersion" : { - "type" : "string" - }, - "apiEndpointPrefix" : { - "type" : "string" - }, - "apiDescription" : { - "type" : "string" - }, - "maturityState" : { - "type" : "string" - }, - "apiGroups" : { - "type" : "array", - "items" : { - "type" : "string" - } - }, - "isActive" : { - "type" : "boolean", - "readOnly" : true - }, - "type" : { - "type" : "string" - }, - "owner" : { - "type" : "string", - "readOnly" : true - }, - "policies" : { - "type" : "array", - "readOnly" : true, - "items" : { - "type" : "string" - } - }, - "rootFileName" : { - "type" : "string", - "readOnly" : true - }, - "scopes" : { - "type" : "array", - "items" : { - "$ref" : "#/definitions/Scope" - } - }, - "publishedPortals" : { - "type" : "array", - "items" : { - "type" : "string" - } - }, - "publishedToRegistry" : { - "type" : "boolean" - }, - "creationDate" : { - "type" : "string", - "readOnly" : true - }, - "lastModified" : { - "type" : "string", - "readOnly" : true - }, - "prevVersion" : { - "type" : "string", - "readOnly" : true - }, - "nextVersion" : { - "type" : "string", - "readOnly" : true - }, - "systemVersion" : { - "type" : "integer", - "format" : "int32", - "readOnly" : true - }, - "provider" : { - "type" : "string", - "readOnly" : true - }, - "centraSiteURL" : { - "type" : "string", - "readOnly" : true - }, - "mockService" : { - "$ref" : "#/definitions/MockService" - }, - "apiDocuments" : { - "type" : "array", - "items" : { - "type" : "string" - } - }, - "id" : { - "type" : "string" - }, - "oauth2ScopeName" : { - "type" : "string" - } - } - }, - "MockService" : { - "type" : "object", - "properties" : { - "enableMock" : { - "type" : "boolean" - }, - "runAsUser" : { - "type" : "string" - }, - "service" : { - "type" : "string" - } - } - }, - "Scope" : { - "type" : "object", - "properties" : { - "name" : { - "type" : "string" - }, - "description" : { - "type" : "string" - }, - "getoAuth2ScopeName" : { - "type" : "string" - }, - "policies" : { - "type" : "array", - "items" : { - "type" : "string" - } - }, - "mashedUpAPI" : { - "type" : "boolean" - } - } - }, - "InputVersion" : { - "type" : "object", - "required" : [ "newApiVersion" ], - "properties" : { - "retainApplications" : { - "type" : "boolean" - }, - "newApiVersion" : { - "type" : "string" - } - } - }, - "APIResponse" : { - "type" : "object", - "properties" : { - "apiId" : { - "type" : "string" - }, - "api" : { - "$ref" : "#/definitions/GatewayAPI" - }, - "responseStatus" : { - "type" : "string", - "enum" : [ "SUCCESS", "ERROR", "NOT_FOUND", "BAD_REQUEST", "PARTIAL_SUCCESS" ] - }, - "errorReason" : { - "type" : "string" - }, - "gatewayEndPoints" : { - "type" : "array", - "items" : { - "type" : "string" - } - }, - "microgatewayEndPoints" : { - "type" : "array", - "items" : { - "type" : "string" - } - }, - "reason" : { - "type" : "object" - }, - "pubSOAPFlavor" : { - "type" : "string" - }, - "restrictViewAsset" : { - "type" : "boolean" - }, - "rootFileLocation" : { - "type" : "string" - }, - "teams" : { - "type" : "array", - "items" : { - "$ref" : "#/definitions/Team" - } - }, - "portalGatewayDataEntries" : { - "type" : "object" - } - } - }, - "APIResponseDelete" : { - "type" : "object", - "properties" : { - "id" : { - "type" : "string", - "description" : "API Id" - }, - "apiName" : { - "type" : "string", - "description" : "API Name" - }, - "apiVersion" : { - "type" : "string", - "description" : "API Version" - }, - "type" : { - "type" : "string", - "description" : "API Type" - }, - "publishedPortals" : { - "type" : "array", - "description" : "Published portals of an API", - "items" : { - "type" : "string" - } - }, - "systemVersion" : { - "type" : "integer", - "format" : "int32", - "description" : "System version of an API" - }, - "teams" : { - "type" : "array", - "description" : "Contains teams belonging to an API.", - "items" : { - "$ref" : "#/definitions/Team" - } - }, - "active" : { - "type" : "boolean" - }, - "apiId" : { - "type" : "string" - }, - "errorReason" : { - "type" : "string" - }, - "responseStatus" : { - "type" : "string", - "enum" : [ "SUCCESS", "ERROR", "NOT_FOUND", "BAD_REQUEST", "PARTIAL_SUCCESS" ] - } - }, - "description" : "This model contains the basics details of an API." - }, - "InputPublish" : { - "type" : "object", - "properties" : { - "portalGatewayId" : { - "type" : "string" - }, - "communities" : { - "type" : "array", - "items" : { - "type" : "string" - } - }, - "endpoints" : { - "type" : "array", - "items" : { - "type" : "string" - } - } - } - }, - "APIResponseGetAPI" : { - "type" : "object", - "properties" : { - "versions" : { - "type" : "array", - "items" : { - "$ref" : "#/definitions/Version" - } - }, - "gatewayEndPoints" : { - "type" : "array", - "items" : { - "type" : "string" - } - }, - "api" : { - "$ref" : "#/definitions/GatewayAPI" - }, - "apiId" : { - "type" : "string" - }, - "errorReason" : { - "type" : "string" - }, - "responseStatus" : { - "type" : "string", - "enum" : [ "SUCCESS", "ERROR", "NOT_FOUND", "BAD_REQUEST", "PARTIAL_SUCCESS" ] - } - } - }, - "Version" : { - "type" : "object", - "properties" : { - "versionNumber" : { - "type" : "string" - }, - "apiId" : { - "type" : "string" - } - } - }, - "APIAccessKey" : { - "type" : "object", - "properties" : { - "apiAccessKey" : { - "type" : "string", - "description" : "API access key" - }, - "expirationInterval" : { - "type" : "string", - "description" : "expiration interval of the api key" - }, - "expirationDate" : { - "type" : "string", - "description" : "expiration date of the api key" - } - } - }, - "Application" : { - "type" : "object", - "properties" : { - "applicationID" : { - "type" : "string", - "description" : "unique identifier of an application" - }, - "name" : { - "type" : "string", - "description" : "name of the application" - }, - "description" : { - "type" : "string", - "description" : "description of the application" - }, - "owner" : { - "type" : "string", - "description" : "owner of the application" - }, - "identifiers" : { - "type" : "array", - "description" : "list of all application identifiers", - "items" : { - "$ref" : "#/definitions/ApplicationIdentifier" - } - }, - "contactEmails" : { - "type" : "array", - "description" : "list of email contacts", - "items" : { - "type" : "string" - } - }, - "iconbyteArray" : { - "type" : "string", - "description" : "application icon byte array" - }, - "accessTokens" : { - "$ref" : "#/definitions/ApplicationToken" - }, - "creationDate" : { - "type" : "string", - "description" : "application creation time" - }, - "lastModified" : { - "type" : "string", - "description" : "last modified time of the application" - }, - "lastUpdated" : { - "type" : "integer", - "format" : "int64", - "description" : "last modified time of the application in milliseconds" - }, - "siteURLs" : { - "type" : "array", - "description" : "list of all site URLs", - "items" : { - "type" : "string" - } - }, - "jsOrigins" : { - "type" : "array", - "description" : "list of all javascript origins", - "items" : { - "type" : "string" - } - }, - "version" : { - "type" : "string" - }, - "isSuspended" : { - "type" : "boolean", - "description" : "holds the suspended state of an application" - }, - "authStrategyIds" : { - "type" : "array", - "uniqueItems" : true, - "items" : { - "type" : "string" - } - }, - "subscription" : { - "type" : "boolean" - } - } - }, - "ApplicationIdentifier" : { - "type" : "object", - "properties" : { - "id" : { - "type" : "string", - "description" : "unique identifier of the application identifier" - }, - "key" : { - "type" : "string", - "description" : "identifier type" - }, - "name" : { - "type" : "string", - "description" : "name of the identifier" - }, - "value" : { - "type" : "array", - "description" : "list of identifier values", - "items" : { - "type" : "string" - } - } - } - }, - "ApplicationToken" : { - "type" : "object", - "properties" : { - "apiAccessKey" : { - "$ref" : "#/definitions/APIAccessKey" - }, - "oauth2Token" : { - "$ref" : "#/definitions/OAuth2Token" - } - } - }, - "OAuth2Token" : { - "type" : "object", - "properties" : { - "type" : { - "type" : "string", - "description" : "type of the oauth2 client" - }, - "clientId" : { - "type" : "string", - "description" : "unique identifier of the oauth2 client" - }, - "clientSecret" : { - "type" : "string", - "description" : "the client secret" - }, - "clientName" : { - "type" : "string", - "description" : "the name of the client" - }, - "scopes" : { - "type" : "array", - "description" : "the scopes associated with the client", - "items" : { - "type" : "string" - } - }, - "expirationInterval" : { - "type" : "string", - "description" : "the expiration interval" - }, - "refreshCount" : { - "type" : "string", - "description" : "number of times an access token can be refreshed" - }, - "redirectUris" : { - "type" : "array", - "description" : "list of redirect uris", - "items" : { - "type" : "string" - } - } - } - }, - "CommandInfo" : { - "type" : "object", - "properties" : { - "commandName" : { - "type" : "string" - }, - "commandClass" : { - "type" : "string" - } - } - }, - "DataFlavor" : { - "type" : "object", - "properties" : { - "mimeType" : { - "type" : "string" - }, - "humanPresentableName" : { - "type" : "string" - }, - "subType" : { - "type" : "string" - }, - "mimeTypeSerializedObject" : { - "type" : "boolean" - }, - "defaultRepresentationClassAsString" : { - "type" : "string" - }, - "representationClassInputStream" : { - "type" : "boolean" - }, - "representationClassReader" : { - "type" : "boolean" - }, - "representationClassCharBuffer" : { - "type" : "boolean" - }, - "representationClassByteBuffer" : { - "type" : "boolean" - }, - "representationClassSerializable" : { - "type" : "boolean" - }, - "representationClassRemote" : { - "type" : "boolean" - }, - "flavorSerializedObjectType" : { - "type" : "boolean" - }, - "flavorRemoteObjectType" : { - "type" : "boolean" - }, - "flavorJavaFileListType" : { - "type" : "boolean" - }, - "flavorTextType" : { - "type" : "boolean" - }, - "primaryType" : { - "type" : "string" - } - } - }, - "DataHandler" : { - "type" : "object", - "properties" : { - "dataSource" : { - "$ref" : "#/definitions/DataSource" - }, - "name" : { - "type" : "string" - }, - "inputStream" : { - "$ref" : "#/definitions/InputStream" - }, - "content" : { - "type" : "object" - }, - "contentType" : { - "type" : "string" - }, - "outputStream" : { - "$ref" : "#/definitions/OutputStream" - }, - "transferDataFlavors" : { - "type" : "array", - "items" : { - "$ref" : "#/definitions/DataFlavor" - } - }, - "preferredCommands" : { - "type" : "array", - "items" : { - "$ref" : "#/definitions/CommandInfo" - } - }, - "allCommands" : { - "type" : "array", - "items" : { - "$ref" : "#/definitions/CommandInfo" - } - } - } - }, - "DataSource" : { - "type" : "object", - "properties" : { - "name" : { - "type" : "string" - }, - "inputStream" : { - "$ref" : "#/definitions/InputStream" - }, - "contentType" : { - "type" : "string" - }, - "outputStream" : { - "$ref" : "#/definitions/OutputStream" - } - } - }, - "Enumeration" : { - "type" : "object" - }, - "InputStream" : { - "type" : "object" - }, - "Multipart" : { - "type" : "object", - "properties" : { - "contentType" : { - "type" : "string" - }, - "parent" : { - "$ref" : "#/definitions/Part" - }, - "count" : { - "type" : "integer", - "format" : "int32" - } - } - }, - "OutputStream" : { - "type" : "object" - }, - "Part" : { - "type" : "object", - "properties" : { - "size" : { - "type" : "integer", - "format" : "int32" - }, - "inputStream" : { - "$ref" : "#/definitions/InputStream" - }, - "content" : { - "type" : "object" - }, - "fileName" : { - "type" : "string" - }, - "contentType" : { - "type" : "string" - }, - "description" : { - "type" : "string" - }, - "dataHandler" : { - "$ref" : "#/definitions/DataHandler" - }, - "allHeaders" : { - "$ref" : "#/definitions/Enumeration" - }, - "disposition" : { - "type" : "string" - }, - "lineCount" : { - "type" : "integer", - "format" : "int32" - } - } - }, - "APIResponseGetGlobalPolicies" : { - "type" : "object", - "properties" : { - "globalPolicies" : { - "type" : "array", - "items" : { - "type" : "string" - } - } - } - }, - "ScopeInformation" : { - "type" : "object", - "properties" : { - "resourcePath" : { - "type" : "string" - }, - "supportedOperations" : { - "type" : "array", - "items" : { - "type" : "string" - } - } - } - }, - "ScopeResourceIndex" : { - "type" : "object", - "properties" : { - "references" : { - "type" : "array", - "items" : { - "$ref" : "#/definitions/ScopeInformation" - } - }, - "scope" : { - "$ref" : "#/definitions/Scope" - } - } - }, - "InputServiceRegistryUnpublish" : { - "type" : "object", - "properties" : { - "unpublishInfo" : { - "$ref" : "#/definitions/UnpublishInfo" - }, - "unpublishInfos" : { - "type" : "array", - "description" : "This contains the unpublish information for multiple APIs. Required when publishing more than one API from one or more service registries.", - "items" : { - "$ref" : "#/definitions/UnpublishInfo" - } - } - } - }, - "UnpublishInfo" : { - "type" : "object", - "properties" : { - "apiId" : { - "type" : "string", - "description" : "API id for the API to be unpublished. This field is required." - }, - "serviceRegistryIds" : { - "type" : "array", - "description" : "List of ids of the service registries from which the API has to be unpublished. This field is required.", - "items" : { - "type" : "string" - } - } - } - }, - "ServiceRegistryUnpublishPutResponse" : { - "type" : "object", - "properties" : { - "unpublishResponse" : { - "$ref" : "#/definitions/UnpublishResponse" - }, - "unpublishResponses" : { - "type" : "array", - "description" : "This contains the service registry unpublish status for requests unpublishing more than one API from one or more service registries.", - "items" : { - "$ref" : "#/definitions/UnpublishResponse" - } - } - } - }, - "ServiceRegistryUnpublishResponse" : { - "type" : "object", - "properties" : { - "serviceRegistryId" : { - "type" : "string", - "description" : "Id i.e, UDDI key of the service registry" - }, - "serviceRegistryName" : { - "type" : "string", - "description" : "Name of the service registry" - }, - "success" : { - "type" : "boolean", - "description" : "Represents whether the unpublish operation of API from the service registry is success. Possible values: true/false" - }, - "description" : { - "type" : "string", - "description" : "Represents the status of the unpublish operation of the API from the service registry eg: Unpublish successful, Unpublish failed, etc" - }, - "failureReason" : { - "type" : "string", - "description" : "Provides the reason for the failure when the unpublish operation is not successful" - } - } - }, - "UnpublishResponse" : { - "type" : "object", - "properties" : { - "apiId" : { - "type" : "string", - "description" : "API id of the API published." - }, - "apiName" : { - "type" : "string", - "description" : "API name of the API published." - }, - "serviceRegistryUnpublishResponses" : { - "type" : "array", - "description" : "Contains unpublish status of the API for each service registry in the request.", - "items" : { - "$ref" : "#/definitions/ServiceRegistryUnpublishResponse" - } - }, - "apiVersion" : { - "type" : "string", - "description" : "API version of the API published." - } - } - }, - "Endpoints" : { - "type" : "object", - "properties" : { - "gatewayEndpoint" : { - "type" : "string", - "description" : "API's access endpoint exposed in API Gateway." - }, - "status" : { - "type" : "string", - "description" : "Status of the API endpoint. Shows whether this endpoint is published to the service registry.Possible values are NEW, PUBLISHED and SUSPENDED. NEW represents the endpoint is not published to the service registry. PUBLISHED represents the endpoint is published to the service registry. SUSPENDED represents the endpoint is published to service registry, but is not currently active (for example: during deactivation of API or shutdown of API Gateway or disabling ports).", - "enum" : [ "NEW", "PUBLISHED", "SUSPENDED" ] - } - }, - "description" : "This defines the service registry publish information for API Gateway's API endpoints" - }, - "InputServiceRegistryPublish" : { - "type" : "object", - "properties" : { - "publishInfo" : { - "$ref" : "#/definitions/PublishPayload" - }, - "publishInfos" : { - "type" : "array", - "description" : "This contains the publish information for multiple APIs. Required when publishing more than one API to one or more service registries.", - "items" : { - "$ref" : "#/definitions/PublishPayload" - } - } - } - }, - "IntegrationServerPublishInfo" : { - "type" : "object", - "properties" : { - "integrationServerId" : { - "type" : "string", - "description" : "Uddi key of the integration server created in API Gateway. This field is required." - }, - "packageName" : { - "type" : "string", - "description" : "Name of the package in the integration server in which the API to be published. This field is required." - }, - "folderName" : { - "type" : "string", - "description" : "Name of the folder under the package (mentioned on 'packageName' property) in which the API to be published. This field is required." - }, - "status" : { - "type" : "string", - "enum" : [ "NEW", "PUBLISHED", "SUSPENDED" ] - }, - "integrationServerName" : { - "type" : "string" - } - } - }, - "PublishPayload" : { - "type" : "object", - "properties" : { - "apiId" : { - "type" : "string", - "description" : "API id for the API to be published. This field is required. The API will be published to the service registry with the value configured in 'Service registry display name' field of the API" - }, - "serviceRegistryPublishInfo" : { - "type" : "array", - "description" : "List of service registry publish information for the API. Each element of the list contains the publish information of the API for one service registry.", - "items" : { - "$ref" : "#/definitions/ServiceRegistryPublishInfo" - } - }, - "integrationServerPublishInfo" : { - "type" : "array", - "items" : { - "$ref" : "#/definitions/IntegrationServerPublishInfo" - } - } - } - }, - "ServiceRegistryPublishInfo" : { - "type" : "object", - "properties" : { - "serviceRegistryId" : { - "type" : "string", - "description" : "Uddi key of the service registry created in API Gateway. This field is required." - }, - "status" : { - "type" : "string", - "description" : "Publish Status of the API for this service registry. This field is shown only in response and should not be sent by clients in requests. Possible values are NEW, PUBLISHED and SUSPENDED. NEW represents the API is not published to the service registry. PUBLISHED represents the API is published to the service registry. SUSPENDED represents the API is published to service registry, but is not currently active (during deactivation of API or shutdown of API Gateway).", - "enum" : [ "NEW", "PUBLISHED", "SUSPENDED" ] - }, - "name" : { - "type" : "string", - "description" : "Name of the service registry. This field is shown only in response and should not be sent by clients in requests. Only the serviceRegistryId is considered for uniquely identifying the registry." - }, - "gatewayEndpoints" : { - "type" : "array", - "description" : "List of API endpoints of the API. Each element contains an endpoint and the information about the publish status of that endpoint for the current service registry.", - "uniqueItems" : true, - "items" : { - "$ref" : "#/definitions/Endpoints" - } - } - } - }, - "IntegrationServerPublishResponse" : { - "type" : "object", - "properties" : { - "integrationServerId" : { - "type" : "string", - "description" : "Id i.e, UDDI key of the service registry" - }, - "integrationServerName" : { - "type" : "string" - }, - "status" : { - "type" : "string", - "enum" : [ "NEW", "PUBLISHED", "SUSPENDED" ] - }, - "success" : { - "type" : "boolean", - "description" : "Represents whether the publish of API to the service registry is success. Possible values: true/false" - }, - "description" : { - "type" : "string", - "description" : "Represents the status of the publish operation of the API to the service registry eg: Publish successful, Publish failed, etc" - }, - "failureReason" : { - "type" : "string", - "description" : "Provides the reason for the failure when the publish operation is not successful" - } - } - }, - "PublishResponse" : { - "type" : "object", - "properties" : { - "apiId" : { - "type" : "string", - "description" : "API id of the API published." - }, - "apiName" : { - "type" : "string", - "description" : "API name of the API published." - }, - "apiVersion" : { - "type" : "string", - "description" : "API version of the API published." - }, - "serviceRegistryPublishResponses" : { - "type" : "array", - "description" : "Contains publish status of the API for each service registry in the request.", - "items" : { - "$ref" : "#/definitions/ServiceRegistryPublishResponse" - } - }, - "integrationServerPublishResponses" : { - "type" : "array", - "items" : { - "$ref" : "#/definitions/IntegrationServerPublishResponse" - } - } - } - }, - "ServiceRegistryPublishPutResponse" : { - "type" : "object", - "properties" : { - "publishResponse" : { - "$ref" : "#/definitions/PublishResponse" - }, - "publishResponses" : { - "type" : "array", - "description" : "This contains the service registry publish status for requests publishing more than one API to one or more service registries.", - "items" : { - "$ref" : "#/definitions/PublishResponse" - } - } - } - }, - "ServiceRegistryPublishResponse" : { - "type" : "object", - "properties" : { - "serviceRegistryId" : { - "type" : "string", - "description" : "Id i.e, UDDI key of the service registry" - }, - "serviceRegistryName" : { - "type" : "string", - "description" : "Name of the service registry" - }, - "status" : { - "type" : "string", - "description" : "Publish Status of the API for this service registry. Possible values are NEW, PUBLISHED and SUSPENDED. NEW represents the API is not published to the service registry. PUBLISHED represents the API is published to the service registry. SUSPENDED represents the API is published to service registry, but is not currently active (during deactivation of API or shutdown of API Gateway).", - "enum" : [ "NEW", "PUBLISHED", "SUSPENDED" ] - }, - "gatewayEndpoints" : { - "type" : "array", - "description" : "List of API endpoints of the API. Each element contains an endpoint and the information about the publish status of that endpoint for the current service registry.", - "uniqueItems" : true, - "items" : { - "$ref" : "#/definitions/Endpoints" - } - }, - "success" : { - "type" : "boolean", - "description" : "Represents whether the publish of API to the service registry is success. Possible values: true/false" - }, - "description" : { - "type" : "string", - "description" : "Represents the status of the publish operation of the API to the service registry eg: Publish successful, Publish failed, etc" - }, - "failureReason" : { - "type" : "string", - "description" : "Provides the reason for the failure when the publish operation is not successful" - } - } - }, - "ServiceRegistryPublishGetResponse" : { - "type" : "object", - "properties" : { - "publishInfo" : { - "$ref" : "#/definitions/PublishPayload" - } - } - }, - "InputIntegrationServerPublish" : { - "type" : "object", - "properties" : { - "publishInfo" : { - "$ref" : "#/definitions/PublishPayload" - }, - "publishInfos" : { - "type" : "array", - "description" : "This contains the publish information for multiple APIs. Required when publishing more than one API to one or more integration servers.", - "items" : { - "$ref" : "#/definitions/PublishPayload" - } - } - } - } - } -} \ No newline at end of file From a5e8a6b9e09664b7a549b2ec89730e2e481a13f4 Mon Sep 17 00:00:00 2001 From: Dhivakar Asokan <48990091+dhivakar-asokan@users.noreply.github.com> Date: Thu, 21 May 2020 20:30:40 +0530 Subject: [PATCH 13/22] Delete APIGatewayTransactionalEvent.json --- .../APIGatewayTransactionalEvent.json | 514 ------------------ 1 file changed, 514 deletions(-) delete mode 100644 apigatewayservices/APIGatewayTransactionalEvent.json diff --git a/apigatewayservices/APIGatewayTransactionalEvent.json b/apigatewayservices/APIGatewayTransactionalEvent.json deleted file mode 100644 index 97b1ab9..0000000 --- a/apigatewayservices/APIGatewayTransactionalEvent.json +++ /dev/null @@ -1,514 +0,0 @@ -{ - "swagger" : "2.0", - "info" : { - "description" : "API Gateway Transactions service allows you to query the API transactions. API Transactions are generated (as events) everytime an API invocation happens. API Transactions may contain the details about the invocation such as request/response headers, request/response payloads, consumer applications and so on. API Provider may choose to store these events to one or more destinations by using Log Invocation Policy. API Gateway provides different destination options to the API Provider (like API Gateway own data store, relational databases, Elastic Search etc.) where he/she would like to store these events to. By default, API Gateway is chosen as a storage destination for these events.\n\nIt is important to note that this REST API queries for the transactions data only from the API Gateway's default datastore.\n\nThere are multiple use cases for these transactions data. For instance, you can integrate this API with your billing system wherein these transactional data can be used to compute the usage history of your API for different consumers for monetization usecases. In other scenarios, the data extracted from this service can be used for custom report generation.Any valid API Gateway user can consume this REST service.", - "version" : "10.7", - "title" : "API Gateway Transactions Data Service" - }, - "host" : "localhost:5555", - "basePath" : "/rest/apigateway", - "schemes" : [ "http" ], - "consumes" : [ "plain/text" ], - "produces" : [ "application/json" ], - "paths" : { - "/transactionalEvents/_search" : { - "get" : { - "description" : "This method can be used to retrieve the transaction events for a given API/Application/Plan/Package for a specific period of time. Multiple request parameters of this method provide options to specify the request criteria to match the expected result and most of these input parameters supports regular expression in their values. Along with the mandatory parameters - fromDate and toDate, any one of the other filter criteria should be passed in the request.", - "operationId" : "getTransactions", - "consumes" : [ "application/json" ], - "produces" : [ "application/json" ], - "parameters" : [ { - "name" : "apiName", - "in" : "query", - "description" : "The name of the API for which the invocation details is required.The exact name must be provided or regular expressions can be used like API_.*", - "required" : false, - "type" : "string", - "x-example" : "apiName=PetStore" - }, { - "name" : "apiVersion", - "in" : "query", - "description" : "The version of the API", - "required" : false, - "type" : "string", - "x-example" : "apiVersion=1.0" - }, { - "name" : "apiId", - "in" : "query", - "description" : "The system generated id for an API.The id of an can be retrieved from the API details screen", - "required" : false, - "type" : "string", - "x-example" : "apiId=105e99ee-0e1b-4afa-8ff3-4322cf296558" - }, { - "name" : "applicationName", - "in" : "query", - "description" : "The name of the Application for which the invocation details is required.The exact name must be provided or regular expressions can be used like APP_.*", - "required" : false, - "type" : "string", - "x-example" : "applicationName=HostBasedIdentifier" - }, { - "name" : "applicationId", - "in" : "query", - "description" : "The system generated id for an Application.The id of an can be retrieved from the Application details screen", - "required" : false, - "type" : "string", - "x-example" : "applicationId=995e99ee-0e1b-4afa-8ff3-4322cf296587" - }, { - "name" : "packageName", - "in" : "query", - "description" : "The name of the Package for which the invocation details is required.The exact name must be provided or regular expressions can be used like Package_.*", - "required" : false, - "type" : "string", - "x-example" : "pakageName=TravelPackage" - }, { - "name" : "packageId", - "in" : "query", - "description" : "The system generated id for a Package.The id of an can be retrieved from the Package details screen", - "required" : false, - "type" : "string", - "x-example" : "packageId=685023ee-0e1b-4afa-8ff3-4322cf296566" - }, { - "name" : "planName", - "in" : "query", - "description" : "The name of the Plan for which the invocation details is required.The exact name must be provided or regular expressions can be used like Plan_.*", - "required" : false, - "type" : "string", - "x-example" : "planName=GoldPlan" - }, { - "name" : "planId", - "in" : "query", - "description" : "The system generated id for a Plan.The id of an can be retrieved from the Plan details screen", - "required" : false, - "type" : "string", - "x-example" : "planId=785e99ee-0e1b-4afa-8ff3-4322cf296566" - }, { - "name" : "from", - "in" : "query", - "description" : "This parameter specifies the index from which the data has to be retrieved from the store. It is mainly used during pagination where the data is retrieved in batches", - "required" : false, - "type" : "integer", - "format" : "int32", - "x-example" : "from=0" - }, { - "name" : "size", - "in" : "query", - "description" : "This parameter specifies the number of records that should be present in the response. This can be combined with the parameter - from to get the records in batches during pagination.", - "required" : false, - "type" : "integer", - "format" : "int32", - "x-example" : "size=1" - }, { - "name" : "fromDate", - "in" : "query", - "description" : "This is the date from which the invocation details has to be retrieved for the matching filter criteria.It is a mandatory parameter and it should be of the format YYYY-MM-DD. Regular expression support is not available for this parameter", - "required" : true, - "type" : "string", - "format" : "date", - "x-example" : "fromDate=2017-02-26" - }, { - "name" : "toDate", - "in" : "query", - "description" : "This is the date to which the invocation details has to be retrieved for the matching filter criteria.It is a mandatory parameter and it should be of the format YYYY-MM-DD. Regular expression support is not available for this parameter", - "required" : true, - "type" : "string", - "format" : "date", - "x-example" : "toDate=2017-02-27" - } ], - "responses" : { - "200" : { - "description" : "Array of transactional events.", - "examples" : { - "application/json" : "{\r\n \"transaction\": [\r\n {\r\n \"creationDate\": 1487229288461,\r\n \"apiName\": \"PetStoreTest\",\r\n \"apiVersion\": \"1.0.0\",\r\n \"apiId\": \"73c40484-678a-4fb0-a56c-21119869e5f4\",\r\n \"totalTime\": 1386,\r\n \"providerTime\": 1336,\r\n \"applicationName\": \"testApp\",\r\n \"applicationId\": \"10727b01-e13a-4c5d-b39e-c5c336101e21\",\r\n \"status\": \"SUCCESS\",\r\n \"totalDataSize\": 1341,\r\n \"responseCode\": \"200\",\r\n \"operationName\": \"/pet\",\r\n \"httpMethod\": \"post\",\r\n \"packageName\": \"TestPackage\",\r\n \"packageId\": \"7aafd5c8-3ea4-454f-ae78-d9ffc328672a\",\r\n \"planName\": \"TestPlan\",\r\n \"planId\": \"70369925-27f9-4c8a-b078-ca057516735e\"\r\n }\r\n ]\r\n}" - }, - "schema" : { - "$ref" : "#/definitions/TransactionEvent" - } - }, - "401" : { - "description" : "This response indicates that invalid credentials have been provided for the request." - }, - "400" : { - "description" : "One optional parameter along with fromDate and toData is required", - "examples" : { - "application/json" : "{ \"errorDetails\": \" Insufficient parameters. At least one parameter in addition to the creation date range must be provided.\"}" - } - } - }, - "security" : [ { - "Basic" : [ ] - } ] - } - }, - "/transactionalEvents/_count" : { - "get" : { - "description" : "This method can be used to retrieve the number of transaction events for a given API/Application/Plan/Package for a specific period of time. Multiple request parameters of this method provide options to specify the request criteria to match the expected result and most of these input parameters supports regular expression in their values. Along with the mandatory parameters - fromDate and toDate, any one of the other filter criteria should be passed in the request.", - "operationId" : "getTransactionsCount", - "consumes" : [ "application/json" ], - "produces" : [ "application/json" ], - "parameters" : [ { - "name" : "apiName", - "in" : "query", - "description" : "The name of the API for which the invocation count is required.The exact name must be provided or regular expressions can be used like API_.*", - "required" : false, - "type" : "string", - "x-example" : "apiName=PetStore" - }, { - "name" : "apiVersion", - "in" : "query", - "description" : "The version of the API", - "required" : false, - "type" : "string", - "x-example" : "apiVersion=1.0" - }, { - "name" : "apiId", - "in" : "query", - "description" : "The system generated id for an API.The id of an can be retrieved from the API details screen", - "required" : false, - "type" : "string", - "x-example" : "apiId=105e99ee-0e1b-4afa-8ff3-4322cf296558" - }, { - "name" : "applicationName", - "in" : "query", - "description" : "The name of the Application for which the invocation count is required.The exact name must be provided or regular expressions can be used like APP_.*", - "required" : false, - "type" : "string", - "x-example" : "applicationName=HostBasedIdentifier" - }, { - "name" : "applicationId", - "in" : "query", - "description" : "The system generated id for an Application.The id of an can be retrieved from the Application details screen", - "required" : false, - "type" : "string", - "x-example" : "applicationId=995e99ee-0e1b-4afa-8ff3-4322cf296587" - }, { - "name" : "packageName", - "in" : "query", - "description" : "The name of the Package for which the invocation count is required.The exact name must be provided or regular expressions can be used like Package_.*", - "required" : false, - "type" : "string", - "x-example" : "pakageName=TravelPackage" - }, { - "name" : "packageId", - "in" : "query", - "description" : "The system generated id for a Package.The id of an can be retrieved from the Package details screen", - "required" : false, - "type" : "string", - "x-example" : "apiId=685023ee-0e1b-4afa-8ff3-4322cf296566" - }, { - "name" : "planName", - "in" : "query", - "description" : "The name of the Plan for which the invocation count is required.The exact name must be provided or regular expressions can be used like Plan_.*", - "required" : false, - "type" : "string", - "x-example" : "planName=GoldPlan" - }, { - "name" : "planId", - "in" : "query", - "description" : "The system generated id for a Plan.The id of an can be retrieved from the Plan details screen", - "required" : false, - "type" : "string", - "x-example" : "planId=785e99ee-0e1b-4afa-8ff3-4322cf296566" - }, { - "name" : "fromDate", - "in" : "query", - "description" : "This is the date from which the count has to be retrieved for the matching filter criteria.It is a mandatory parameter and it should be of the format YYYY-MM-DD. Regular expression support is not available for this parameter", - "required" : true, - "type" : "string", - "format" : "date", - "x-example" : "fromDate=2017-02-26 or fromDate=1488091324" - }, { - "name" : "toDate", - "in" : "query", - "description" : "This is the date to which the count has to be retrieved for the matching filter criteria.It is a mandatory parameter and it should be of the format YYYY-MM-DD. Regular expression support is not available for this parameter", - "required" : true, - "type" : "string", - "format" : "date", - "x-example" : "toDate=2017-02-27 or toDate=1488177724" - } ], - "responses" : { - "200" : { - "description" : "Array of transactional events count grouped by apiId and api version.", - "examples" : { - "application/json" : "{\r\n \"count\": [\r\n {\r\n \"apiName\": \"PetStoreTest\",\r\n \"apiVersion\": \"1.0.0\",\r\n \"count\": 2\r\n }\r\n ]\r\n}" - }, - "schema" : { - "$ref" : "#/definitions/TransactionResponse" - } - }, - "401" : { - "description" : "This response indicates that invalid credentials have been provided for the request." - }, - "400" : { - "description" : "One optional parameter along with fromDate and toDate is mandatory", - "examples" : { - "application/json" : "{ \"errorDetails\": \" Insufficient parameters. At least one parameter in addition to the creation date range must be provided.\"}" - } - } - }, - "security" : [ { - "Basic" : [ ] - } ] - } - } - }, - "securityDefinitions" : { - "Basic" : { - "description" : "API Gateway Administrator and API Gateway provider", - "type" : "basic" - } - }, - "definitions" : { - "ExternalCallData" : { - "type" : "object", - "properties" : { - "externalCallType" : { - "type" : "string" - }, - "externalURL" : { - "type" : "string" - }, - "callStartTime" : { - "type" : "integer", - "format" : "int64" - }, - "callEndTime" : { - "type" : "integer", - "format" : "int64" - }, - "callDuration" : { - "type" : "integer", - "format" : "int64" - }, - "responseCode" : { - "type" : "string" - } - } - }, - "TransactionEvent" : { - "type" : "object", - "properties" : { - "id" : { - "type" : "string" - }, - "eventType" : { - "type" : "string" - }, - "sourceGateway" : { - "type" : "string" - }, - "sourceGatewayDetails" : { - "type" : "string" - }, - "creationDate" : { - "type" : "integer", - "format" : "int64", - "description" : "Creation time of the transaction." - }, - "apiName" : { - "type" : "string", - "description" : "API name" - }, - "apiVersion" : { - "type" : "string", - "description" : "API version" - }, - "apiId" : { - "type" : "string", - "description" : "API Id" - }, - "totalTime" : { - "type" : "integer", - "format" : "int64", - "description" : "Total time taken for processing the request" - }, - "sessionId" : { - "type" : "string", - "description" : "Unique Id of the session" - }, - "providerTime" : { - "type" : "integer", - "format" : "int64", - "description" : "Time taken by the native provider for processing the request" - }, - "applicationName" : { - "type" : "string", - "description" : "Application name" - }, - "consumerIp" : { - "type" : "string", - "description" : "IP address of the consumer for the current request" - }, - "applicationIp" : { - "type" : "string", - "description" : "IP address of the application for the current request" - }, - "applicationId" : { - "type" : "string", - "description" : "Unique Id of the application" - }, - "status" : { - "type" : "string", - "description" : "Status of the request" - }, - "reqPayload" : { - "type" : "string", - "description" : "The complete request payload" - }, - "resPayload" : { - "type" : "string", - "description" : "The complete response payload" - }, - "totalDataSize" : { - "type" : "integer", - "format" : "int64", - "description" : "Total size of the payload" - }, - "responseCode" : { - "type" : "string", - "description" : "Response status code" - }, - "cachedResponse" : { - "type" : "string", - "description" : "Boolean value to indicate whether the response is served from cache" - }, - "operationName" : { - "type" : "string", - "description" : "Operation name of the incoming request" - }, - "httpMethod" : { - "type" : "string", - "description" : "Name of the method" - }, - "packageName" : { - "type" : "string", - "description" : "Package name" - }, - "packageId" : { - "type" : "string", - "description" : "Id of the package." - }, - "planName" : { - "type" : "string", - "description" : "Plan name" - }, - "planId" : { - "type" : "string", - "description" : "Id of the Plan" - }, - "origin" : { - "type" : "string", - "description" : "Origin of a Websocket message" - }, - "messagePayload" : { - "type" : "string", - "description" : "Payload of a Websocket message" - }, - "messageType" : { - "type" : "string", - "description" : "Websocket message type" - }, - "requestHeaders" : { - "type" : "object", - "description" : "Incoming request headers", - "additionalProperties" : { - "type" : "string" - } - }, - "responseHeaders" : { - "type" : "object", - "description" : "Outgoing response headers", - "additionalProperties" : { - "type" : "string" - } - }, - "queryParameters" : { - "type" : "object", - "description" : "Incoming query parameters", - "additionalProperties" : { - "type" : "string" - } - }, - "correlationID" : { - "type" : "string", - "description" : "Correlation ID used in the logging" - }, - "customFields" : { - "type" : "object", - "description" : "Custom fields to be added.", - "additionalProperties" : { - "type" : "string" - } - }, - "errorOrigin" : { - "type" : "string", - "description" : "Information of error orgination" - }, - "nativeRequestHeaders" : { - "type" : "object", - "description" : "Request headers sent in native call", - "additionalProperties" : { - "type" : "string" - } - }, - "nativeReqPayload" : { - "type" : "string", - "description" : "Request payload sent in native call" - }, - "nativeResponseHeaders" : { - "type" : "object", - "description" : "Response headers received from native call", - "additionalProperties" : { - "type" : "string" - } - }, - "nativeResPayload" : { - "type" : "string", - "description" : "Response payload received from native call" - }, - "nativeHttpMethod" : { - "type" : "string", - "description" : "Finally resolved HTTP method of native endpoint call" - }, - "nativeURL" : { - "type" : "string", - "description" : "Finally resolved URL of native endpoint call" - }, - "externalCalls" : { - "type" : "array", - "description" : "Details of external calls made", - "items" : { - "$ref" : "#/definitions/ExternalCallData" - } - }, - "sourceGatewayNode" : { - "type" : "string", - "description" : "The node which processed the request, in a multi node gateway" - }, - "callbackRequest" : { - "type" : "boolean" - } - } - }, - "TransactionResponse" : { - "type" : "object", - "properties" : { - "apiId" : { - "type" : "string", - "description" : "API Id" - }, - "apiName" : { - "type" : "string", - "description" : "API name" - }, - "apiVersion" : { - "type" : "string", - "description" : "API version" - }, - "count" : { - "type" : "integer", - "format" : "int64", - "description" : "The total number of invocations based on the provided filter criteria" - } - } - } - } -} \ No newline at end of file From 3f0261d29e5e489403ab11ffb82d561728684a99 Mon Sep 17 00:00:00 2001 From: Dhivakar Asokan <48990091+dhivakar-asokan@users.noreply.github.com> Date: Thu, 21 May 2020 20:30:44 +0530 Subject: [PATCH 14/22] Delete APIGatewayUserManagementSwagger.json --- .../APIGatewayUserManagementSwagger.json | 858 ------------------ 1 file changed, 858 deletions(-) delete mode 100644 apigatewayservices/APIGatewayUserManagementSwagger.json diff --git a/apigatewayservices/APIGatewayUserManagementSwagger.json b/apigatewayservices/APIGatewayUserManagementSwagger.json deleted file mode 100644 index 6891cc8..0000000 --- a/apigatewayservices/APIGatewayUserManagementSwagger.json +++ /dev/null @@ -1,858 +0,0 @@ -{ - "swagger" : "2.0", - "info" : { - "description" : "API Gateway User Management Service allows you to manage Users, Groups and Access profiles in the API Gateway. Any user with the 'Manage user administration' functional privilege can manage the Users, Groups and Access profiles in API Gateway. By default, the users who are part of API-Gateway-Administrators groups will have this privilege.\n\nAPI Gateway allows you to manage the password restrictions settings. For security purposes, API Gateway places length and character restrictions on passwords for administrator and non-administrator users. API Gateway contains a default set of password requirements. However, you can change these using the API Gateway Administration Service. Refer the REST resource '/configurations/passwordRestrictions' in the API Gateway Administration Service. \n\nAPI Gateway allows you to manage the password expiration settings. For security purposes, API Gateway allows administrators to set password expiration requirements on passwords for administrator and non-administrator users. API Gateway contains a default set of password expiry settings. However, you can change these with the API Gateway Administration service. Refer the REST resource '/configurations/passwordExpiry' in the API Gateway Administration Service. \n\nAPI Gateway allows you to manage the account locking settings. For security purposes, it is important to lock a user account when the user fails to provide the correct password after a specified number of failed login attempts to API Gateway. A locked user account remains locked for a specific period of time, after which the account gets unlocked. API Gateway allows administrators to configure these account locking settings for administrator and non-administrator users. Using API Gateway Administration Service, you can set the values for number of attempts by a user before locking the account and also the duration of the lock interval. Refer the REST resource '/configurations/accountLockSettings' in the API Gateway Administration Service.\n\nAPI Gateway allows you to view the locked user accounts and also allows to manually unlock locked user accounts before the automatic unlocking period. This can be achieved using the REST resource '/is/lockedAccounts' in the API Gateway User Management Service. \n\nAPI Gateway allows you to configure LDAP directories. If your server uses Lightweight Directory Access Protocol (LDAP) for user and group information, you can configure API Gateway to obtain user and group information from the external LDAP directory. You can configure API Gateway to use more than one LDAP directory at a time, allowing API Gateway to work with different LDAP directories for users in different locations or different organizations. You can manage the LDAP directories and LDAP configurations using the API Gateway Administration service. Refer the REST resource '/configurations/ldapConfig' in the API Gateway Administration Service.\n\nGlobal Team Assignments : When Teamwork feature is enabled, one can automate the team assignment for assets, by defining Global Team Assignment rules. Rules are defined by specifying one or more asset based conditions, and by configuring the rule output if the conditions are met. Management of such rules are exposed through an REST API. Refer the REST resource '/rule' in the API Gateway Administration Service.", - "version" : "10.7", - "title" : "API Gateway User Management Service" - }, - "host" : "localhost:5555", - "basePath" : "/rest/apigateway", - "schemes" : [ "http" ], - "consumes" : [ "application/json" ], - "produces" : [ "application/json" ], - "paths" : { - "/installedLanguages" : { - "get" : { - "description" : "The method retrieves list of installed language packs in API Gateway.", - "operationId" : "getInstalledLanguages", - "produces" : [ "application/json" ], - "parameters" : [ ], - "responses" : { - "200" : { - "description" : "This status code indicates that the list of installed language packs is successfully retrieved.", - "examples" : { - "application/json" : "{\r\n \"installedLanguages\": [\r\n \"ja\"\r\n ]\r\n}" - }, - "schema" : { - "type" : "array", - "items" : { - "type" : "string" - } - } - }, - "401" : { - "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." - } - }, - "security" : [ { - "Basic" : [ ] - } ] - } - }, - "/accessProfiles" : { - "get" : { - "description" : "The method retrieves list of all teams in API Gateway.", - "operationId" : "getAccessProfiles", - "produces" : [ "application/json" ], - "parameters" : [ ], - "responses" : { - "200" : { - "description" : "This status code indicates that the list of teams is successfully retrieved.", - "examples" : { - "application/json" : "{\r\n \"accessProfiles\": [\r\n {\r\n \"id\": \"Administrators\",\r\n \"name\": \"Administrators\",\r\n \"description\": \"Groups associated to this team are allowed to perform all the administration related tasks. \",\r\n \"systemDefined\": true,\r\n \"privilege\": \"1111111111111111111111111111111111111111111111111111111111111111\",\r\n \"groupIds\": [\r\n \"Administrators\",\r\n \"API-Gateway-Administrators\"\r\n ]\r\n },\r\n {\r\n \"id\": \"API-Gateway-Providers\",\r\n \"name\": \"API-Gateway-Providers\",\r\n \"description\": \"Groups associated to this team are allowed to access an asset based on the functional privileges assigned to this team.\",\r\n \"systemDefined\": true,\r\n \"privilege\": \"111100101101100000001\",\r\n \"groupIds\": [\r\n \"API-Gateway-Providers\"\r\n ]\r\n },\r\n {\r\n \"id\": \"8b6f2e10-1d82-4813-b927-4c1cf4a4d029\",\r\n \"name\": \"TestProfile\",\r\n \"description\": \"Test\",\r\n \"systemDefined\": false,\r\n \"privilege\": \"101110000001100000110101\",\r\n \"groupIds\": [\r\n \"be9147a8-6e53-4472-b1bd-16337a84d314\"\r\n ],\r\n \"teamAdmin\": {\r\n \"userIds\": [\r\n \"user1\"\r\n ],\r\n \"groupIds\": [\r\n \"group1\"\r\n ]\r\n }\r\n\r\n }\r\n ]\r\n}" - }, - "schema" : { - "$ref" : "#/definitions/AccessProfile" - } - }, - "401" : { - "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." - } - }, - "security" : [ { - "Basic" : [ ] - } ] - }, - "post" : { - "description" : "The method creates a team in API Gateway. The API request body must contain the payload for the team. Each bit infers the applicability of the functional privilege permission. Value 1 implies permission granted for that functional privilege. Value 0 implies denied permission. Function Privileges and its positions from left most bit to the right most bit. 1.Manage APIs2.Activate / Deactivate APIs3.Manage applications4.Manage aliases5.Manage global policies6.Activate / Deactivate global policies7.Manage policy templates8.Manage threat protection configurations9.Manage packages and plans10.Activate / Deactivate packages11.Publish to API Portal12.Import assets13.Export assets14.View administration configurations15.Manage general administration configurations16.Manage security configurations17.Manage destination configurations18.Manage system settings19.Manage user administration20.Manage purge and restore runtime events21.Execute service result cache APIs22.Manage Promotion23.Publish API to Service Registry24.Manage Service Registries", - "operationId" : "createAccessProfile", - "consumes" : [ "application/json" ], - "produces" : [ "application/json" ], - "parameters" : [ { - "in" : "body", - "name" : "body", - "description" : "This parameter describes the request payload of a accessProfile that is to be created in API Gateway.", - "required" : true, - "schema" : { - "$ref" : "#/definitions/AccessProfile" - }, - "x-examples" : { - "application/json" : "{\r\n \"name\": \"TestProfile\",\r\n \"description\": \"Test\",\r\n \"privilege\": \"101110000001100000110101\",\r\n \"groupIds\": [\r\n \"be9147a8-6e53-4472-b1bd-16337a84d314\"\r\n ],\r\n \"teamAdmin\": {\r\n \"userIds\": [\r\n \"Administrator\"\r\n ],\r\n \"groupIds\": [\r\n \"Administrators\"\r\n ]\r\n }\r\n}" - } - } ], - "responses" : { - "201" : { - "description" : "This status code indicates that the team has been successfully created in API Gateway, and the newly created team is available in the response body.", - "examples" : { - "application/json" : "{\r\n \"id\": \"8b6f2e10-1d82-4813-b927-4c1cf4a4d029\",\r\n \"name\": \"TestProfile\",\r\n \"description\": \"Test\",\r\n \"privilege\": \"101110000001100000110101\",\r\n \"groupIds\": [\r\n \"be9147a8-6e53-4472-b1bd-16337a84d314\"\r\n ],\r\n \"teamAdmin\": {\r\n \"userIds\": [\r\n \"Administrator\"\r\n ],\r\n \"groupIds\": [\r\n \"Administrators\"\r\n ]\r\n }\r\n}" - }, - "schema" : { - "$ref" : "#/definitions/AccessProfile" - } - }, - "400" : { - "description" : "This status code indicates that a team with the given name already exists in API Gateway or the request body is not correct." - }, - "401" : { - "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." - } - }, - "security" : [ { - "Basic" : [ ] - } ] - } - }, - "/accessProfiles/{accessProfileId}" : { - "get" : { - "description" : "The method retrieves the details of a team in API Gateway.", - "operationId" : "getAccessProfile", - "produces" : [ "application/json" ], - "parameters" : [ { - "name" : "accessProfileId", - "in" : "path", - "description" : "The path parameter specifies the id of a team whose details are to be retrieved.", - "required" : true, - "type" : "string" - } ], - "responses" : { - "200" : { - "description" : "This status code indicates that the details of the team is successfully retrieved.", - "examples" : { - "application/json" : "{\r\n \"id\": \"8b6f2e10-1d82-4813-b927-4c1cf4a4d029\",\r\n \"name\": \"TestProfile\",\r\n \"description\": \"Test\",\r\n \"systemDefined\": false,\r\n \"privilege\": \"1011100000011000001\",\r\n \"groupIds\": [\r\n \"be9147a8-6e53-4472-b1bd-16337a84d314\"\r\n ],\r\n \"teamAdmin\": {\r\n \"userIds\": [\r\n \"Administrator\"\r\n ],\r\n \"groupIds\": [\r\n \"Administrators\"\r\n ]\r\n }\r\n}" - }, - "schema" : { - "$ref" : "#/definitions/AccessProfile" - } - }, - "404" : { - "description" : "This status code indicates that a team with the given id could not be found in API Gateway.", - "examples" : { - "application/json" : "{\r\n \"errorDetails\": \" AccessProfile with id: 15fbeeb2-745c-4988-b7b6-61f359ecbfc8 does not exist.\"\r\n}" - } - }, - "401" : { - "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." - } - }, - "security" : [ { - "Basic" : [ ] - } ] - }, - "put" : { - "description" : "The method updates the details of a specified team in API Gateway. The API request body must contain the payload for the updated accessProfile.", - "operationId" : "updateAccessProfile", - "consumes" : [ "application/json" ], - "produces" : [ "application/json" ], - "parameters" : [ { - "in" : "body", - "name" : "body", - "description" : "This parameter describes the request payload of a accessProfile that is to be updated in API Gateway.", - "required" : true, - "schema" : { - "$ref" : "#/definitions/AccessProfile" - }, - "x-examples" : { - "application/json" : "{\r\n \"name\": \"TestProfile\",\r\n \"description\": \"Test\",\r\n \"privilege\": \"101110000001100000110101\",\r\n \"groupIds\": [\r\n \"be9147a8-6e53-4472-b1bd-16337a84d314\"\r\n ],\r\n \"teamAdmin\": {\r\n \"userIds\": [\r\n \"Administrator\"\r\n ],\r\n \"groupIds\": [\r\n \"Administrators\"\r\n ]\r\n }\r\n}" - } - }, { - "name" : "accessProfileId", - "in" : "path", - "description" : "The path parameter specifies the id of a team whose detail is to be updated in API Gateway.", - "required" : true, - "type" : "string" - } ], - "responses" : { - "200" : { - "description" : "This status code indicates that the team has been successfully updated in API Gateway, and the updated team is available in the response body.", - "examples" : { - "application/json" : "{\r\n \"id\": \"8b6f2e10-1d82-4813-b927-4c1cf4a4d029\",\r\n \"name\": \"TestProfile\",\r\n \"description\": \"Test\",\r\n \"systemDefined\": false,\r\n \"privilege\": \"1011100000011000001\",\r\n \"groupIds\": [\r\n \"be9147a8-6e53-4472-b1bd-16337a84d314\"\r\n ],\r\n \"teamAdmin\": {\r\n \"userIds\": [\r\n \"Administrator\"\r\n ],\r\n \"groupIds\": [\r\n \"Administrators\"\r\n ]\r\n }\r\n}" - }, - "schema" : { - "$ref" : "#/definitions/AccessProfile" - } - }, - "400" : { - "description" : "This status code indicates that the request body is invalid." - }, - "401" : { - "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." - } - }, - "security" : [ { - "Basic" : [ ] - } ] - }, - "delete" : { - "description" : "The method deletes a team from API Gateway.", - "operationId" : "deleteAccessProfile", - "produces" : [ "application/json" ], - "parameters" : [ { - "name" : "accessProfileId", - "in" : "path", - "description" : "This parameter specifies the ID of a team that is to be deleted in API Gateway.", - "required" : true, - "type" : "string" - } ], - "responses" : { - "401" : { - "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." - }, - "204" : { - "description" : "This status code indicates that the specified team has been successfully deleted from API Gateway." - }, - "404" : { - "description" : "This status code indicates that team with the given id could not be found in API Gateway.", - "examples" : { - "application/json" : "{\r\n \"errorDetails\": \" AccessProfile with id: 732c4526-db9a-4ef9-9782-edda1a6aa9bc does not exist.\"\r\n}" - } - } - }, - "security" : [ { - "Basic" : [ ] - } ] - } - }, - "/is/lockedAccounts" : { - "get" : { - "description" : "Retrieves the locked accounts in API Gateway", - "operationId" : "getLockedAccounts", - "consumes" : [ "application/json" ], - "produces" : [ "application/json" ], - "parameters" : [ ], - "responses" : { - "200" : { - "description" : "", - "examples" : { - "application/json" : "{\r\n\t\"lockedAccounts\":[\"a\",\"b\"]\r\n}" - }, - "schema" : { - "$ref" : "#/definitions/LockedAccounts" - } - }, - "401" : { - "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." - } - }, - "security" : [ { - "Basic" : [ ] - } ] - }, - "post" : { - "description" : "Unlock user account(s) locked by API Gateway", - "operationId" : "unLockUserAccounts", - "consumes" : [ "application/json" ], - "produces" : [ "application/json" ], - "parameters" : [ { - "in" : "body", - "name" : "body", - "description" : "", - "required" : true, - "schema" : { - "$ref" : "#/definitions/UnlockAccountsRequest" - }, - "x-examples" : { - "application/json" : "{\r\n\t\"unLockAccounts\": { \r\n\t\t\"userName\": [\"c\"]\r\n\t}\r\n}" - } - } ], - "responses" : { - "200" : { - "description" : "", - "examples" : { - "application/json" : "{\r\n\t\"lockedAccounts\":[\"a\",\"b\"]\r\n}" - }, - "schema" : { - "$ref" : "#/definitions/LockedAccounts" - } - }, - "401" : { - "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." - } - }, - "security" : [ { - "Basic" : [ ] - } ] - } - }, - "/groups" : { - "get" : { - "description" : "The method retrieves list of all groups in API Gateway.", - "operationId" : "getGroups", - "produces" : [ "application/json" ], - "parameters" : [ ], - "responses" : { - "200" : { - "description" : "This status code indicates that the list of groups is successfully retrieved.", - "examples" : { - "application/json" : "{\r\n \"groups\": [\r\n {\r\n \"id\": \"Administrators\",\r\n \"name\": \"Administrators\",\r\n \"description\": \"Users added to this group can perform similar local administrative tasks.\",\r\n \"type\": \"local\",\r\n \"systemDefined\": true,\r\n \"userIds\": [\r\n \"Administrator\"\r\n ]\r\n },\r\n {\r\n \"id\": \"API-Gateway-Administrators\",\r\n \"name\": \"API-Gateway-Administrators\",\r\n \"description\": \"Users added to this group can perform similar API Gateway Administrative tasks.\",\r\n \"type\": \"local\",\r\n \"systemDefined\": true,\r\n \"userIds\": [\r\n \"Administrator\"\r\n ]\r\n },\r\n {\r\n \"id\": \"API-Gateway-Providers\",\r\n \"name\": \"API-Gateway-Providers\",\r\n \"description\": \"Users added to this group can perform similar API Gateway Providers tasks.\",\r\n \"type\": \"local\",\r\n \"systemDefined\": true,\r\n \"userIds\": []\r\n },\r\n {\r\n \"id\": \"be9147a8-6e53-4472-b1bd-16337a84d314\",\r\n \"name\": \"TestGrp\",\r\n \"description\": \"\",\r\n \"type\": \"local\",\r\n \"systemDefined\": false,\r\n \"userIds\": [\r\n \"69aa914e-fbfc-4c74-87f1-2d48f589e115\"\r\n ]\r\n }\r\n ]\r\n}" - }, - "schema" : { - "$ref" : "#/definitions/Group" - } - }, - "401" : { - "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." - } - }, - "security" : [ { - "Basic" : [ ] - } ] - }, - "post" : { - "description" : "The method creates a group in API Gateway. The API request body must contain the payload for the group.", - "operationId" : "createGroup", - "consumes" : [ "application/json" ], - "produces" : [ "application/json" ], - "parameters" : [ { - "in" : "body", - "name" : "body", - "description" : "This parameter describes the request payload of a group that is to be created in API Gateway.", - "required" : true, - "schema" : { - "$ref" : "#/definitions/Group" - }, - "x-examples" : { - "application/json" : "{\r\n\t \"name\": \"TestGrp\",\r\n\t\"description\": \"Group has all QA Members\",\r\n\t\"userIds\": [\r\n\t\t\"69aa914e-fbfc-4c74-87f1-2d48f589e115\"\r\n\t]\r\n}" - } - } ], - "responses" : { - "201" : { - "description" : "This status code indicates that the group has been successfully created in API Gateway, and the newly created group is available in the response body.", - "examples" : { - "application/json" : "{\r\n\t\"id\": \"be9147a8-6e53-4472-b1bd-16337a84d314\",\r\n\t\"name\": \"TestGrp\",\r\n\t\"description\": \"Group has all QA Members\",\r\n\t\"type\": \"local\",\r\n\t\"userIds\": [\r\n\t\t\"69aa914e-fbfc-4c74-87f1-2d48f589e115\"\r\n\t]\r\n}" - }, - "schema" : { - "$ref" : "#/definitions/Group" - } - }, - "400" : { - "description" : "This status code indicates that a group with the given name already exists in API Gateway or the request body is not correct." - }, - "401" : { - "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." - } - }, - "security" : [ { - "Basic" : [ ] - } ] - } - }, - "/groups/{groupId}" : { - "get" : { - "description" : "The method retrieves the details of a group in API Gateway.", - "operationId" : "getGroup", - "produces" : [ "application/json" ], - "parameters" : [ { - "name" : "groupId", - "in" : "path", - "description" : "The path parameter specifies the id of a group whose details are to be retrieved.", - "required" : true, - "type" : "string" - } ], - "responses" : { - "200" : { - "description" : "This status code indicates that the details of the group is successfully retrieved.", - "examples" : { - "application/json" : "{\r\n \"groups\": [\r\n {\r\n \"id\": \"be9147a8-6e53-4472-b1bd-16337a84d314\",\r\n \"name\": \"TestGrp\",\r\n \"description\": \"Group has all QA Members\",\r\n \"type\": \"local\",\r\n \"userIds\": [\r\n \"69aa914e-fbfc-4c74-87f1-2d48f589e115\"\r\n ]\r\n }\r\n ]\r\n}" - }, - "schema" : { - "$ref" : "#/definitions/Group" - } - }, - "404" : { - "description" : "This status code indicates that a group with the given id could not be found in API Gateway.", - "examples" : { - "application/json" : "{\r\n \"errorDetails\": \" Group with id: 15fbeeb2-745c-4988-b7b6-61f359ecbfc8 does not exist.\"\r\n}" - } - }, - "401" : { - "description" : "This status code indicates that either group didn't provide right credentials or user doesn't have required privileges to access this API." - } - }, - "security" : [ { - "Basic" : [ ] - } ] - }, - "put" : { - "description" : "The method updates the details of a specified group in API Gateway. The API request body must contain the payload for the updated group.", - "operationId" : "updateGroup", - "consumes" : [ "application/json" ], - "produces" : [ "application/json" ], - "parameters" : [ { - "in" : "body", - "name" : "body", - "description" : "This parameter describes the request payload of a group that is to be updated in API Gateway.", - "required" : true, - "schema" : { - "$ref" : "#/definitions/Group" - }, - "x-examples" : { - "application/json" : "{\r\n\t\"id\": \"be9147a8-6e53-4472-b1bd-16337a84d314\",\r\n\t\"name\": \"TestGrp\",\r\n\t\"description\": \"Group has all QA Members\",\r\n\t\"userIds\": [\r\n\t\t\"69aa914e-fbfc-4c74-87f1-2d48f589e115\"\r\n\t]\r\n}" - } - }, { - "name" : "groupId", - "in" : "path", - "description" : "The path parameter specifies the id of a group whose detail is to be updated in API Gateway.", - "required" : true, - "type" : "string" - } ], - "responses" : { - "200" : { - "description" : "This status code indicates that the group has been successfully updated in API Gateway, and the updated group is available in the response body.", - "examples" : { - "application/json" : "{\r\n\t\"id\": \"be9147a8-6e53-4472-b1bd-16337a84d314\",\r\n\t\"name\": \"TestGrp\",\r\n\t\"description\": \"Group has all QA Members\",\r\n\t\"type\": \"local\",\r\n\t\"userIds\": [\r\n\t\t\"69aa914e-fbfc-4c74-87f1-2d48f589e115\"\r\n\t]\r\n}" - }, - "schema" : { - "$ref" : "#/definitions/Group" - } - }, - "400" : { - "description" : "This status code indicates that the request body is invalid." - }, - "401" : { - "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." - } - }, - "security" : [ { - "Basic" : [ ] - } ] - }, - "delete" : { - "description" : "The method deletes a group from API Gateway.", - "operationId" : "deleteGroup", - "produces" : [ "application/json" ], - "parameters" : [ { - "name" : "groupId", - "in" : "path", - "description" : "The path parameter specifies the id of a group that is to be deleted from API Gateway.", - "required" : true, - "type" : "string" - } ], - "responses" : { - "401" : { - "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." - }, - "204" : { - "description" : "This status code indicates that the specified group has been successfully deleted from API Gateway." - }, - "404" : { - "description" : "This status code indicates that group with the given id could not be found in API Gateway.", - "examples" : { - "application/json" : "{\r\n \"errorDetails\": \" Group with id: 732c4526-db9a-4ef9-9782-edda1a6aa9bc does not exist.\"\r\n}" - } - } - }, - "security" : [ { - "Basic" : [ ] - } ] - } - }, - "/users" : { - "get" : { - "description" : "The method retrieves list of all users in API Gateway.", - "operationId" : "getUsers", - "produces" : [ "application/json" ], - "parameters" : [ ], - "responses" : { - "200" : { - "description" : "This status code indicates that the list of users is successfully retrieved.", - "examples" : { - "application/json" : "{\r\n \"users\": [\r\n {\r\n \"id\": \"Administrator\",\r\n \"loginId\": \"Administrator\",\r\n \"firstName\": \"Administrator\",\r\n \"password\": \"********************************\",\r\n \"type\": \"local\",\r\n \"allowDigestAuth\": false,\r\n \"active\": true,\r\n \"systemDefined\": true,\r\n \"language\": \"en\",\r\n \"emailAddresses\": []\r\n },\r\n {\r\n \"id\": \"15fbeeb2-745c-4988-b7b6-61f359ecbfc8\",\r\n \"loginId\": \"testUser\",\r\n \"firstName\": \"User\",\r\n \"lastName\": \"Test\",\r\n \"password\": \"********************************\",\r\n \"type\": \"local\",\r\n \"allowDigestAuth\": false,\r\n \"active\": true,\r\n \"systemDefined\": false,\r\n \"language\": \"ja\",\r\n \"emailAddresses\": [\r\n \"noreply@softwareag.com\"\r\n ]\r\n }\r\n ]\r\n}\r\n" - }, - "schema" : { - "$ref" : "#/definitions/User" - } - }, - "401" : { - "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." - } - }, - "security" : [ { - "Basic" : [ ] - } ] - }, - "post" : { - "description" : "The method creates an user in API Gateway. The API request body must contain the payload for the user.", - "operationId" : "createUser", - "consumes" : [ "application/json" ], - "produces" : [ "application/json" ], - "parameters" : [ { - "in" : "body", - "name" : "body", - "description" : "This parameter describes the request payload of a user that is to be created in API Gateway.", - "required" : true, - "schema" : { - "$ref" : "#/definitions/User" - }, - "x-examples" : { - "application/json" : "{\r\n \"loginId\": \"testUser\",\r\n \"firstName\": \"User\",\r\n \"lastName\": \"Test\",\r\n \"password\": \"test\",\r\n \"type\": \"local\",\r\n \"allowDigestAuth\": false,\r\n \"language\": \"en\",\r\n \"emailAddresses\": [\r\n \"noreply@softwareag.com\"\r\n ]\r\n }" - } - } ], - "responses" : { - "201" : { - "description" : "This status code indicates that the user has been successfully created in API Gateway, and the newly created user is available in the response body.", - "examples" : { - "application/json" : "{\r\n \"id\": \"15fbeeb2-745c-4988-b7b6-61f359ecbfc8\",\r\n \"loginId\": \"testUser\",\r\n \"firstName\": \"User\",\r\n \"lastName\": \"Test\",\r\n \"password\": \"********************************\",\r\n \"type\": \"local\",\r\n \"allowDigestAuth\": false,\r\n \"active\": true,\r\n \"language\": \"en\",\r\n \"emailAddresses\": [\r\n \"noreply@softwareag.com\"\r\n ]\r\n }" - }, - "schema" : { - "$ref" : "#/definitions/User" - } - }, - "400" : { - "description" : "This status code indicates that an user with the given loginId already exists in API Gateway or the request body is not correct." - }, - "401" : { - "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." - } - }, - "security" : [ { - "Basic" : [ ] - } ] - } - }, - "/users/authenticate" : { - "post" : { - "description" : "This HTTP request authenticates an User in API Gateway.", - "operationId" : "authenticateUser", - "consumes" : [ "application/json" ], - "produces" : [ "application/json" ], - "parameters" : [ { - "in" : "body", - "name" : "body", - "description" : "This parameter describes the request payload of a user that is to be created in API Gateway.", - "required" : true, - "schema" : { - "$ref" : "#/definitions/User" - } - } ], - "responses" : { - "200" : { - "description" : "This status code indicates that the user was successfully authenticated.", - "schema" : { - "$ref" : "#/definitions/User" - } - }, - "400" : { - "description" : "This status code indicates that the request payload is not correct or User is already exists" - }, - "401" : { - "description" : "This status code indicates that authorization has been refused for this HTTP request. This is possibly because, the user has not specified the required credentials (username and password), or has specified invalid credentials." - } - }, - "security" : [ { - "Basic" : [ ] - } ] - } - }, - "/users/{userId}" : { - "get" : { - "description" : "The method retrieves the details of an user in API Gateway.", - "operationId" : "getUser", - "produces" : [ "application/json" ], - "parameters" : [ { - "name" : "userId", - "in" : "path", - "description" : "The path parameter specifies the id of an user whose details are to be retrieved.", - "required" : true, - "type" : "string" - } ], - "responses" : { - "200" : { - "description" : "This status code indicates that the details of the user is successfully retrieved.", - "examples" : { - "application/json" : "{\r\n \"users\": [\r\n {\r\n \"id\": \"15fbeeb2-745c-4988-b7b6-61f359ecbfc8\",\r\n \"loginId\": \"testUser\",\r\n \"firstName\": \"User\",\r\n \"lastName\": \"Test\",\r\n \"password\": \"********************************\",\r\n \"type\": \"local\",\r\n \"allowDigestAuth\": false,\r\n \"active\": true,\r\n \"emailAddresses\": [\r\n \"noreply@softwareag.com\"\r\n ]\r\n }\r\n ]\r\n}" - }, - "schema" : { - "$ref" : "#/definitions/User" - } - }, - "404" : { - "description" : "This status code indicates that an user with the given id could not be found in API Gateway.", - "examples" : { - "application/json" : "{\r\n \"errorDetails\": \" User with id: 15fbeeb2-745c-4988-b7b6-61f359ecbfc8 does not exist.\"\r\n}" - } - }, - "401" : { - "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." - } - }, - "security" : [ { - "Basic" : [ ] - } ] - }, - "put" : { - "description" : "The method updates the details of a specified user in API Gateway. The API request body must contain the payload for the updated user.", - "operationId" : "updateUser", - "consumes" : [ "application/json" ], - "produces" : [ "application/json" ], - "parameters" : [ { - "in" : "body", - "name" : "body", - "description" : "This parameter describes the request payload of a user that is to be updated in API Gateway.", - "required" : true, - "schema" : { - "$ref" : "#/definitions/User" - }, - "x-examples" : { - "application/json" : "{\r\n \"loginId\": \"testUser\",\r\n \"firstName\": \"User\",\r\n \"lastName\": \"Test\",\r\n \"password\": \"test\",\r\n \"type\": \"local\",\r\n \"allowDigestAuth\": false,\r\n \"emailAddresses\": [\r\n \"noreply@softwareag.com\"\r\n ]\r\n }" - } - }, { - "name" : "userId", - "in" : "path", - "description" : "The path parameter specifies the id of an user whose detail is to be updated in API Gateway.", - "required" : true, - "type" : "string" - } ], - "responses" : { - "200" : { - "description" : "This status code indicates that the user has been successfully updated in API Gateway, and the updated user is available in the response body.", - "examples" : { - "application/json" : "{\r\n \"id\": \"15fbeeb2-745c-4988-b7b6-61f359ecbfc8\",\r\n \"loginId\": \"testUser\",\r\n \"firstName\": \"User\",\r\n \"lastName\": \"Test\",\r\n \"password\": \"test\",\r\n \"type\": \"local\",\r\n \"allowDigestAuth\": false,\r\n \"emailAddresses\": [\r\n \"noreply@softwareag.com\"\r\n ]\r\n }" - }, - "schema" : { - "$ref" : "#/definitions/User" - } - }, - "400" : { - "description" : "This status code indicates that the request body is invalid." - }, - "401" : { - "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." - } - }, - "security" : [ { - "Basic" : [ ] - } ] - }, - "delete" : { - "description" : "This HTTP request deletes the specified application in API Gateway.", - "operationId" : "deleteUser", - "produces" : [ "application/json" ], - "parameters" : [ { - "name" : "userId", - "in" : "path", - "description" : "This parameter specifies the ID of an application that is to be deleted in API Gateway.", - "required" : true, - "type" : "string" - } ], - "responses" : { - "401" : { - "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." - }, - "204" : { - "description" : "This status code indicates that the specified user has been successfully deleted from API Gateway." - }, - "404" : { - "description" : "This status code indicates that an user with the given id could not be found in API Gateway.", - "examples" : { - "application/json" : "{\r\n \"errorDetails\": \" User with id: 732c4526-db9a-4ef9-9782-edda1a6aa9bc does not exist.\"\r\n}" - } - } - }, - "security" : [ { - "Basic" : [ ] - } ] - } - }, - "/authenticate" : { - "post" : { - "description" : "This HTTP request authenticates an User in API Gateway.", - "operationId" : "authorizeUser", - "consumes" : [ "application/json" ], - "produces" : [ "application/json" ], - "parameters" : [ { - "in" : "body", - "name" : "body", - "description" : "This parameter describes the request payload of a user that is to be created in API Gateway.", - "required" : true, - "schema" : { - "$ref" : "#/definitions/User" - } - } ], - "responses" : { - "200" : { - "description" : "This status code indicates that the user was successfully authenticated.", - "schema" : { - "$ref" : "#/definitions/User" - } - }, - "400" : { - "description" : "This status code indicates that the request payload is not correct or User is already exists" - }, - "401" : { - "description" : "This status code indicates that authorization has been refused for this HTTP request. This is possibly because, the user has not specified the required credentials (username and password), or has specified invalid credentials." - } - }, - "security" : [ { - "Basic" : [ ] - } ] - } - } - }, - "securityDefinitions" : { - "Basic" : { - "description" : "API Gateway Administrator and API Gateway provider", - "type" : "basic" - } - }, - "definitions" : { - "AccessProfile" : { - "type" : "object", - "properties" : { - "id" : { - "type" : "string", - "description" : "AccessProfile ID", - "readOnly" : true - }, - "name" : { - "type" : "string", - "description" : "name of the accessprofile" - }, - "description" : { - "type" : "string", - "description" : "description of the accessprofile" - }, - "privilege" : { - "$ref" : "#/definitions/BitSet" - }, - "groupIds" : { - "type" : "array", - "description" : "list of groupIds assigned to the accessprofile", - "items" : { - "type" : "string" - } - }, - "teamAdmin" : { - "$ref" : "#/definitions/TeamAdmin" - } - }, - "description" : "This model contains details about a Team in API Gateway" - }, - "BitSet" : { - "type" : "object", - "properties" : { - "empty" : { - "type" : "boolean" - } - } - }, - "TeamAdmin" : { - "type" : "object", - "properties" : { - "userIds" : { - "type" : "array", - "description" : "list of userIds to be assigned as the team administrator.", - "items" : { - "type" : "string" - } - }, - "groupIds" : { - "type" : "array", - "description" : "list of groupIds to be assigned as the team administrator. All users in the group will become team administrator.", - "items" : { - "type" : "string" - } - } - } - }, - "UnlockAccounts" : { - "type" : "object", - "properties" : { - "userName" : { - "type" : "array", - "description" : "Username that needs to be unlocked.", - "items" : { - "type" : "string" - } - } - } - }, - "UnlockAccountsRequest" : { - "type" : "object", - "properties" : { - "unLockAccounts" : { - "$ref" : "#/definitions/UnlockAccounts" - } - } - }, - "LockedAccounts" : { - "type" : "object", - "properties" : { - "lockedAccounts" : { - "type" : "array", - "description" : "Comma separated list of user accounts which are locked.", - "items" : { - "type" : "string" - } - } - } - }, - "Group" : { - "type" : "object", - "properties" : { - "id" : { - "type" : "string", - "description" : "Group ID", - "readOnly" : true - }, - "name" : { - "type" : "string", - "description" : "name of the group" - }, - "description" : { - "type" : "string", - "description" : "description of the group" - }, - "userIds" : { - "type" : "array", - "description" : "list of user's Ids assigned to the group", - "items" : { - "type" : "string" - } - } - }, - "description" : "This model contains details about a group in API Gateway" - }, - "User" : { - "type" : "object", - "properties" : { - "id" : { - "type" : "string", - "description" : "unique identifier of a user", - "readOnly" : true - }, - "loginId" : { - "type" : "string", - "description" : "login name" - }, - "firstName" : { - "type" : "string", - "description" : "first name of the user" - }, - "lastName" : { - "type" : "string", - "description" : "last name of the user" - }, - "emailAddresses" : { - "type" : "array", - "description" : "list of email addresses of the user", - "items" : { - "type" : "string" - } - }, - "allowDigestAuth" : { - "type" : "boolean", - "description" : "list of email addresses of the user" - }, - "active" : { - "type" : "boolean", - "description" : "active status of the user" - }, - "language" : { - "type" : "string", - "description" : "preferred language of the user" - } - }, - "description" : "This model contains details about an User in API Gateway" - } - } -} \ No newline at end of file From 78e2db0644320969d80bf5154c4174fb9ddda8f7 Mon Sep 17 00:00:00 2001 From: Dhivakar Asokan <48990091+dhivakar-asokan@users.noreply.github.com> Date: Thu, 21 May 2020 20:31:57 +0530 Subject: [PATCH 15/22] Adding 10.3 apigatewayservices --- .../APIGatewayAdministration.json | 6872 +++++++++++++++++ apigatewayservices/APIGatewayAlias.json | 1044 +++ apigatewayservices/APIGatewayApplication.json | 1464 ++++ apigatewayservices/APIGatewayArchive.json | 289 + .../APIGatewayDocumentManagement.json | 285 + .../APIGatewayInternalService.json | 168 + .../APIGatewayPolicyManagement.json | 2854 +++++++ .../APIGatewayPromotionManagement.json | 661 ++ .../APIGatewayPublicServices.json | 97 + apigatewayservices/APIGatewaySearch.json | 188 + .../APIGatewayServiceManagement.json | 4947 ++++++++++++ .../APIGatewayTransactionalEvent.json | 437 ++ .../APIGatewayUserManagement.json | 809 ++ 13 files changed, 20115 insertions(+) create mode 100644 apigatewayservices/APIGatewayAdministration.json create mode 100644 apigatewayservices/APIGatewayAlias.json create mode 100644 apigatewayservices/APIGatewayApplication.json create mode 100644 apigatewayservices/APIGatewayArchive.json create mode 100644 apigatewayservices/APIGatewayDocumentManagement.json create mode 100644 apigatewayservices/APIGatewayInternalService.json create mode 100644 apigatewayservices/APIGatewayPolicyManagement.json create mode 100644 apigatewayservices/APIGatewayPromotionManagement.json create mode 100644 apigatewayservices/APIGatewayPublicServices.json create mode 100644 apigatewayservices/APIGatewaySearch.json create mode 100644 apigatewayservices/APIGatewayServiceManagement.json create mode 100644 apigatewayservices/APIGatewayTransactionalEvent.json create mode 100644 apigatewayservices/APIGatewayUserManagement.json diff --git a/apigatewayservices/APIGatewayAdministration.json b/apigatewayservices/APIGatewayAdministration.json new file mode 100644 index 0000000..808ef8f --- /dev/null +++ b/apigatewayservices/APIGatewayAdministration.json @@ -0,0 +1,6872 @@ +{ + "swagger" : "2.0", + "info" : { + "description" : "API Gateway Administration Service provides interface for you to administer various functions of the API Gateway. The user needs to have different functional privileges to administer different functions. For example, in order to manage runtime transactions data of the API Gateway, the user needs to have 'Manage purge and restore runtime events' privilege. By default, the users who are part of API-Gateway-Administrators group will have all privileges. \n\nFollowing Administration functions are exposed using this API. \n\n1. Manage data- Archive, Purge and Restore API Gateway runtime events, audit logs & metrics data. \n\nThis function lets the users manage the API Gateway runtime events, audit logs & metrics data. \n\nAPI Gateway generates different types of events in the runtime depending on the state of the API invocation. For example, an error event is generated when API Gateway encounters an error while processing the API request or the response. API Metrics is an aggregated data computed from the different events that happen in the system. These metrics provides information about the key performance indicators of an API like its \"Availability\", \"Fault Count\" etc which are useful for monitoring & governing the service performance and service level agreements. The API providers has a variety of options to choose from for storing these events and metrics. By default, API Gateway store will be used for storing this data. Here are some details about different type of events.\n\nTransactional event: Provides a summary (request & response) of each runtime transaction in the system. It is generated when a Log Invocation policy is included for the API. For example, if an API has this policy attached to it, then for every invoke the system generates a transaction event. \n\nError event: Provides details of an error that occurred during an API invoke. This event is generated whenever there is an error in the system during a runtime service invocation. \n\nMonitoring event: This event is generated based on the parameters configured in the API monitoring policies such as Monitor Service Level Agreements, Throttling etc. Monitoring could be done based on various parameters such as Total Request Count, Total Success Count, Response Time, Availability. Monitoring can be done at the consumer application level too so that each consumer can be tracked individually. \n \nPolicy violation event: Provides a summary of the policy violations that occurred in the system. When a policy attached to an API is violated, the system generates the policy violation event.\n\nLifeCycle event: Provides a summary of the life cycle of the API Gateway instance. Whenever the instance is started or stopped, a life cycle notification is generated.\n\nThreat protection events: Provides a summary of the threat protection filter and rule violations. When a filter or rule is violated, the system generates the threat protection violation event. \n\nThe Audit logging of API Gateway provides audit information for different categories of system transactions, events, and occurrences of specific events (for example, login attempts) over a period of time. You can use audit logs to view a detailed record of various auditable events that occurred on the API Gateway objects, user login and logout operations, and identify the users who are responsible for the changes. You can configure which audit events to log for a specific destination based on your auditing requirements.You can configure API Gateway to log the auditable events for following destinations:\nAPI Gateway\nDatabase\nDigital Event Services (DES)\nElasticsearch. \n\nThe following auditable events can be configured to write to the API Gateway audit logs:\n Access profile management events: Creation, modification, and deletion of an Access profile object. \n Alias management events: Creation, modification, and deletion of an Alias object. \n Analytics management events: Archiving, purging, and restoring of analytics data in the database. \n API management events: Creation, modification, deletion, activation and deactivation of an API object. \n Application management events: Creation, modification, and deletion of an Application object. \n Approval management events: Approval and rejection of a request to create, register, and modify an application. Approval and rejection of a request to subscribe a package in API Portal.\n Group management events: Creation, modification, and deletion of a Group object.\n Package management events: Creation, modification, and deletion of a Package object.\n Plan management events: Creation, modification, and deletion of a Plan object.\n Policy management: Creation, modification, and deletion of a global Policy object.Creation, modification, and deletion of an API level Policy object.Activation and deactivation of a global policy.\n Activation and deactivation of an API level policy.\n Promotion management events: Creation, modification, and deletion of a Stage object.Promotion of an API stage.Rollback operation of an API stage.\n User management events: A user logs in or fails to log in to API Gateway.A user logs out of API Gateway.Creation, modification, and deletion of a User object.\n\nManaging the Events/Audit logs/Metrics Data\n\nPurge: The process of systematically deleting unwanted data from the database is called purging. You can purge events, audit logs and metrics from the API Gateway store by setting the required date or duration in the API Gateway. You must have the required functional privileges to purge the API analytics data.\n\nArchive: Moving data that is no longer actively used for long-term retention so that it can be used at a later time is called archiving. You can archive events, audit logs and metrics by setting the required date or duration per tenant in the API Gateway. You must have the required functional privileges to archive events, audit logs and metrics.\n\nRestore: You can restore the archived data as required. \n\n\n2.Transaction based license: \n\nAPI Gateway supports core as well as transaction-based licensing model. When API Gateway uses a transaction-based licensing model, then each service invocation is considered as a transaction and API Gateway keeps a track of these transactions. API Gateway transactions for the current month are compared with the maximum number of transactions allowed in a month.When the usage breaches, notification will be generated for the current month. Apart from this if the user wants to generate notifications before usage breach itself when usage reaches to some x% like 70% or 80% then the user has to add notification criteria at 70% or 80%. By default API Gateway will have two default notification criteria's at 90%, 100%.\n\n\n3.Destination configuration: \n\nAPI Gateway can publish events and performance metrics data to the configured destinations. You must have the API Gateway's manage destination configurations functional privilege assigned to configure the following destinations to which the event types and performance metrics data is published:\nAPI Gateway\nAPI Portal\nTransaction logger\nCentraSite\nDatabase\nDigital Events\nElasticsearch\nEmail\nSNMP \n\n\n4.Default API fault configuration: \n\n API provider can configure a global error handling behaviour. In case of the native service error, the provider may choose to either forward the native error as is or can choose to modify the error response. In case the provider chooses to provide a custom error response, he/she can use the default error template containing standard aliases. These alias values will be replaced with the request specific information before the response is sent to the client. The standard aliases like the error message, service, operation, date/time, IP address, user and consumer application can be used in the template. The custom error response configuration is applicable for the errors thrown by API Gateway also.\n\n\n5.Custom assertions: \n\nCustom assertions allow the API providers to extend and provide additional security policies that are not available by default in API Gateway. Kindly refer to Policy swagger documentation for information about these configurations. \n\n\n6.SAML Issuer: \n\nIf a native API is enforced with the SAML policy, API Gateway uses this configuration to communicate to STS (Security Token Service) to retrieve the SAMl token. This is internally stored as an alias, kindly refer Alias Swagger documentation for information about these configurations.\n\n\n7.JWT/OAuth/OpenID: \n\nAPI Gateway allows Administrator to configure authorization servers for JWT/OAuth/OpenID. The authorization server can be local or 3rd party authorization server. Please refer to Alias Swagger documentation for information about configuring the local and external authorization servers.\n\n\n8.Clustering : \n\nClustering is an advanced feature that substantially extends the reliability, availability, and scalability of APIGateway. Clustering accomplishes this by providing the infrastructure and tools to use multiple APIGateway as if they were a single virtual server and to deliver applications that leverage that architecture.\n\n\n9. Approval \n\nAPI Gateway allows you to configure approvals for: \n\t- Create application: To enforce approvals for creating an application in API Gateway.\n\t- Register application: To enforce approvals for associating an application with APIs.\n\t- Update application: To enforce approvals for modifying an application.\n\t- Subscribe package: To enforce approvals in API Gateway to enable API Portal consumers for subscribing a package to a plan in API Portal.\n\nIn API Gateway, you can create an application and associate (register) the application created with APIs. If you have the API Gateway's manage general administration configurations functional privilege assigned, you can configure approvals for creating or registering an application. If you have configured approvers, and if a user wants to create and register an application in API Gateway, then the application is created and registered with an API only if any one approver from the approvers group approves the create application and the register application requests. Similarly, you can configure approvals for updating an application or subscribing a package.\n\n10. Load Balancer \n\nIf you cluster API Gateway instances, you must configure API Gateway with the load balancer URL. This is the URL to which the consumer applications sends the requests to. Also this URL will be used to generate the API endpoint during activation.\n\n11. API Portal Configuration Management \n\n This API is used for managing API Portal configurations in API Gateway.\n\nThe API Provider can define APIs in API Gateway, secure and monitor them and then may choose to publish these APIs to the API Portal. API Portal enables an organization to securely expose APIs to external developers, partners, and other consumers for use in building their own applications.\n\nAny user with 'Manage Destinations' functional privilege can configure API Portal connection in API Gateway. APIs/Packages can be published from API Gateway to API Portal if and only if the API Portal configuration changes are done successfully.\n\n12. URL Alias Management\n\nAPI Gateway provides support for managing URL Aliases. A URL Alias is used to substitute a specific path of a HTTP/HTTPS endpoint of an API in API Gateway. URL Aliases allow for a level of indirection and helps to mask or shorten the API endpoint so that the actual endpoint can be subject to changes without having to affect the end consumers of the API. You need to have the Manage general administration configurations functional privilege inorder to manage URL Aliases in API Gateway.\n\n13. Outbound Proxy Management\n\nDefine proxy server aliases in API Gateway to route outbound requests from API Gateway through proxy servers. This is useful if the API Gateway is behind a firewall and outbound requests are sent to remote servers located outside the firewall. Outbound proxies are supported for the following types of protocols: HTTP, HTTPS, FTP and SOCKS. You need to have the Manage general administration configurations functional privilege inorder to manage outbound proxies in API Gateway.\n\n14. Kerberos Settings\n\nAPI Gateway provides support for Kerberos authentication for inbound and outbound service requests. Kerberos is an authentication protocol that uses symmetric encryption and a trusted third party system to validate the identity of clients. You need to have the Manage security configurations functional privilege inorder to configure Kerberos settings in API Gateway.\n\n15. Keystore Management\n\nAPI Gateway uses keystores to store SSL certificates and private keys. A keystore file contains one or more pairs of a private key and signed certificate for its corresponding public key. The keystore should be strongly protected with a password. You need to have the Manage security configurations functional privilege inorder to manage keystores in API Gateway.\n\n16. Truststore Management\n\nAPI Gateway uses truststores to manage the public keys for the signing Certificate Authoritites (CAs) for clients and partners. These are identified using aliases during any form of SSL authentication performed by API Gateway. You need to have the Manage security configurations functional privilege inorder to manage truststores in API Gateway.\n\n17. Configure Whitelisted IPs\n\nServer side request forgery is a vulnerability which allows an attacker to force a vulnerable application to issue malicious requests to third-party servers and or internal resources.The remote API importing functionallity allows specifying an URL which contains the API specification, this URL is not properly sanitized and allows to issue arbitrary requests to any service, including ones inside the internal network or on the local host. An attacker can exploit this issue to attack other internal and external services.\n\nTo solve this SSRF issue, API Gateway implemented a filter for URL which would disallow users to use IPs or hosts that resolve to internal network IP ranges and this filter included the following IP ranges: \n127.0.0.1 \n10.0.0.0/8 \n172.16.0.0/12 \n192.168.0.0/16\n\nTo provide a way to customers to allow API creation from internal IP addresses/hostnames, this rest resource introduces a configuration with whitelisting of IP addresses we have to pull resources from.\n\n18.Master Password Management\n\nAPI Gateway handles many secure strings as part of its normal operations. It protects these secure keys by encrypting them using Password-Based Encryption (PBE) technology, also known as PKCS5. This encryption method requires the use of an encryption key or master password that you specify.API Gateway provides a default master password and this can be changed at any point of time.\n\nFor greater security there is an expiration interval associated with the master password which is the duration after which the master password would expire. Customers can change this master password periodically. In case if the master password is lost, the same can be reset to the default value and it can be changed later to a secure value.\n\n19.Log Aggregation: \n\nAPI Gateway collects and stores logs from different sources such as API Gateway server logs, API Gateway UI logs, Internal Data Store logs, dashboard logs and platform logs. Each type of logged data comes from different components. API Gateway provides an easy way of configuring log settings to collate the logs from different sources at a single place in a common format. You also have an option to download these logs as an archive. This provides an easy access to logs collected from different sources when you have to look into the logs to troubleshoot any issues, such as error or performance problems.\n\n\n20.Service Registry: \n\nA service registry is essentially a catalog of services. API Gateway allows Administrators to configure service registries. API Gateway supports ServiceConsul and Eureka service registries. Both client side discovery and server side discovery of Service Registry are supported by API Gateway. You can refer to Alias Swagger documentation for information about configuring Service Registries. Also refer to API Gateway Service Management Swagger documentation for information about how to register/deregister API Gateway APIs to/from Service Registries.\n\n\n21.JMS Configuration Management\r\n\r\nAPI Gateway provides support for JMS and message protocols like AMQP, any REST or SOAP API can be exposed over JMS/AMQP and vice-versa. \r\nBy exposing an API over JMS we can achieve Interoperability in asychronous way across the Java platforms. By exposing an API over AMQP we can achieve Interoperability in asychronous way across multiple languages and platforms.\r\nAPI Gateway uses JMS configurations like JNDI, JMS Connection, Web service Provider/Consumer aliases, JMS Trigger to expose the APIs over JMS/AMQP.\r\n\r\nTo Expose the APIs over JMS/AMQP, \r\n a) First, we need to create the JNDI \r\n b) Create a JMS connection using the above created JNDI\r\n\t -We can use this JMS connection alias to expose our REST APIs over JMS/AMQP and vice-versa\r\n In case of SOAP \t\t\r\n c) Create Web service Provider endpoint to expose our SOAP APIs over JMS/AMQP\r\n d) Create Web service Consumer endpoint to expose our existing Message queue/topic over SOAP\t \r\n\t \r\nYou need to have the Manage General Administration functional privilege inorder to configure JMS in API Gateway.", + "version" : "10.3", + "title" : "API Gateway Administration Service" + }, + "host" : "localhost:5555", + "basePath" : "/rest/apigateway", + "schemes" : [ "http" ], + "consumes" : [ "application/json" ], + "produces" : [ "application/json" ], + "paths" : { + "/licenseNotifications" : { + "get" : { + "description" : "The GET method returns the latest notification issued for a transaction based license.", + "operationId" : "getCurrentMonthLatestNotification", + "consumes" : [ "application/json" ], + "produces" : [ "application/json" ], + "parameters" : [ ], + "responses" : { + "200" : { + "description" : "This response indicates that the recent transaction based license alert notification has been returned successfully. The response body is the latest transaction based license alert notification.", + "examples" : { + "application/json" : "{\r\n \"notification\": {\r\n \"user\": \"admin\",\r\n \"notificationType\": \"UI-notification\",\r\n \"currentUsagePercent\": \"265\",\r\n \"currentUsage\": \"53/20\",\r\n \"creationDate\": \"1502098979628\",\r\n \"notification\": \"Current month allocated quota has been reached\",\r\n \"notifyAt\": 100,\r\n \"monthAndYear\": \"8/2017\"\r\n },\r\n \"result\": \"success\"\r\n}" + } + }, + "401" : { + "description" : "This response indicates that invalid credentials have been provided for the request." + }, + "500" : { + "description" : "This response indicates that the server has encountered an error while fetching the latest transaction based license alert notification" + } + }, + "security" : [ { + "Basic" : [ ] + } ] + } + }, + "/urlaliases" : { + "get" : { + "description" : "Retrieves all URL Aliases or a URL Alias with a particular ID in API Gateway (if the query parameter alias is provided).", + "operationId" : "getURLALias", + "produces" : [ "application/json" ], + "parameters" : [ { + "name" : "alias", + "in" : "query", + "description" : "The name of the URL alias to be retrieved. If this query parameter is provided, then it retrieves the URL Aliases identified by the given alias.", + "required" : false, + "type" : "string", + "x-example" : "SampleAlias" + } ], + "responses" : { + "200" : { + "description" : "This status code indicates that the fetching of the requested URL alias(es) from API Gateway have been successful.", + "schema" : { + "$ref" : "#/definitions/URLAliasesGetResponse" + } + }, + "400" : { + "description" : "This status code indicates invalid request or bad input." + }, + "401" : { + "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." + }, + "404" : { + "description" : "This status code indicates that the requested resource is not found." + }, + "405" : { + "description" : "This status code indicates that the requested HTTP method is not supported for the resource." + }, + "500" : { + "description" : "This status code indicates an error occurred while retrieving the URL Alias from API Gateway." + } + }, + "security" : [ { + "Basic" : [ ] + } ] + }, + "post" : { + "description" : "Creates a new URL Alias in API Gateway.", + "operationId" : "createURLALias", + "consumes" : [ "application/json" ], + "produces" : [ "application/json" ], + "parameters" : [ { + "in" : "body", + "name" : "body", + "description" : "The request body for creating a new URL Alias in API Gateway.", + "required" : true, + "schema" : { + "$ref" : "#/definitions/URLAliasSettings" + } + } ], + "responses" : { + "200" : { + "description" : "This status code indicates that the URL alias has been successfully created in API Gateway.", + "schema" : { + "$ref" : "#/definitions/URLAliasSettings" + } + }, + "400" : { + "description" : "This status code indicates invalid request or bad input." + }, + "401" : { + "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." + }, + "404" : { + "description" : "This status code indicates that the requested resource is not found." + }, + "405" : { + "description" : "This status code indicates that the requested HTTP method is not supported for the resource." + }, + "500" : { + "description" : "This status code indicates an error occurred while persisting the URL Alias in the API Gateway." + } + }, + "security" : [ { + "Basic" : [ ] + } ] + }, + "put" : { + "description" : "Updates an existing URL Alias in API Gateway.", + "operationId" : "updateURLALias", + "consumes" : [ "application/json" ], + "produces" : [ "application/json" ], + "parameters" : [ { + "in" : "body", + "name" : "body", + "description" : "The request body for updating an existing URL Alias in API Gateway.", + "required" : true, + "schema" : { + "$ref" : "#/definitions/URLAliasSettings" + } + } ], + "responses" : { + "200" : { + "description" : "This status code indicates that the URL alias has been successfully updated in API Gateway.", + "schema" : { + "$ref" : "#/definitions/URLAliasSettings" + } + }, + "400" : { + "description" : "This status code indicates invalid request or bad input." + }, + "401" : { + "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." + }, + "404" : { + "description" : "This status code indicates that the requested resource is not found." + }, + "405" : { + "description" : "This status code indicates that the requested HTTP method is not supported for the resource." + }, + "500" : { + "description" : "This status code indicates an error occurred while persisting the URL Alias in the API Gateway." + } + }, + "security" : [ { + "Basic" : [ ] + } ] + }, + "delete" : { + "description" : "The method deletes an URL alias in API Gateway.", + "operationId" : "deleteURLAlias", + "parameters" : [ { + "name" : "alias", + "in" : "query", + "description" : "The name of the URL alias to be deleted.", + "required" : true, + "type" : "string", + "x-example" : "SampleAlias" + } ], + "responses" : { + "200" : { + "description" : "This status code indicates that the URL alias has been successfully deleted in API Gateway." + }, + "400" : { + "description" : "This status code indicates invalid request or bad input." + }, + "401" : { + "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." + }, + "404" : { + "description" : "This status code indicates that the requested resource is not found." + }, + "405" : { + "description" : "This status code indicates that the requested HTTP method is not supported for the resource." + }, + "500" : { + "description" : "This status code indicates an error occurred while persisting the URL Alias in the API Gateway." + } + }, + "security" : [ { + "Basic" : [ ] + } ] + } + }, + "/is/keystore" : { + "get" : { + "description" : "The method gets all keystores available in API Gateway.", + "operationId" : "getKeystores", + "produces" : [ "application/json" ], + "parameters" : [ ], + "responses" : { + "200" : { + "description" : "This status code indicates that all keystores have been successfully fetched from API Gateway.", + "schema" : { + "type" : "array", + "items" : { + "$ref" : "#/definitions/KeyStore" + } + }, + "examples" : { + "application/json" : "{\r\n\t\"keystores\": [{\r\n\t\t\"keyStoreName\": \"DEFAULT_IS_KEYSTORE\",\r\n\t\t\"keyStoreDescription\": \"Default keystore alias for Integration Server.\",\r\n\t\t\"keyStoreType\": \"JKS\",\r\n\t\t\"keyStoreProvider\": \"SUN\",\r\n\t\t\"keyStorePassword\": \"wm.security.keystore.DEFAULT_IS_KEYSTORE\",\r\n\t\t\"pkAliasesList\": \"ssos\",\r\n\t\t\"pkPasswordsList\": \"wm.security.keystore.DEFAULT_IS_KEYSTORE.ssos\",\r\n\t\t\"nullPKpasswds\": \"false\",\r\n\t\t\"bitarray\": \"1\",\r\n\t\t\"isWarning\": false,\r\n\t\t\"isLoaded\": true,\r\n\t\t\"message\": null,\r\n\t\t\"fileContent\": \"/u3+7QAAAAIAAAABAAAAAQAEc3NvcwAAAU3jFrE/AAAFAzCCBP8wDgYKKwYBBAEqAhEBAQUABIIE6/2CimpqOXAELQb47VWbZx5vQionU7882vDKQywXT2726dYXQK/YBtK3ufezdzTg82EEWyqw75YuqMcaa5zS8FiGEovvf2DsdCcHWkAso24Ya1l56j+FgF5TsaOrFcKu3HjuyzhqgDiD/U7NfIcFud4kaBxNI23/ouvB7O7+JOww8xzE2pyxtvGyyvzqMDHFE8+h0X+dSgVVCioL794mP7gj2ujg2EKS9lI1KhFjrZfOn6kLnDAsd1QUfAdJxrooLXPP97auAApX2C5aD+lIdS+yPs0eC7h0R3QBYBiPuCEBPmna0C2iZtukqmCNH/W0VPbdIswz0KcCATFH8LuC3Mg3IbTqdXFj4bzUPACqutmyObyGwFKEzNdicTV2f6UJDBfUnl7ip1f4vb/a18PM+FuKsHigW6+PHWAo4hc85ntFjXoQBKgSpeneuiRIQbvmcWlp68FVuebJjMsmYKsvhIfCTUWYmf3iS6sQUILD3IKvbZJqFIZ8iwdiHljW7wN8Cbu1Wrv8vj1pV38I8C1bmsUv7mCwEmOtAcCfBoduxG+iy/LsgQW4vCj3gCm98Fv/AKD7pe+IhVkVEY8m37W6wNgdDgDKHg9txgrckBY1gOEm4Z1bhlBFFLkfJBUN1hdQu425HK9EgOO0EsjDTi1jqUPuCIZ+1XqlN7W/5pmD9NH7Oo2pji9rFoPMBibs6h5dWGkjxGft3aGBkCuhPOSHbgJbSM/yNowVMlj9PNutJvNiqkVBT9aw1f8ANN7r1+X4JusVZAshesN6R6K3v/UlgOxIB9C41M4P57LCq\",\r\n\t\t\"uploadFileName\": \"keystore.jks\"\r\n\t},\r\n\t{\r\n\t\t\"keyStoreName\": \"SampleCustomKeystore\",\r\n\t\t\"keyStoreDescription\": \"Sample description for the keystore.\",\r\n\t\t\"keyStoreType\": \"JKS\",\r\n\t\t\"keyStoreProvider\": \"SUN\",\r\n\t\t\"keyStorePassword\": \"wm.security.keystore.SampleCustomKeystore\",\r\n\t\t\"pkAliasesList\": \"alias1.example.com,alias2.example.com,alias3.example.com\",\r\n\t\t\"pkPasswordsList\": \"wm.security.keystore.SampleCustomKeystore.alias1.example.com, ,wm.security.keystore.SampleCustomKeystore.alias3.example.com\",\r\n\t\t\"nullPKpasswds\": \"false,true,false\",\r\n\t\t\"bitarray\": \"1,1,1\",\r\n\t\t\"isWarning\": true,\r\n\t\t\"isLoaded\": true,\r\n\t\t\"message\": \"Keystore alias 'SampleCustomKeystore' saved successfully.\",\r\n\t\t\"fileContent\": \"/u3+7QAAAAIAAAAJAAAAAgAKZGFlaW5tcmgzMQAAAV2xXQI0AAVYLjUwOQAAA6kwggOlMIICjaADAgECAgRtzQjDMA0GCSqGSIb3DQEBBAUAMIGCMQswCQYDVQQGEwJERTEQMA4GA1UECBMHR2VybWFueTESMBAGA1UEBxMJRGFybXN0YWR0MRQwEgYDVQQKEwtTb2Z0d2FyZSBBRzEXMBUGA1UECxMOU29mdHdhcmUgQUcgQ0ExHjAcBgNVBAMTFWRhZWlubXJoMzEuZXVyLmFkLnNhZzAeFw0xNzA3MjzdGFkdDEUMBIGA1UEChMLU29mdHdhcmUgQUcxFzAVBgNVBAsTDlNvZnR3YXJlIEFHIENBMRwwGgYDVQQDExNtY2RzYW4wMi5ldXIuYWQuc2FnMB4XDTE3MDcwNDExNDkwOFoXDTI3MDcwMjExNDkwOFowgYAxCzAJBgNVBAYTAkRFMRAwDgYDVQQIEwdHZXJtYW55MRIwEAYDVQQHEwlEYXJtc3RhZHQxFDASBgNVBAoTC1NvZnR3YXJlIEFHMRcwFQYDVQQLEw5Tb2Z0d2FyZSBBRyBDVR0OBBYEFBTbx0ge90nA8/f5nj0Q3vvDHKfQMA0GCSqGSIb3DQEBBAUAA4IBAQCSmYycBUW30RT6v5dUL7OuWF1uOnTqycEJTXTs0NXsW/bpuwI2sUX/rZrivvOlWejy4hIwtjWfVIAhhE1TOeSV6CNr9MnvMgs0u9jUJ8un8dKPujmBfxPI07kzgshkMzHk0L/hacprYHkYKASOG0pjvPNXMaMULIuOJ/bo4sAUSqg6gnIhR/0K/9HK5Q6wsYKEmCefT4AbCaqo6ns74f0r7n459hh4Ur0hmWy3aEdUZ6NXJU6RngoXo2JFdjV711nmK3+vjzQfmCc+SCIe3M9gynWDt1kTamUweQH+OVBTPlEhBzUh+b0qQznvSvxRQYJd/veFAg4xbU4iTXV5O5Zi0aX/9Us0at03ku9iQ7iWupy88+w=\",\r\n\t\t\"uploadFileName\": \"keystore_file.jks\"\r\n\t}]\r\n}" + } + }, + "400" : { + "description" : "This status code indicates invalid request or bad input." + }, + "401" : { + "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." + }, + "404" : { + "description" : "This status code indicates that the requested resource is not found." + }, + "405" : { + "description" : "This status code indicates that the requested HTTP method is not supported for the resource." + }, + "500" : { + "description" : "This status code indicates an error occurred while retrieving the available keystores from API Gateway." + } + }, + "security" : [ { + "Basic" : [ ] + } ] + }, + "post" : { + "description" : "Creates a keystore in API Gateway.", + "operationId" : "createKeystore", + "consumes" : [ "multipart/form-data" ], + "produces" : [ "application/json" ], + "parameters" : [ { + "name" : "keyStoreName", + "in" : "formData", + "description" : "The name of the keystore. It cannot contain spaces or special characters. The name of the key store must be unique across all the keystores created in API Gateway.", + "required" : true, + "type" : "string", + "x-example" : "SampleCustomKeystore" + }, { + "name" : "keyStoreDescription", + "in" : "formData", + "description" : "The description for the keystore.", + "required" : false, + "type" : "string", + "x-example" : "Sample description for the keystore." + }, { + "name" : "keyStoreType", + "in" : "formData", + "description" : "The certificate file format of the keystore.", + "required" : true, + "type" : "string", + "default" : "JKS", + "x-example" : "JKS", + "enum" : [ "JKS", "PKCS12" ] + }, { + "name" : "keyStoreProvider", + "in" : "formData", + "description" : "The provider that is used for the keystore type. The default is SUN for JKS type and SunJSSE for PKCS12 type.", + "required" : true, + "type" : "string", + "default" : "SUN", + "x-example" : "SUN", + "enum" : [ "SUN", "SunJSSE" ] + }, { + "name" : "keyStorePassword", + "in" : "formData", + "description" : "The keystore password that is defined at the time of keystore creation using a keystore utility.", + "required" : true, + "type" : "string", + "x-example" : "keystore_password" + }, { + "name" : "uploadFileName", + "in" : "formData", + "description" : "The name of the keystore file that will be used to save the keystore internally in API Gateway.", + "required" : true, + "type" : "string", + "x-example" : "keystore_file.jks" + }, { + "name" : "fileContent", + "in" : "formData", + "description" : "The contents of the truststore file.", + "required" : true, + "type" : "file" + }, { + "name" : "pkAliasesList", + "in" : "formData", + "description" : "Comma separated list of alias names in the uploaded keystore file.", + "required" : false, + "type" : "string", + "x-example" : "alias1.example.com,alias2.example.com,alias3.example.com" + }, { + "name" : "pkPasswordsList", + "in" : "formData", + "description" : "Comma separated list of passwords in the same order as the aliases specified in pkAliasesList. If a particular key alias does not have a password, it is denoted by space.", + "required" : false, + "type" : "string", + "x-example" : "alias1_password, ,alias3_password" + }, { + "name" : "nullPKpasswds", + "in" : "formData", + "description" : "Comma separated list of boolean values (true/false) indicating whether the particular alias has a password or not in the same order as the aliases specified in pkAliasesList. For each key alias, true indicates that the key alias does not have a password and false indicates that it does have a password.", + "required" : false, + "type" : "string", + "x-example" : "false,true,false" + } ], + "responses" : { + "200" : { + "description" : "This status code indicates that the keystore has been successfully persisted in API Gateway.", + "schema" : { + "$ref" : "#/definitions/KeyStore" + }, + "examples" : { + "application/json" : "{\r\n\t\"keyStoreName\": \"SampleCustomKeystore\",\r\n\t\"keyStoreDescription\": \"Sample description for the keystore.\",\r\n\t\"keyStoreType\": \"JKS\",\r\n\t\"keyStoreProvider\": \"SUN\",\r\n\t\"keyStorePassword\": \"wm.security.keystore.SampleCustomKeystore\",\r\n\t\"pkAliasesList\": \"alias1.example.com,alias2.example.com,alias3.example.com\",\r\n\t\"pkPasswordsList\": \" , , \",\r\n\t\"nullPKpasswds\": \"false,false,false\",\r\n\t\"bitarray\": \"0,0,0\",\r\n\t\"isWarning\": true,\r\n\t\"isLoaded\": true,\r\n\t\"message\": \"Keystore alias 'SampleCustomKeystore' saved successfully. Warning: before using the keystore, you must create a password for at least one of its key aliases. Please edit the keystore alias configuration and add one or more valid key alias passwords.\",\r\n\t\"fileContent\": \"/u3+7QAAAAIAAAAJAAAAAgAKZGFlaW5tcmgzMQAAAV2xXQI0AAVYLjUwOQAAA6kwggOlMIICjaADAgECAgRtzQjDMA0GCSqGSIb3DQEBBAUAMIGCMQswCQYDVQQGEwJERTEQMA4GA1UECBMHR2VybWFueTESMBAGA1UEBxMJRGFybXN0YWR0MRQwEgYDVQQKEwtTb2Z0d2FyZSBBRzEXMBUGA1UECxMOU29mdHdhcmUgQUcgQ0ExHjAcBgNVBAMTFWRhZWlubXJoMzEuZXVyLmFkLnNhZzAeFw0xNzA3RFMRAwDgYDVQQIEwdHZXJtYW55MRIwEAYDVQQHEwlEYXJtc3RhZHQxFDASBgNVBAoTC1NvZnR3YXJlIEFHMRcwFQYDVQQLEw5Tb2Z0d2FyZSBBRyBDQTEcMBoGA1UEAxMTbWNkc2FuMDIuZXVyLmFkLnNhZzCCAS6RngoXo2JFdjV711nmK3+vjzQfmCc+SCIe3M9gynWDt1kTamUweQH+OVBTPlEhBzUh+b0qQznvSvxRQYJd/veFAg4xbU4iTXV5O5Zi0aX/9Us0at03ku9iQ7iWupy88+w=\",\r\n\t\"uploadFileName\": \"keystore_file.jks\"\r\n}" + } + }, + "400" : { + "description" : "This status code indicates invalid request or bad input." + }, + "401" : { + "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." + }, + "404" : { + "description" : "This status code indicates that the requested resource is not found." + }, + "405" : { + "description" : "This status code indicates that the requested HTTP method is not supported for the resource." + }, + "500" : { + "description" : "This status code indicates an error occurred while persisting the keystore in API Gateway." + } + }, + "security" : [ { + "Basic" : [ ] + } ] + } + }, + "/is/keystore/{keyStoreName}" : { + "get" : { + "description" : "The method gets keystore matching the name in API Gateway.", + "operationId" : "getKeystore", + "produces" : [ "application/json" ], + "parameters" : [ { + "name" : "keyStoreName", + "in" : "path", + "description" : "Keystore name to identify the corresponding Keystore", + "required" : true, + "type" : "string", + "x-example" : "DEFAULT_IS_KEYSTORE" + } ], + "responses" : { + "200" : { + "description" : "This status code indicates that the requested keystore has been successfully fetched from API Gateway.", + "schema" : { + "type" : "array", + "items" : { + "$ref" : "#/definitions/KeyStore" + } + }, + "examples" : { + "application/json" : "{\r\n\t\"keystores\": [{\r\n\t\t\"keyStoreName\": \"SampleCustomKeystore\",\r\n\t\t\"keyStoreDescription\": \"Sample description for the keystore.\",\r\n\t\t\"keyStoreType\": \"JKS\",\r\n\t\t\"keyStoreProvider\": \"SUN\",\r\n\t\t\"keyStorePassword\": \"wm.security.keystore.SampleCustomKeystore\",\r\n\t\t\"pkAliasesList\": \"alias1.example.com,alias2.example.com,alias3.example.com\",\r\n\t\t\"pkPasswordsList\": \"wm.security.keystore.SampleCustomKeystore.alias1.example.com, ,wm.security.keystore.SampleCustomKeystore.alias3.example.com\",\r\n\t\t\"nullPKpasswds\": \"false,true,false\",\r\n\t\t\"bitarray\": \"1,1,1\",\r\n\t\t\"isWarning\": true,\r\n\t\t\"isLoaded\": true,\r\n\t\t\"message\": \"Keystore alias 'SampleCustomKeystore' saved successfully.\",\r\n\t\t\"fileContent\": \"/u3+7QAAAAIAAAAJAAAAAgAKZGFlaW5tcmgzMQAAAV2xXQI0AAVYLjUwOQAAA6kwggOlMIICjaADAgECAgRtzQjDMA0GCSqGSIb3DQEBBAUAMIGCMQswCQYDVQQGEwJERTEQMA4GA1UECBMHR2VybWFueTESMBAGA1UEBxMJRGFybXN0YWR0MRQwEgYDVQQKEwtTb2Z0d2FyZSBBRzEXMBUGA1UECxMOU29mdHdhcmUgQUcgQ0ExHjAcBgNVBAMTFWRhZWlubXJoMzEuZXVyLmFkLnNhZzAeFw0xNzA3MjzdGFkdDEUMBIGA1UEChMLU29mdHdhcmUgQUcxFzAVBgNVBAsTDlNvZnR3YXJlIEFHIENBMRwwGgYDVQQDExNtY2RzYW4wMi5ldXIuYWQuc2FnMB4XDTE3MDcwNDExNDkwOFoXDTI3MDcwMjExNDkwOFowgYAxCzAJBgNVBAYTAkRFMRAwDgYDVQQIEwdHZXJtYW55MRIwEAYDVQQHEwlEYXJtc3RhZHQxFDASBgNVBAoTC1NvZnR3YXJlIEFHMRcwFQYDVQQLEw5Tb2Z0d2FyZSBBRyBDVR0OBBYEFBTbx0ge90nA8/f5nj0Q3vvDHKfQMA0GCSqGSIb3DQEBBAUAA4IBAQCSmYycBUW30RT6v5dUL7OuWF1uOnTqycEJTXTs0NXsW/bpuwI2sUX/rZrivvOlWejy4hIwtjWfVIAhhE1TOeSV6CNr9MnvMgs0u9jUJ8un8dKPujmBfxPI07kzgshkMzHk0L/hacprYHkYKASOG0pjvPNXMaMULIuOJ/bo4sAUSqg6gnIhR/0K/9HK5Q6wsYKEmCefT4AbCaqo6ns74f0r7n459hh4Ur0hmWy3aEdUZ6NXJU6RngoXo2JFdjV711nmK3+vjzQfmCc+SCIe3M9gynWDt1kTamUweQH+OVBTPlEhBzUh+b0qQznvSvxRQYJd/veFAg4xbU4iTXV5O5Zi0aX/9Us0at03ku9iQ7iWupy88+w=\",\r\n\t\t\"uploadFileName\": \"keystore_file.jks\"\r\n\t}]\r\n}" + } + }, + "400" : { + "description" : "This status code indicates invalid request or bad input." + }, + "401" : { + "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." + }, + "404" : { + "description" : "This status code indicates that the requested resource is not found." + }, + "405" : { + "description" : "This status code indicates that the requested HTTP method is not supported for the resource." + }, + "500" : { + "description" : "This status code indicates an error occurred while retrieving the specified keystore from API Gateway." + } + }, + "security" : [ { + "Basic" : [ ] + } ] + }, + "post" : { + "description" : "Updates an already existing keystore in API Gateway.", + "operationId" : "UpdateKeystoreAliases", + "consumes" : [ "multipart/form-data" ], + "produces" : [ "application/json" ], + "parameters" : [ { + "name" : "keyStoreName", + "in" : "path", + "description" : "The name of the keystore. It cannot contain spaces or special characters. The name of the key store must be unique across all the keystores created in API Gateway.", + "required" : true, + "type" : "string", + "x-example" : "SampleCustomKeystore" + }, { + "name" : "keyStoreDescription", + "in" : "formData", + "description" : "The description for the keystore.", + "required" : false, + "type" : "string", + "x-example" : "Sample description for the keystore." + }, { + "name" : "keyStoreType", + "in" : "formData", + "description" : "The certificate file format of the keystore.", + "required" : true, + "type" : "string", + "default" : "JKS", + "x-example" : "JKS", + "enum" : [ "JKS", "PKCS12" ] + }, { + "name" : "keyStoreProvider", + "in" : "formData", + "description" : "The provider that is used for the keystore type. The default is SUN for JKS type and SunJSSE for PKCS12 type.", + "required" : true, + "type" : "string", + "default" : "SUN", + "x-example" : "SUN", + "enum" : [ "SUN", "SunJSSE" ] + }, { + "name" : "keyStorePassword", + "in" : "formData", + "description" : "The keystore password that is defined at the time of keystore creation using a keystore utility.", + "required" : true, + "type" : "string", + "x-example" : "keystore_password" + }, { + "name" : "uploadFileName", + "in" : "formData", + "description" : "The name of the keystore file that will be used to save the keystore internally in API Gateway.", + "required" : true, + "type" : "string", + "x-example" : "keystore_file.jks" + }, { + "name" : "fileContent", + "in" : "formData", + "description" : "The contents of the keystore file.", + "required" : true, + "type" : "file" + }, { + "name" : "pkAliasesList", + "in" : "formData", + "description" : "Comma separated list of alias names in the uploaded keystore file.", + "required" : false, + "type" : "string", + "x-example" : "alias1.example.com,alias2.example.com,alias3.example.com" + }, { + "name" : "pkPasswordsList", + "in" : "formData", + "description" : "Comma separated list of passwords in the same order as the aliases specified in pkAliasesList. If a particular key alias does not have a password, it is denoted by space.", + "required" : false, + "type" : "string", + "x-example" : "alias1_password, ,alias3_password" + }, { + "name" : "nullPKpasswds", + "in" : "formData", + "description" : "Comma separated list of boolean values (true/false) indicating whether the particular alias has a password or not in the same order as the aliases specified in pkAliasesList. For each key alias, true indicates that the key alias does not have a password and false indicates that it does have a password.", + "required" : false, + "type" : "string", + "x-example" : "false,true,false" + } ], + "responses" : { + "200" : { + "description" : "This status code indicates that the keystore has been successfully persisted in API Gateway.", + "schema" : { + "$ref" : "#/definitions/KeyStore" + }, + "examples" : { + "application/json" : "{\r\n\t\"keyStoreName\": \"SampleCustomKeystore\",\r\n\t\"keyStoreDescription\": \"Sample description for the keystore.\",\r\n\t\"keyStoreType\": \"JKS\",\r\n\t\"keyStoreProvider\": \"SUN\",\r\n\t\"keyStorePassword\": \"wm.security.keystore.SampleCustomKeystore\",\r\n\t\"pkAliasesList\": \"alias1.example.com,alias2.example.com,alias3.example.com\",\r\n\t\"pkPasswordsList\": \"wm.security.keystore.SampleCustomKeystore.alias1.example.com, ,wm.security.keystore.SampleCustomKeystore.alias3.example.com\",\r\n\t\"nullPKpasswds\": \"false,true,false\",\r\n\t\"bitarray\": \"1,1,1\",\r\n\t\"isWarning\": true,\r\n\t\"isLoaded\": true,\r\n\t\"message\": \"Keystore alias 'SampleCustomKeystore' saved successfully.\",\r\n\t\"fileContent\": \"/u3+7QAAAAIAAAAJAAAAAgAKZGFlaW5tcmgzMQAAAV2xXQI0AAVYLjUwOQAAA6kwggOlMIICjaADAgECAgRtzQjDMA0GCSqGSIb3DQEBBAUAMIGCMQswCQYDVQQGEwJERTEQMA4GA1UECBMHR2VybWFueTESMBAGA1UEBxMJRGFybXN0YWR0MRQwEgYDVQQKEwtTb2Z0d2FyZSBBRzEXMBUGA1UECxMOU29mdHdhcmUgQUcgQ0ExHjAcBgNVBAMTFWRhZWlubXJoMzEuZXVyLmFkLnNhZzAeFw0xNzA3MjzdGFkdDEUMBIGA1UEChMLU29mdHdhcmUgQUcxFzAVBgNVBAsTDlNvZnR3YXJlIEFHIENBMRwwGgYDVQQDExNtY2RzYW4wMi5ldXIuYWQuc2FnMB4XDTE3MDcwNDExNDkwOFoXDTI3MDcwMjExNDkwOFowgYAxCzAJBgNVBAYTAkRFMRAwDgYDVQQIEwdHZXJtYW55MRIwEAYDVQQHEwlEYXJtc3RhZHQxFDASBgNVBAoTC1NvZnR3YXJlIEFHMRcwFQYDVQQLEw5Tb2Z0d2FyZSBBRyBDVR0OBBYEFBTbx0ge90nA8/f5nj0Q3vvDHKfQMA0GCSqGSIb3DQEBBAUAA4IBAQCSmYycBUW30RT6v5dUL7OuWF1uOnTqycEJTXTs0NXsW/bpuwI2sUX/rZrivvOlWejy4hIwtjWfVIAhhE1TOeSV6CNr9MnvMgs0u9jUJ8un8dKPujmBfxPI07kzgshkMzHk0L/hacprYHkYKASOG0pjvPNXMaMULIuOJ/bo4sAUSqg6gnIhR/0K/9HK5Q6wsYKEmCefT4AbCaqo6ns74f0r7n459hh4Ur0hmWy3aEdUZ6NXJU6RngoXo2JFdjV711nmK3+vjzQfmCc+SCIe3M9gynWDt1kTamUweQH+OVBTPlEhBzUh+b0qQznvSvxRQYJd/veFAg4xbU4iTXV5O5Zi0aX/9Us0at03ku9iQ7iWupy88+w=\",\r\n\t\"uploadFileName\": \"keystore_file.jks\"\r\n}" + } + }, + "400" : { + "description" : "This status code indicates invalid request or bad input." + }, + "401" : { + "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." + }, + "404" : { + "description" : "This status code indicates that the requested resource is not found." + }, + "405" : { + "description" : "This status code indicates that the requested HTTP method is not supported for the resource." + }, + "500" : { + "description" : "This status code indicates an error occurred while persisting the keystore in API Gateway." + } + }, + "security" : [ { + "Basic" : [ ] + } ] + }, + "delete" : { + "description" : "Deletes keystore matching the specified name in API Gateway.", + "operationId" : "deleteKeystore", + "parameters" : [ { + "name" : "keyStoreName", + "in" : "path", + "description" : "Keystore name to identify the corresponding Keystore", + "required" : true, + "type" : "string", + "x-example" : "DEFAULT_IS_KEYSTORE" + } ], + "responses" : { + "200" : { + "description" : "This status code indicates that the specified keystore has been deleted successfully from API Gateway.", + "schema" : { + "type" : "array", + "items" : { + "$ref" : "#/definitions/KeyStore" + } + } + }, + "400" : { + "description" : "This status code indicates invalid request or bad input." + }, + "401" : { + "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." + }, + "404" : { + "description" : "This status code indicates that the requested resource is not found." + }, + "405" : { + "description" : "This status code indicates that the requested HTTP method is not supported for the resource." + }, + "500" : { + "description" : "This status code indicates an error occurred while deleting the specified keystore from API Gateway." + } + }, + "security" : [ { + "Basic" : [ ] + } ] + } + }, + "/is/truststore" : { + "get" : { + "description" : "Retrieves all available truststores from API Gateway.", + "operationId" : "getTruststores", + "produces" : [ "application/json" ], + "parameters" : [ ], + "responses" : { + "200" : { + "description" : "This status code indicates that all trust stores have been successfully fetched from API Gateway.", + "schema" : { + "type" : "array", + "items" : { + "$ref" : "#/definitions/TrustStore" + } + }, + "examples" : { + "application/json" : "{\r\n\t\"truststores\": [{\r\n\t\t\"id\": \"Truststore2\",\r\n\t\t\"keyStoreName\": \"Truststore2\",\r\n\t\t\"keyStoreDescription\": \"Some sample description for truststore.\",\r\n\t\t\"keyStoreType\": \"JKS\",\r\n\t\t\"keyStoreProvider\": \"SUN\",\r\n\t\t\"keyStorePassword\": \"wm.security.keystore.Truststore2\",\r\n\t\t\"keyStoreLocation\": null,\r\n\t\t\"certficateAliases\": [\"10.21.38.112\", \"10.60.33.18\", \"10.60.37.86\"],\r\n\t\t\"isLoaded\": true,\r\n\t\t\"fileContent\": \"/u3+7QAAAAIAAAAEAAAAAgAIbWNkc2FuMDIAAAFdsV3/PwAFWC41MDkAAAOlMIIDoTCCAomgAwIBAgIEVRJWFTANBgkqhkiG9w0BAQQFADCBgDELMAkGA1UEBhMCREUxEDAOBgNVBAgTB0dlcm1hbnkxEjAQBgNVBAcTCURlRxqzR24p9unbAbjpEAlgBgiJvUAB2KKnpkRJRhS8Ae2cOC7vgMcc6r9S/cfWNnaHYcU6wqWlat+8BWh15ZyETKCnHPwOEsBZ181YLjSznzWE7Sjl887cenULQDK55HMtyF/BEwPqQH6SGGMw4WnhbEPeyNzhMrsOpM/Y6Nbx4AJ0YjbU5jA4Igw4OPRDw4z9kXgWNrjd+nwnuQmMPwaRgwmJXQQ52NC2ccTOeZ1NeXNAsqdGNXnJ6Jzb0Ge1HYRlvQ4SDj40ZRhfLOuCdbk=\",\r\n\t\t\"uploadFileName\": \"truststore2.jks\",\r\n\t\t\"isWarning\": false,\r\n\t\t\"message\": null\r\n\t}]\r\n}" + } + }, + "400" : { + "description" : "This status code indicates invalid request or bad input." + }, + "401" : { + "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." + }, + "404" : { + "description" : "This status code indicates that the requested resource is not found." + }, + "405" : { + "description" : "This status code indicates that the requested HTTP method is not supported for the resource." + }, + "500" : { + "description" : "This status code indicates an error occurred while retrieving the available truststores from API Gateway." + } + }, + "security" : [ { + "Basic" : [ ] + } ] + }, + "post" : { + "description" : "Creates a truststore in API Gateway.", + "operationId" : "createTruststore", + "consumes" : [ "multipart/form-data" ], + "produces" : [ "application/json" ], + "parameters" : [ { + "name" : "keyStoreName", + "in" : "formData", + "description" : "The name of the truststore. It cannot contain spaces or special characters. The name of the trust store must be unique across all the truststores created in API Gateway.", + "required" : true, + "type" : "string", + "x-example" : "TruststoreSampleName" + }, { + "name" : "keyStoreDescription", + "in" : "formData", + "description" : "The description for the truststore.", + "required" : false, + "type" : "string", + "x-example" : "Sample description for the truststore." + }, { + "name" : "keyStoreType", + "in" : "formData", + "description" : "The certificate file format of the truststore.", + "required" : true, + "type" : "string", + "default" : "JKS", + "x-example" : "JKS", + "enum" : [ "JKS" ] + }, { + "name" : "keyStoreProvider", + "in" : "formData", + "description" : "The provider that is used for the truststore type.", + "required" : true, + "type" : "string", + "default" : "SUN", + "x-example" : "SUN", + "enum" : [ "SUN" ] + }, { + "name" : "keyStorePassword", + "in" : "formData", + "description" : "The truststore password that is defined at the time of truststore creation using a keystore utility.", + "required" : true, + "type" : "string", + "x-example" : "truststore_password" + }, { + "name" : "uploadFileName", + "in" : "formData", + "description" : "The name of the truststore file that will be used to save the truststore internally in API Gateway.", + "required" : true, + "type" : "string", + "x-example" : "truststore_file.jks" + }, { + "name" : "fileContent", + "in" : "formData", + "description" : "The contents of the truststore file.", + "required" : true, + "type" : "file" + } ], + "responses" : { + "200" : { + "description" : "This status code indicates that the truststore has been successfully created in API Gateway.", + "schema" : { + "$ref" : "#/definitions/TrustStore" + }, + "examples" : { + "application/json" : "{\r\n\t\"id\": \"Truststore2\",\r\n\t\"keyStoreName\": \"Truststore2\",\r\n\t\"keyStoreDescription\": null,\r\n\t\"keyStoreType\": \"JKS\",\r\n\t\"keyStoreProvider\": \"SUN\",\r\n\t\"keyStorePassword\": \"wm.security.keystore.Truststore2\",\r\n\t\"keyStoreLocation\": null,\r\n\t\"certficateAliases\": [\"10.21.38.112\", \"10.60.33.18\", \"10.60.37.86\"],\r\n\t\"isLoaded\": true,\r\n\t\"fileContent\": \"/u3+7QAAAAIAAAAEAAAAAgAIbWNkc2FuMDIAAAFdsV3/PwAFWC41MDkAAAOlMIIDoTCCAomgAwIBAgIEVRJWFTANBgkqhkiG9w0BAQQFADCBgDELMAkGA1UEBhMCREUxEDAOBgNVBAgTB0dlcm1hbnkxEjAQBgNVBAcTCURlRxqzR24p9unbAbjpEAlgBgiJvUAB2KKnpkRJRhS8Ae2cOC7vgMcc6r9S/cfWNnaHYcU6wqWlat+8BWh15ZyETKCnHPwOEsBZ181YLjSznzWE7Sjl887cenULQDK55HMtyF/BEwPqQH6SGGMw4WnhbEPeyNzhMrsOpM/Y6Nbx4AJ0YjbU5jA4Igw4OPRDw4z9kXgWNrjd+nwnuQmMPwaRgwmJXQQ52NC2ccTOeZ1NeXNAsqdGNXnJ6Jzb0Ge1HYRlvQ4SDj40ZRhfLOuCdbk=\",\r\n\t\"uploadFileName\": \"truststore2.jks\",\r\n\t\"isWarning\": false,\r\n\t\"message\": null\r\n}" + } + }, + "400" : { + "description" : "This status code indicates invalid request or bad input." + }, + "401" : { + "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." + }, + "404" : { + "description" : "This status code indicates that the requested resource is not found." + }, + "405" : { + "description" : "This status code indicates that the requested HTTP method is not supported for the resource." + }, + "500" : { + "description" : "This status code indicates an error occurred while persisting the truststore in API Gateway." + } + }, + "security" : [ { + "Basic" : [ ] + } ] + } + }, + "/is/truststore/{trustStoreName}" : { + "get" : { + "description" : "Retrieves an existing truststore matching the given name from API Gateway.", + "operationId" : "getTruststore", + "produces" : [ "application/json" ], + "parameters" : [ { + "name" : "trustStoreName", + "in" : "path", + "description" : "Truststore name to identify the corresponding trust store in API Gateway", + "required" : true, + "type" : "string", + "x-example" : "DEFAULT_IS_TRUSTSTORE" + } ], + "responses" : { + "200" : { + "description" : "This status code indicates that the truststore has been successfully retrieved from API Gateway.", + "schema" : { + "type" : "array", + "items" : { + "$ref" : "#/definitions/TrustStore" + } + }, + "examples" : { + "application/json" : "{\r\n\t\"truststores\": [{\r\n\t\t\"id\": \"Truststore2\",\r\n\t\t\"keyStoreName\": \"Truststore2\",\r\n\t\t\"keyStoreDescription\": \"Some sample description for truststore.\",\r\n\t\t\"keyStoreType\": \"JKS\",\r\n\t\t\"keyStoreProvider\": \"SUN\",\r\n\t\t\"keyStorePassword\": \"wm.security.keystore.Truststore2\",\r\n\t\t\"keyStoreLocation\": null,\r\n\t\t\"certficateAliases\": [\"10.21.38.112\", \"10.60.33.18\", \"10.60.37.86\"],\r\n\t\t\"isLoaded\": true,\r\n\t\t\"fileContent\": \"/u3+7QAAAAIAAAAEAAAAAgAIbWNkc2FuMDIAAAFdsV3/PwAFWC41MDkAAAOlMIIDoTCCAomgAwIBAgIEVRJWFTANBgkqhkiG9w0BAQQFADCBgDELMAkGA1UEBhMCREUxEDAOBgNVBAgTB0dlcm1hbnkxEjAQBgNVBAcTCURlRxqzR24p9unbAbjpEAlgBgiJvUAB2KKnpkRJRhS8Ae2cOC7vgMcc6r9S/cfWNnaHYcU6wqWlat+8BWh15ZyETKCnHPwOEsBZ181YLjSznzWE7Sjl887cenULQDK55HMtyF/BEwPqQH6SGGMw4WnhbEPeyNzhMrsOpM/Y6Nbx4AJ0YjbU5jA4Igw4OPRDw4z9kXgWNrjd+nwnuQmMPwaRgwmJXQQ52NC2ccTOeZ1NeXNAsqdGNXnJ6Jzb0Ge1HYRlvQ4SDj40ZRhfLOuCdbk=\",\r\n\t\t\"uploadFileName\": \"truststore2.jks\",\r\n\t\t\"isWarning\": false,\r\n\t\t\"message\": null\r\n\t}]\r\n}" + } + }, + "400" : { + "description" : "This status code indicates invalid request or bad input." + }, + "401" : { + "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." + }, + "404" : { + "description" : "This status code indicates that the requested resource is not found." + }, + "405" : { + "description" : "This status code indicates that the requested HTTP method is not supported for the resource." + }, + "500" : { + "description" : "This status code indicates an error occurred while retrieving the truststore from API Gateway." + } + }, + "security" : [ { + "Basic" : [ ] + } ] + }, + "post" : { + "description" : "Updates an already existing truststore in API Gateway.", + "operationId" : "updateTruststore", + "consumes" : [ "multipart/form-data" ], + "produces" : [ "application/json" ], + "parameters" : [ { + "name" : "trustStoreName", + "in" : "path", + "description" : "The name of the truststore. It cannot contain spaces or special characters. The name of the trust store must be unique across all the truststores created in API Gateway.", + "required" : true, + "type" : "string", + "x-example" : "TruststoreSampleName" + }, { + "name" : "keyStoreDescription", + "in" : "formData", + "description" : "The description for the truststore.", + "required" : false, + "type" : "string", + "x-example" : "Sample description for the truststore." + }, { + "name" : "keyStoreType", + "in" : "formData", + "description" : "The certificate file format of the truststore.", + "required" : true, + "type" : "string", + "default" : "JKS", + "x-example" : "JKS", + "enum" : [ "JKS" ] + }, { + "name" : "keyStoreProvider", + "in" : "formData", + "description" : "The provider that is used for the truststore type.", + "required" : true, + "type" : "string", + "default" : "SUN", + "x-example" : "SUN", + "enum" : [ "SUN" ] + }, { + "name" : "keyStorePassword", + "in" : "formData", + "description" : "The truststore password that is defined at the time of truststore creation using a keystore utility.", + "required" : true, + "type" : "string", + "x-example" : "truststore_password" + }, { + "name" : "uploadFileName", + "in" : "formData", + "description" : "The name of the truststore file that will be used to save the truststore internally in API Gateway.", + "required" : true, + "type" : "string", + "x-example" : "truststore_file.jks" + }, { + "name" : "fileContent", + "in" : "formData", + "description" : "The contents of the truststore file.", + "required" : true, + "type" : "file" + } ], + "responses" : { + "200" : { + "description" : "This status code indicates that the truststore has been successfully updated in API Gateway.", + "schema" : { + "$ref" : "#/definitions/TrustStore" + }, + "examples" : { + "application/json" : "{\r\n\t\"id\": \"Truststore2\",\r\n\t\"keyStoreName\": \"Truststore2\",\r\n\t\"keyStoreDescription\": null,\r\n\t\"keyStoreType\": \"JKS\",\r\n\t\"keyStoreProvider\": \"SUN\",\r\n\t\"keyStorePassword\": \"wm.security.keystore.Truststore2\",\r\n\t\"keyStoreLocation\": null,\r\n\t\"certficateAliases\": [\"10.21.38.112\", \"10.60.33.18\", \"10.60.37.86\"],\r\n\t\"isLoaded\": true,\r\n\t\"fileContent\": \"/u3+7QAAAAIAAAAEAAAAAgAIbWNkc2FuMDIAAAFdsV3/PwAFWC41MDkAAAOlMIIDoTCCAomgAwIBAgIEVRJWFTANBgkqhkiG9w0BAQQFADCBgDELMAkGA1UEBhMCREUxEDAOBgNVBAgTB0dlcm1hbnkxEjAQBgNVBAcTCURlRxqzR24p9unbAbjpEAlgBgiJvUAB2KKnpkRJRhS8Ae2cOC7vgMcc6r9S/cfWNnaHYcU6wqWlat+8BWh15ZyETKCnHPwOEsBZ181YLjSznzWE7Sjl887cenULQDK55HMtyF/BEwPqQH6SGGMw4WnhbEPeyNzhMrsOpM/Y6Nbx4AJ0YjbU5jA4Igw4OPRDw4z9kXgWNrjd+nwnuQmMPwaRgwmJXQQ52NC2ccTOeZ1NeXNAsqdGNXnJ6Jzb0Ge1HYRlvQ4SDj40ZRhfLOuCdbk=\",\r\n\t\"uploadFileName\": \"truststore2.jks\",\r\n\t\"isWarning\": false,\r\n\t\"message\": null\r\n}" + } + }, + "400" : { + "description" : "This status code indicates invalid request or bad input." + }, + "401" : { + "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." + }, + "404" : { + "description" : "This status code indicates that the requested resource is not found." + }, + "405" : { + "description" : "This status code indicates that the requested HTTP method is not supported for the resource." + }, + "500" : { + "description" : "This status code indicates an error occurred while persisting the truststore in API Gateway." + } + }, + "security" : [ { + "Basic" : [ ] + } ] + }, + "delete" : { + "description" : "Deletes an already existing truststore matching the name in API Gateway.", + "operationId" : "deleteTruststore", + "parameters" : [ { + "name" : "trustStoreName", + "in" : "path", + "description" : "Truststore name to identify the corresponding trust store to delete in API Gateway", + "required" : true, + "type" : "string", + "x-example" : "DEFAULT_IS_TRUSTSTORE" + } ], + "responses" : { + "200" : { + "description" : "This status code indicates that the trust store has been successfully deleted from API Gateway." + }, + "400" : { + "description" : "This status code indicates invalid request or bad input." + }, + "401" : { + "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." + }, + "404" : { + "description" : "This status code indicates that the requested resource is not found." + }, + "405" : { + "description" : "This status code indicates that the requested HTTP method is not supported for the resource." + }, + "500" : { + "description" : "This status code indicates an error occurred while retrieving the truststore from API Gateway." + } + }, + "security" : [ { + "Basic" : [ ] + } ] + } + }, + "/is/license" : { + "get" : { + "description" : "Retrieves the license details from API Gateway.", + "operationId" : "getLicenseDetails", + "produces" : [ "application/json" ], + "parameters" : [ ], + "responses" : { + "200" : { + "description" : "This status code indicates that the license has been successfully retrieved from API Gateway.", + "schema" : { + "$ref" : "#/definitions/LicenseDetail" + }, + "examples" : { + "application/json" : "{ \r\n\t\"LicenseInfo\": { \r\n\t\t\"Clustering\": \"true\", \r\n\t\t\"Publish / Subscribe\": \"false\", \r\n\t\t\"Adapter Runtime\": \"false\", \r\n\t\t\"Remote Invoke\": \"true\", \r\n\t\t\"Guaranteed Delivery\": \"false\", \r\n\t\t\"Security Auditing\": \"true\", \r\n\t\t\"Enterprise Gateway\": \"true\", \r\n\t\t\"Distributed Cache\": \"true\", \r\n\t\t\"Microservices\": \"false\" }, \r\n\t\"LicenseDetails\": [ { \r\n\t\t\"Sales Information\": { \r\n\t\t\t\"Serial Number\": \"12323232\", \r\n\t\t\t\"License Key\": \"dddddddddddddddddd\", \r\n\t\t\t\"Customer ID\": \"LK-WIN\", \r\n\t\t\t\"Customer Name\": \"Software AG Internal\", \r\n\t\t\t\"ContractDetails\": \"1\", \r\n\t\t\t\"ContractPosNumber\": \"1\", \r\n\t\t\t\"License Type Details\": \"Internal\", \r\n\t\t\t\"AutoCallHome\": \"\" \r\n\t\t} \r\n\t}, \r\n\t{ \r\n\t\t\"Product Information\": { \r\n\t\t\t\"Expiration Date\": \"2019-12-01 23:59:59 IST\", \r\n\t\t\t\"Operating System\": \"win\", \r\n\t\t\t\"Product Code\": \"YAIAA\", \r\n\t\t\t\"Product ID\": \"\", \r\n\t\t\t\"Product Name\": \"API Gateway Advanced Edition\", \r\n\t\t\t\"Product Version\": \"10.1\", \r\n\t\t\t\"Usage\": \"1\", \r\n\t\t\t\"RenewalDate\": \"\", \r\n\t\t\t\"HigherLevPosNr\": \"\", \r\n\t\t\t\"HigherLevProdCode\": \"\", \r\n\t\t\t\"HigherLevProdName\": \"\" \r\n\t\t} \r\n\t}, \r\n\t{ \r\n\t\t\"Integration Server\": { \r\n\t\t\t\"Product Code\": \"YAI\", \r\n\t\t\t\"Product Version\": \"10.1\", \r\n\t\t\t\"Concurrent Sessions\": \"Unlimited\", \r\n\t\t\t\"Clustering\": \"yes\", \r\n\t\t\t\"Publish / Subscribe\": \"no\", \r\n\t\t\t\"Adapter Runtime\": \"no\", \r\n\t\t\t\"Remote Invoke\": \"yes\", \r\n\t\t\t\"Guaranteed Delivery\": \"no\", \r\n\t\t\t\"Security Auditing\": \"yes\", \r\n\t\t\t\"Distributed Cache\": \"yes\", \r\n\t\t\t\"Enterprise Gateway\": \"yes\" \r\n\t\t} \r\n\t}, \r\n\t{ \r\n\t\t\"License Information\": { \r\n\t\t\t\"Price Unit\": \"CoreA\", \r\n\t\t\t\"Price Quantity\": \"1\", \r\n\t\t\t\"TypeOfInstallation\": \"1\", \r\n\t\t\t\"LicenseType\": \"\", \r\n\t\t\t\"ExtendedRights\": \"\", \r\n\t\t\t\"LicenseVersion\": \"1.2\", \r\n\t\t\t\"Metering\": \"\" \r\n\t\t} \r\n\t}, \r\n\t{ \r\n\t\t\"API Gateway\": { \r\n\t\t\t\"Policy Management - Threat Protection\": \"yes\", \r\n\t\t\t\"Policy Management - Gateway\": \"yes\", \r\n\t\t\t\"Application Management\": \"yes\", \r\n\t\t\t\"APIManagement\": \"yes\" \r\n\t\t} \r\n\t} \r\n\t], \r\n\t\"TerracottaLicenseInformation\": { \r\n\t\t\"License File\": null, \r\n\t\t\"BigMemory\": \"no\", \r\n\t\t\"Expiration Date\": null \r\n\t}, \r\n\t\"LicenseSettings\": { \r\n\t\t\"LicenseKeyFile\": \"C:\\GatewayTrunk\\IntegrationServer\\instances\\default\\config\\licenseKey.xml\", \r\n\t\t\"terracottaLicenseFileSet\": null \r\n\t\t} \r\n\t}" + } + }, + "400" : { + "description" : "This status code indicates invalid request or bad input." + }, + "401" : { + "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." + }, + "404" : { + "description" : "This status code indicates that the requested resource is not found." + }, + "405" : { + "description" : "This status code indicates that the requested HTTP method is not supported for the resource." + }, + "500" : { + "description" : "This status code indicates an error occurred while fetching the configured license details from API Gateway." + } + }, + "security" : [ { + "Basic" : [ ] + } ] + }, + "put" : { + "operationId" : "updateLicenseDetails", + "consumes" : [ "application/json" ], + "produces" : [ "application/json" ], + "parameters" : [ { + "in" : "body", + "name" : "body", + "description" : "The request payload for updating license details in APIGateway.", + "required" : true, + "schema" : { + "$ref" : "#/definitions/LicenseDetail" + }, + "x-examples" : { + "application/json" : "{\r\n\t\"APIGatewayLicensePath\": \"C:\\GatewayTrunk\\IntegrationServer\\instances\\default\\config\\licenseKey.xml\", \r\n\t\"TerraCottaLicensePath\": \"C:\\Documents\\SAG License\\terracotta-license.key\" \r\n}" + } + } ], + "responses" : { + "200" : { + "description" : "This status code indicates that the configured license details have been successfully persisted in API Gateway." + }, + "400" : { + "description" : "This status code indicates invalid request or bad input." + }, + "401" : { + "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." + }, + "404" : { + "description" : "This status code indicates that the requested resource is not found." + }, + "405" : { + "description" : "This status code indicates that the requested HTTP method is not supported for the resource." + }, + "500" : { + "description" : "This status code indicates an error occurred while persisting the license details in API Gateway." + } + }, + "security" : [ { + "Basic" : [ ] + } ] + } + }, + "/is/outboundproxy" : { + "get" : { + "description" : "Retrieves the list of all available outbound proxy server aliases in API Gateway.", + "operationId" : "getOutboundProxies", + "produces" : [ "application/json" ], + "parameters" : [ ], + "responses" : { + "200" : { + "description" : "This status code indicates that the outbound proxy server aliases has been successfully retireved from API Gateway.", + "schema" : { + "$ref" : "#/definitions/OutboundProxyGetResponse" + }, + "examples" : { + "application/json" : "{\r\n\t\"proxyServerList\": {\r\n\t\t\"https_proxy\": {\r\n\t\t\t\"proxyAlias\": \"https_proxy\",\r\n\t\t\t\"host\": \"10.20.30.40\",\r\n\t\t\t\"port\": \"443\",\r\n\t\t\t\"username\": \"https_proxy_username\",\r\n\t\t\t\"password\": \"**********\",\r\n\t\t\t\"protocol\": \"HTTPS\",\r\n\t\t\t\"isDefault\": \"Y\",\r\n\t\t\t\"status\": \"Enabled\",\r\n\t\t\t\"ftpType\": null,\r\n\t\t\t\"socksVersion\": null,\r\n\t\t\t\"passwordHandle\": \"OutboundProxyPasswordhttps_proxy\",\r\n\t\t\t\"caller\": \"Administrator\",\r\n\t\t\t\"entityId\": \"https_proxy\"\r\n\t\t},\r\n\t\t\"ftp_proxy_alias\": {\r\n\t\t\t\"proxyAlias\": \"ftp_proxy_alias\",\r\n\t\t\t\"host\": \"ftp.proxy.server.com\",\r\n\t\t\t\"port\": \"8745\",\r\n\t\t\t\"username\": \"username\",\r\n\t\t\t\"password\": \"*****\",\r\n\t\t\t\"protocol\": \"FTP\",\r\n\t\t\t\"isDefault\": \"N\",\r\n\t\t\t\"status\": \"Enabled\",\r\n\t\t\t\"ftpType\": \"2\",\r\n\t\t\t\"socksVersion\": null,\r\n\t\t\t\"passwordHandle\": \"OutboundProxyPasswordftp_proxy_alias\",\r\n\t\t\t\"caller\": \"Administrator\",\r\n\t\t\t\"entityId\": \"ftp_proxy_alias\"\r\n\t\t},\r\n\t\t\"socks_proxy\": {\r\n\t\t\t\"proxyAlias\": \"socks_proxy\",\r\n\t\t\t\"host\": \"socks.proxy.server.com\",\r\n\t\t\t\"port\": \"447\",\r\n\t\t\t\"username\": \"\",\r\n\t\t\t\"password\": \"\",\r\n\t\t\t\"protocol\": \"SOCKS\",\r\n\t\t\t\"isDefault\": \"N\",\r\n\t\t\t\"status\": \"Disabled\",\r\n\t\t\t\"ftpType\": \"0\",\r\n\t\t\t\"socksVersion\": \"4\",\r\n\t\t\t\"passwordHandle\": null,\r\n\t\t\t\"caller\": \"Administrator\",\r\n\t\t\t\"entityId\": \"socks_proxy\"\r\n\t\t}\r\n\t}\r\n}" + } + }, + "400" : { + "description" : "This status code indicates invalid request or bad input." + }, + "401" : { + "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." + }, + "404" : { + "description" : "This status code indicates that the requested resource is not found." + }, + "405" : { + "description" : "This status code indicates that the requested HTTP method is not supported for the resource." + }, + "500" : { + "description" : "This status code indicates an error occurred while retrieving the available outbound proxy server aliases from API Gateway." + } + }, + "security" : [ { + "Basic" : [ ] + } ] + }, + "post" : { + "operationId" : "createOutboundProxy", + "consumes" : [ "application/json" ], + "produces" : [ "application/json" ], + "parameters" : [ { + "in" : "body", + "name" : "body", + "description" : "The request payload of an outbound proxy server that is to be created in API Gateway.", + "required" : true, + "schema" : { + "$ref" : "#/definitions/OutboundProxySettings" + }, + "x-examples" : { + "application/json" : "{\r\n\t\"proxyAlias\": \"http_proxy_alias\",\r\n\t\"host\": \"proxy.http.server.com\",\r\n\t\"port\": \"80\",\r\n\t\"username\": \"proxy_user\",\r\n\t\"password\": \"proxy_password\",\r\n\t\"protocol\": \"HTTP\",\r\n\t\"isDefault\": \"N\"\r\n}" + } + } ], + "responses" : { + "200" : { + "description" : "This status code indicates that the outbound proxy server alias has been successfully created in API Gateway." + }, + "400" : { + "description" : "This status code indicates invalid request or bad input." + }, + "401" : { + "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." + }, + "404" : { + "description" : "This status code indicates that the requested resource is not found." + }, + "405" : { + "description" : "This status code indicates that the requested HTTP method is not supported for the resource." + }, + "500" : { + "description" : "This status code indicates an error occurred while persisting the outbound proxy server alias in API Gateway." + } + }, + "security" : [ { + "Basic" : [ ] + } ] + }, + "put" : { + "operationId" : "updateOutboundProxy", + "consumes" : [ "application/json" ], + "produces" : [ "application/json" ], + "parameters" : [ { + "in" : "body", + "name" : "body", + "description" : "The request payload of an outbound proxy server that is to be updated in API Gateway.", + "required" : true, + "schema" : { + "$ref" : "#/definitions/OutboundProxySettings" + }, + "x-examples" : { + "application/json" : "{\r\n\t\"proxyAlias\": \"http_proxy_alias\",\r\n\t\"host\": \"proxy.http.server.com\",\r\n\t\"port\": \"80\",\r\n\t\"username\": \"proxy_user\",\r\n\t\"password\": \"proxy_password_modified\",\r\n\t\"protocol\": \"HTTP\",\r\n\t\"isDefault\": \"N\"\r\n}" + } + } ], + "responses" : { + "200" : { + "description" : "This status code indicates that the outbound proxy server alias has been successfully updated in API Gateway." + }, + "400" : { + "description" : "This status code indicates invalid request or bad input." + }, + "401" : { + "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." + }, + "404" : { + "description" : "This status code indicates that the requested resource is not found." + }, + "405" : { + "description" : "This status code indicates that the requested HTTP method is not supported for the resource." + }, + "500" : { + "description" : "This status code indicates an error occurred while persisting the outbound proxy server alias in the API Gateway." + } + }, + "security" : [ { + "Basic" : [ ] + } ] + } + }, + "/is/outboundproxy/{outboundproxyAlias}" : { + "delete" : { + "description" : "Deletes the specified outbound proxy server alias from API Gateway.", + "operationId" : "deleteOutboundProxy", + "parameters" : [ { + "name" : "outboundproxyAlias", + "in" : "path", + "description" : "The outbound proxy server alias to be deleted", + "required" : true, + "type" : "string", + "x-example" : "sample_proxy_alias" + } ], + "responses" : { + "200" : { + "description" : "This status code indicates that the outbound proxy server alias has been successfully deleted from API Gateway." + }, + "400" : { + "description" : "This status code indicates invalid request or bad input." + }, + "401" : { + "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." + }, + "404" : { + "description" : "This status code indicates that the requested resource is not found." + }, + "405" : { + "description" : "This status code indicates that the requested HTTP method is not supported for the resource." + }, + "500" : { + "description" : "This status code indicates an error occurred while deleting the specified outbound proxy server alias from API Gateway." + } + }, + "security" : [ { + "Basic" : [ ] + } ] + } + }, + "/is/outboundproxy{outboundproxyAlias}/enable" : { + "put" : { + "description" : "Enables an already existing outbound proxy server alias in API Gateway.", + "operationId" : "enableOutboundProxy", + "consumes" : [ "application/json" ], + "produces" : [ "application/json" ], + "parameters" : [ { + "name" : "outboundproxyAlias", + "in" : "path", + "description" : "The outbound proxy server alias to be enabled", + "required" : true, + "type" : "string", + "x-example" : "sample_proxy_alias" + } ], + "responses" : { + "200" : { + "description" : "This status code indicates that the outbound proxy server alias has been successfully enabled in API Gateway." + }, + "400" : { + "description" : "This status code indicates invalid request or bad input." + }, + "401" : { + "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." + }, + "404" : { + "description" : "This status code indicates that the requested resource is not found." + }, + "405" : { + "description" : "This status code indicates that the requested HTTP method is not supported for the resource." + }, + "500" : { + "description" : "This status code indicates an error occurred while enabling the outbound proxy server alias in the API Gateway." + } + }, + "security" : [ { + "Basic" : [ ] + } ] + } + }, + "/is/outboundproxy{outboundproxyAlias}/disable" : { + "put" : { + "description" : "Disables an already existing outbound proxy server alias in API Gateway.", + "operationId" : "disableOutboundProxy", + "consumes" : [ "application/json" ], + "produces" : [ "application/json" ], + "parameters" : [ { + "name" : "outboundproxyAlias", + "in" : "path", + "description" : "The outbound proxy server alias to be disabled", + "required" : true, + "type" : "string", + "x-example" : "sample_proxy_alias" + } ], + "responses" : { + "200" : { + "description" : "This status code indicates that the outbound proxy server alias has been successfully disabled in API Gateway." + }, + "400" : { + "description" : "This status code indicates invalid request or bad input." + }, + "401" : { + "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." + }, + "404" : { + "description" : "This status code indicates that the requested resource is not found." + }, + "405" : { + "description" : "This status code indicates that the requested HTTP method is not supported for the resource." + }, + "500" : { + "description" : "This status code indicates an error occurred while disabling the outbound proxy server alias in the API Gateway." + } + }, + "security" : [ { + "Basic" : [ ] + } ] + } + }, + "/licenseNotificationCriteria" : { + "get" : { + "description" : "Transaction based license notification criteria are like a usage checkpoint and whenever usage reaches to that checkpoint, a notification will be generated. This GET method returns the existing transaction based license notification criteria's as a response.The user should be part of API-Gateway-Administrators group or else should have 'manage administration configurations' privilege to add notification criteria.", + "operationId" : "getAllNotificationCriteria", + "consumes" : [ "application/json" ], + "produces" : [ "application/json" ], + "parameters" : [ ], + "responses" : { + "200" : { + "description" : "This response indicates that the list of notification criteria's has been returned successfully. The response body is the list of notification criteria's.", + "examples" : { + "application/json" : "{\r\n \"notificationCriteriaList\": [\r\n {\r\n \"id\": \"1503882085022\",\r\n \"user\": \"admin\",\r\n \"notifyAt\": 100,\r\n \"notificationType\": \"UI-notification\",\r\n \"creationDate\": \"1503560319396\",\r\n \"defaultNotificationCriteria\": true\r\n },\r\n {\r\n \"id\": \"1503882084702\",\r\n \"user\": \"admin\",\r\n \"notifyAt\": 90,\r\n \"notificationType\": \"UI-notification\",\r\n \"creationDate\": \"1503560319260\",\r\n \"defaultNotificationCriteria\": true\r\n }\r\n ],\r\n \"result\": \"success\"\r\n}" + } + }, + "401" : { + "description" : "This response indicates that invalid credentials have been provided for the request." + }, + "500" : { + "description" : "This response indicates that the server has encountered an error while fetching the list of notification criteria's" + } + }, + "security" : [ { + "Basic" : [ ] + } ] + }, + "post" : { + "description" : "Transaction based license(TBL) notification criteria is used to monitor the API Gateway usage. API Gateway TBL will have the the permitted invocations per month defined in the license file and if user want to get notified when usage reaches to some point before it breaches the license limit, then user has to add a notification criteria by mentioning the usage point and notification will be generated when usage reaches to that point. This POST method is used to create transaction based license notification criteria in API Gateway. The user should be part of API-Gateway-Administrators group or else should have 'manage administration configurations' privilege to add notification criteria.", + "operationId" : "saveNotificationCriteria", + "consumes" : [ "application/json" ], + "produces" : [ "application/json" ], + "parameters" : [ { + "in" : "body", + "name" : "body", + "description" : "", + "required" : true, + "schema" : { + "$ref" : "#/definitions/NotificationCriteria" + }, + "x-examples" : { + "application/json" : "{\"notificationCriteria\":{\"user\":\"admin\",\"notifyAt\":\"70\",\"email\":\"sss@sag.com\",\"notificationType\":\"both\"}}" + } + } ], + "responses" : { + "201" : { + "description" : "This response indicates that the notification criteria has been created successfully.", + "examples" : { + "application/json" : "{\r\n \"notificationCriteriaResponse\": \"license notificationCriteria created successfully\"\r\n}" + } + }, + "401" : { + "description" : "This response indicates that invalid credentials have been provided for the request." + }, + "500" : { + "description" : "This response indicates that the server has encountered an error while creating the notification criteria" + } + }, + "security" : [ { + "Basic" : [ ] + } ] + }, + "put" : { + "description" : "This PUT method is used to update the existing transaction based license notification criteria in API Gateway.The user should be part of API-Gateway-Administrators group or else should have 'manage administration configurations' privilege to add notification criteria.", + "operationId" : "updateNotificationCriteria", + "consumes" : [ "application/json" ], + "produces" : [ "application/json" ], + "parameters" : [ { + "in" : "body", + "name" : "body", + "description" : "", + "required" : true, + "schema" : { + "$ref" : "#/definitions/NotificationCriteria" + }, + "x-examples" : { + "application/json" : "{\"notificationCriteria\":{\"id\":\"123\",\"notifyAt\":\"70\",\"email\":\"sss@sag.com\",\"notificationType\":\"both\"}}" + } + } ], + "responses" : { + "200" : { + "description" : "This response indicates that the notification criteria has been updated successfully.", + "examples" : { + "application/json" : "{\r\n \"notificationCriteriaResponse\": \"license notificationCriteria updated sucessfully\"\r\n}" + } + }, + "401" : { + "description" : "This response indicates that invalid credentials have been provided for the request." + }, + "500" : { + "description" : "This response indicates that the server has encountered an error while updating the notification criteria" + } + }, + "security" : [ { + "Basic" : [ ] + } ] + } + }, + "/licenseNotificationCriteria/{notificationCriteriaId}" : { + "get" : { + "description" : "The GET method returns the transaction based license notification criteria based on the id. \n\nTransaction based license notification criteria is like a usage check point whenever usage reaches to that check point user will get notified by the notification.The user should be part of API-Gateway-Administrators group or else should have 'manage administration configurations' privilege to add notification criteria.", + "operationId" : "getNotificationCriteria", + "consumes" : [ "application/json" ], + "produces" : [ "application/json" ], + "parameters" : [ { + "name" : "notificationCriteriaId", + "in" : "path", + "description" : "This parameter indicates the notification criteria id to fetch the notification criteria", + "required" : true, + "type" : "string", + "x-example" : "12334" + } ], + "responses" : { + "200" : { + "description" : "This response indicates that the notification criteria has been returned successfully. The response body is the notification criteria.", + "examples" : { + "application/json" : "{\"notificationCriteria\":{\"id\":\"2423422\",\"user\":\"admin\",\"notifyAt\":\"70\",\"email\":\"sss@sag.com\",\"notificationType\":\"both\"}}" + } + }, + "401" : { + "description" : "This response indicates that invalid credentials have been provided for the request." + }, + "500" : { + "description" : "This response indicates that the server has encountered an error while fetching the the notification criteria" + } + }, + "security" : [ { + "Basic" : [ ] + } ] + }, + "delete" : { + "description" : "This method deletes the transaction based license notification criteria based on the id. The user should be part of API-Gateway-Administrators group or else should have 'manage administration configurations' privilege to add notification criteria.", + "operationId" : "deleteNotificationCriteria", + "consumes" : [ "application/json" ], + "produces" : [ "application/json" ], + "parameters" : [ { + "name" : "notificationCriteriaId", + "in" : "path", + "description" : "This parameter indicates the notification criteria id to purge the notification criteria", + "required" : true, + "type" : "string", + "x-example" : "12334" + } ], + "responses" : { + "204" : { + "description" : "This response indicates that the transaction based license notification criteria deleted successfully." + }, + "401" : { + "description" : "This response indicates that invalid credentials have been provided for the request." + }, + "400" : { + "description" : "This status code indicates that the request URL is not valid." + }, + "500" : { + "description" : "This response indicates that the server has encountered an error while purging the notification criteria. " + } + }, + "security" : [ { + "Basic" : [ ] + } ] + } + }, + "/masterPassword/setExpiry" : { + "put" : { + "description" : "The method updates the expiry interval of the master password in API Gateway.", + "operationId" : "UpdateExpiryInterval", + "consumes" : [ "application/json" ], + "produces" : [ "application/json" ], + "parameters" : [ { + "in" : "body", + "name" : "body", + "description" : "", + "required" : true, + "schema" : { + "$ref" : "#/definitions/MasterPasswordExpiryInterval" + }, + "x-examples" : { + "application/json" : "{ \r\n\t\"expireInterval\": \"30\" \r\n}\r\n\t" + } + } ], + "responses" : { + "200" : { + "description" : "This status code indicates that the master password expiry interval has been successfully updated in API Gateway", + "schema" : { + "$ref" : "#/definitions/MasterPasswordExpiryIntervalResponse" + }, + "examples" : { + "application/json" : "{\r\n \"expireInterval\": \"60\",\r\n \"message\": \"Master password expiration interval updated\"\r\n}" + } + }, + "401" : { + "description" : "This status code indicates that the necessary authentication is not supplied for accessing this resource" + }, + "400" : { + "description" : "This status code indicates that either the required parameters are missing or the parameters passed are incorrect" + } + }, + "security" : [ { + "Basic" : [ ] + } ] + } + }, + "/masterPassword/update" : { + "put" : { + "description" : "The method updates the master password in API Gateway.On successful update,all the old passwords available will be encrypted using this new master password.", + "operationId" : "UpdateMasterPassword", + "consumes" : [ "application/json" ], + "produces" : [ "application/json" ], + "parameters" : [ { + "in" : "body", + "name" : "body", + "description" : "", + "required" : true, + "schema" : { + "$ref" : "#/definitions/MasterPasswordUpdate" + }, + "x-examples" : { + "application/json" : "{ \r\n \"oldPassword\":\"bWFuYWdl\",\r\n \"newPassword\":\"c2VjdXJlcGFzc3dvcmQ=\"\r\n}" + } + } ], + "responses" : { + "200" : { + "description" : "This status code indicates that the master password has been successfully updated", + "schema" : { + "$ref" : "#/definitions/MasterPasswordUpdateResponse" + }, + "examples" : { + "application/json" : "{\r\n \"message\": \"New master password saved\"\r\n}" + } + }, + "401" : { + "description" : "This status code indicates that the necessary authentication is not supplied for accessing this resource" + }, + "400" : { + "description" : "This status code indicates that either the required parameters are missing or the parameters passed are incorrect" + } + }, + "security" : [ { + "Basic" : [ ] + } ] + } + }, + "/masterPassword/reset" : { + "put" : { + "description" : "Resets the master password to the default value in API Gateway.This should be performed when the master password is lost and after a successful reset, it is recommended to change the master password again to a secure value", + "operationId" : "ResetMasterPassword", + "produces" : [ "application/json" ], + "parameters" : [ ], + "responses" : { + "200" : { + "description" : "This status code indicates that the master password has been successfully updated to default value", + "schema" : { + "$ref" : "#/definitions/MasterPasswordResetResponse" + }, + "examples" : { + "application/json" : "{\r\n \"handleCount\": \"7\",\r\n \"message\": \"7 passwords reset\"\r\n}" + } + }, + "401" : { + "description" : "This status code indicates that the necessary authentication is not supplied for accessing this resource" + }, + "400" : { + "description" : "This status code indicates that either the required parameters are missing or the parameters passed are incorrect" + } + }, + "security" : [ { + "Basic" : [ ] + } ] + } + }, + "/masterPassword" : { + "get" : { + "description" : "This retrieves the master password properties in API Gateway.", + "operationId" : "getMasterPasswordProperties", + "consumes" : [ "application/json" ], + "produces" : [ "application/json" ], + "parameters" : [ ], + "responses" : { + "200" : { + "description" : "This status code indicates that the master password properties are retrieved successfully", + "schema" : { + "$ref" : "#/definitions/MasterPasswordProperties" + }, + "examples" : { + "application/json" : "{\r\n \"lastChangeDate\": \"2018-09-04 11:50:51 IST\",\r\n \"expireDate\": \"2018-12-03 11:50:51 IST\",\r\n \"expireInterval\": \"90\",\r\n \"daysTilExpire\": \"75\",\r\n \"expireMessage\": null,\r\n \"statusMessage\": \"Active\"\r\n}" + } + }, + "401" : { + "description" : "This status code indicates that the necessary authentication is not supplied for accessing this resource" + } + }, + "security" : [ { + "Basic" : [ ] + } ] + } + }, + "/is/cluster" : { + "get" : { + "description" : "Retrieves the configured cluster settings from API Gateway.", + "operationId" : "getClusterSetting", + "produces" : [ "application/json" ], + "parameters" : [ ], + "responses" : { + "200" : { + "description" : "This status code indicates that the cluster setting has been successfully retrieved from API Gateway.", + "schema" : { + "$ref" : "#/definitions/ClusterInfo" + } + }, + "400" : { + "description" : "This status code indicates invalid request or bad input." + }, + "401" : { + "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." + }, + "404" : { + "description" : "This status code indicates that the requested resource is not found." + }, + "405" : { + "description" : "This status code indicates that the requested HTTP method is not supported for the resource." + }, + "500" : { + "description" : "This status code indicates an error occurred while fetching the configured cluster settings from API Gateway." + } + }, + "security" : [ { + "Basic" : [ ] + } ] + }, + "put" : { + "description" : "Updates the cluster settings in API Gateway.", + "operationId" : "updateCluster", + "consumes" : [ "application/json" ], + "produces" : [ "application/json" ], + "parameters" : [ { + "in" : "body", + "name" : "body", + "description" : "The request payload for cluster settings in API Gateway.", + "required" : true, + "schema" : { + "$ref" : "#/definitions/ClusterInfo" + }, + "x-examples" : { + "application/json" : "{\r\n\t\"clusterAware\":true,\r\n\t\"pendingRestart\":false,\r\n\t\"currentlyClustered\":false,\r\n\t\"clusterSessTimeout\":\"60\",\r\n\t\"clusterName\":\"devCluster\",\r\n\t\"actionOnStartupError\":\"standalone\",\r\n\t\"tsaURLs\":\"bluebird:9510\"\r\n}" + } + } ], + "responses" : { + "200" : { + "description" : "This status code indicates that the configured cluster settings have been successfully persisted in API Gateway.", + "schema" : { + "$ref" : "#/definitions/ClusterInfo" + }, + "examples" : { + "application/json" : "{\r\n\t\"clusterAware\":true,\r\n\t\"pendingRestart\":false,\r\n\t\"currentlyClustered\":false,\r\n\t\"clusterSessTimeout\":\"60\",\r\n\t\"clusterName\":\"devCluster\",\r\n\t\"actionOnStartupError\":\"standalone\",\r\n\t\"tsaURLs\":\"bluebird:9510\"\r\n}" + } + }, + "400" : { + "description" : "This status code indicates that the the user sends an empty or invalid JSON payload." + }, + "401" : { + "description" : "This status code indicates that the user did not provide any user credential or the user is not authorized to update extended and watt settings." + }, + "404" : { + "description" : "This status code indicates that the requested resource is not found." + }, + "405" : { + "description" : "This status code indicates that the requested HTTP method is not supported for the resource." + }, + "500" : { + "description" : "This status code indicates an error occurred while persisting the cluster settings in API Gateway." + } + }, + "security" : [ { + "Basic" : [ ] + } ] + } + }, + "/licenseUsageDetails" : { + "get" : { + "description" : "This REST request is used to retrieve the details of transaction based license.", + "operationId" : "getLicenseUsageDetails", + "consumes" : [ "application/json" ], + "produces" : [ "application/json" ], + "parameters" : [ { + "name" : "month", + "in" : "query", + "description" : "This query parameter is used to provide the month details in numeric format", + "required" : false, + "type" : "string", + "x-example" : "month=5" + }, { + "name" : "year", + "in" : "query", + "description" : "This query parameter is used to provide the year details in numeric format", + "required" : false, + "type" : "string", + "x-example" : "year=2018" + } ], + "responses" : { + "200" : { + "description" : "This status code indicates that the transaction based license details for the given month has sent successfully as response.", + "examples" : { + "application/json" : "{\r\n \"currentUsage\": 111,\r\n \"licenseLimitPerMonth\": 20,\r\n \"pendingQuota\": 0,\r\n \"monthAndYear\": \"5/2018\"\r\n}" + } + }, + "401" : { + "description" : "This status code indicates that the user did not provide any user credential or user does not have API Gateway Administrator access to get the transaction based license details." + } + }, + "security" : [ { + "Basic" : [ ] + } ] + } + }, + "/apitransactions/typedefinitions" : { + "get" : { + "description" : "Returns the list of runtime event types. The available event types are as follows 1.transactionalEvents 2.monitorEvents 3.errorEvents 4.performanceMetrics 5.threatProtectionEvents 6.lifecycleEvents 7.policyViolationEvents 8.auditLogs 9.applicationlogs. You can use these eventType to scope the archive/purge operation. The user should be part of API-Gateway-Administrators group or else should have 'Manage purge and restore runtime events' privilege to perform this operation.", + "operationId" : "getMappings", + "consumes" : [ "application/json" ], + "produces" : [ "application/json" ], + "parameters" : [ ], + "responses" : { + "200" : { + "description" : "This response indicates that the list of type definitions has been returned to the requestor.", + "examples" : { + "application/json" : "{\r\n \"Mappings\": [\r\n \"performanceMetrics\",\r\n \"monitorEvents\",\r\n \"transactionalEvents\",\r\n \"policyViolationEvents\",\r\n \"errorEvents\",\r\n \"threatProtectionEvents\",\r\n \"lifecycleEvents\",\r\n \"auditLogs\"\r\n,\r\n \"applicationlogs\"\r\n ]\r\n}" + } + }, + "401" : { + "description" : "This response indicates that invalid credentials have been provided for the request." + }, + "500" : { + "description" : "This response indicates that the server has encountered an error while returning the list of type definitions. " + } + }, + "security" : [ { + "Basic" : [ ] + } ] + } + }, + "/logAggregation/downloadLogs" : { + "get" : { + "description" : "This resource is used to download logs from different components used by APIGateway, server configurations and thread dumps.", + "operationId" : "downloadLogs", + "consumes" : [ "application/json" ], + "produces" : [ "multipart/form-data" ], + "parameters" : [ ], + "responses" : { + "200" : { + "description" : "This response indicates that the logs are downloaded successfully. The response body is the zipped archive." + }, + "400" : { + "description" : "This response indicates that the server has encountered an error while downloading the logs." + }, + "401" : { + "description" : "This status code indicates that the user did not provide any user credential or the user is not authorized to download the logs." + } + }, + "security" : [ { + "Basic" : [ ] + } ] + } + }, + "/apitransactions/archives" : { + "get" : { + "description" : "This GET method is used to fetch the details of existing archive files and response of this method would be the list of archive file names. Select one from the list of archive file names returned by this method and use the POST /apitransactions/archives/{fileName} method to restore.The user should be part of API-Gateway-Administrators group or else should have 'Manage purge and restore runtime events' privilege to perform this operation.", + "operationId" : "listAllArchives", + "consumes" : [ "application/json" ], + "produces" : [ "application/json" ], + "parameters" : [ ], + "responses" : { + "200" : { + "description" : "This response indicates that the list of archive file names returned successfully. The response body is the list of archive file names.", + "examples" : { + "application/json" : "{\r\n \"archiveFiles\": [\r\n \"default-2017-08-29-1504011306456\",\r\n \"default-2017-08-29-1504012415981\"\r\n ]\r\n}" + } + }, + "401" : { + "description" : "This response indicates that invalid credentials have been provided for the request." + }, + "500" : { + "description" : "This response indicates that the server has encountered an error while returning the list of archive file names" + } + }, + "security" : [ { + "Basic" : [ ] + } ] + }, + "post" : { + "description" : "This method is used to archive the runtime events and metrics. You can additionally scope the archive data using input parameter filters. This method returns the job id as the response which will be used to know the status of the job. \n\nUse the GET /apitransactions/jobs/{jobId} to know the status, file name and use POST /apitransactions/archives/{fileName} method to restore. The user should be part of API-Gateway-Administrators group or else should have 'Manage purge and restore runtime events' privilege to perform this operation.", + "operationId" : "apiTransactionsArchiveBasedOnDuration", + "consumes" : [ "application/json" ], + "produces" : [ "application/json" ], + "parameters" : [ { + "name" : "until", + "in" : "query", + "description" : "This is a date parameter. All the specified api transactions until the given date will be purged. Example value: until=2017-12-18 00:00:00. Either one of until or duration is a mandatory parameter", + "required" : true, + "type" : "string", + "x-example" : "until=2017-10-10 00:00:00" + }, { + "name" : "olderThan", + "in" : "query", + "description" : "All the api transactions that are older than the value specified will be purged. Ex: olderThan='2d'. Possible values are d(days),M(months),y(years), lets say a. 2d means 2days b. 1M means 1 month c. 1y means 1 year", + "required" : false, + "type" : "string", + "x-example" : "olderThan=2d" + }, { + "name" : "eventType", + "in" : "query", + "description" : "This parameter is used to specify the api transaction type. Specify eventType=ALL to archive all the events and specify any specific type to archive that particular event type alone. Ex: eventType=transactionalEvents. The available event types are as follows 1.transactionalEvents 2.monitorEvents 3.errorEvents 4.performanceMetrics 5.threatProtectionEvents 6.lifecycleEvents 7.policyViolationEvents 8.auditLogs 9.applicationlogs", + "required" : true, + "type" : "string", + "x-example" : "eventType=ALL" + } ], + "responses" : { + "202" : { + "description" : "This response indicates that the archiving process has been started and returned the jobId to track it further.", + "examples" : { + "application/json" : "{\r\n \"jobId\": \"1504177213671\"\r\n}" + } + }, + "401" : { + "description" : "This response indicates that invalid credentials have been provided for the request." + }, + "400" : { + "description" : "This status code indicates that the request URL is not valid." + }, + "500" : { + "description" : "This response indicates that the server has encountered an error while archiving the api transactions. " + } + }, + "security" : [ { + "Basic" : [ ] + } ] + } + }, + "/apitransactions/archives/{fileName}" : { + "post" : { + "description" : "This method is used to restore the runtime data by specifying the archive file name. See GET /apitransactions/archives/ to know how to get the existing archive file names for more details. This method returns the job id as a response to track the status further. The user should be part of API-Gateway-Administrators group or else should have 'Manage purge and restore runtime events' privilege to perform this operation.", + "operationId" : "restoreData", + "consumes" : [ "application/json" ], + "produces" : [ "application/json" ], + "parameters" : [ { + "name" : "fileName", + "in" : "path", + "description" : "This parameter indicates the file name to restore. Ex: fileName=default-2017-08-29-1504011306456.", + "required" : true, + "type" : "string", + "x-example" : "default-2017-02-09-1486644396751" + } ], + "responses" : { + "202" : { + "description" : "This response indicates that the restore process has been started and returned the jobId to track it further.", + "examples" : { + "application/json" : "{\r\n \"jobId\": \"1504177213671\"\r\n}" + } + }, + "401" : { + "description" : "This response indicates that invalid credentials have been provided for the request." + }, + "500" : { + "description" : "This response indicates that the server has encountered an error while restoring the archive file. " + } + }, + "security" : [ { + "Basic" : [ ] + } ] + } + }, + "/is/webServiceEndpoints" : { + "get" : { + "description" : "The method retrieves list of all Webservice endpoints in API Gateway.", + "operationId" : "getAllWebserviceEndpoints", + "consumes" : [ "application/json" ], + "produces" : [ "application/json" ], + "parameters" : [ ], + "responses" : { + "200" : { + "description" : "This status code indicates that the list of Webservice endpoints is successfully retrieved.", + "examples" : { + "application/json" : "{\r\n \"WebserviceEndpointAlias\": [\r\n {\r\n \"id\": \"c00222\",\r\n \"alias\": \"c00222\",\r\n \"description\": \"des\",\r\n \"aliasType\": \"CONSUMER\",\r\n \"transportType\": \"JMS\",\r\n \"keyStoreAlias\": \"DEFAULT_IS_KEYSTORE\",\r\n \"keyAlias\": \"ssos\",\r\n \"trustStoreAlias\": \"DEFAULT_IS_TRUSTSTORE\",\r\n \"timestampPrecisionInMillis\": \"false\",\r\n \"timestampTimeToLive\": \"123\",\r\n \"timestampMaximumSkew\": \"1234\",\r\n \"executeACL\": \"Default\",\r\n \"jmsAliasType\": \"JMS\",\r\n \"jndiProvAlias\": \"\",\r\n \"connFactoryName\": \"qpidConnectionFactory\",\r\n \"jmsConnAlias\": \"JMS_CONN\",\r\n \"user\": \"user\",\r\n \"password\": \"password\"\r\n },\r\n {\r\n \"id\": \"c0022\",\r\n \"alias\": \"c0022\",\r\n \"description\": \"des\",\r\n \"aliasType\": \"CONSUMER\",\r\n \"transportType\": \"JMS\",\r\n \"keyStoreAlias\": \"DEFAULT_IS_KEYSTORE\",\r\n \"keyAlias\": \"ssos\",\r\n \"trustStoreAlias\": \"DEFAULT_IS_TRUSTSTORE\",\r\n \"timestampPrecisionInMillis\": \"false\",\r\n \"timestampTimeToLive\": \"123\",\r\n \"timestampMaximumSkew\": \"1234\",\r\n \"executeACL\": \"Default\",\r\n \"jmsAliasType\": \"JMS\",\r\n \"jndiProvAlias\": \"\",\r\n \"connFactoryName\": \"qpidConnectionFactory\",\r\n \"jmsConnAlias\": \"JMS_CONN\",\r\n \"user\": \"user\",\r\n \"password\": \"password\"\r\n },\r\n {\r\n \"id\": \"AMQP_PROVIDER_ALIAS\",\r\n \"alias\": \"AMQP_PROVIDER_ALIAS\",\r\n \"description\": \"AMQP_PROVIDER_ALIAS\",\r\n \"aliasType\": \"PROVIDER\",\r\n \"transportType\": \"JMS\",\r\n \"keyStoreAlias\": \"\",\r\n \"keyAlias\": \"\",\r\n \"trustStoreAlias\": \"\",\r\n \"timestampPrecisionInMillis\": \"\",\r\n \"timestampTimeToLive\": \"\",\r\n \"timestampMaximumSkew\": \"\",\r\n \"jmsTriggerName\": \"wm.namespace.ws:wseTrigger_\",\r\n \"deliveryMode\": \"\",\r\n \"timeToLive\": 0,\r\n \"priority\": 0,\r\n \"replyToDestType\": \"\",\r\n \"includeConnFactoryName\": \"true\"\r\n },\r\n {\r\n \"id\": \"c0021272\",\r\n \"alias\": \"c0021272\",\r\n \"description\": \"des\",\r\n \"aliasType\": \"CONSUMER\",\r\n \"transportType\": \"JMS\",\r\n \"keyStoreAlias\": \"DEFAULT_IS_KEYSTORE\",\r\n \"keyAlias\": \"ssos\",\r\n \"trustStoreAlias\": \"DEFAULT_IS_TRUSTSTORE\",\r\n \"timestampPrecisionInMillis\": \"false\",\r\n \"timestampTimeToLive\": \"123\",\r\n \"timestampMaximumSkew\": \"1234\",\r\n \"executeACL\": \"Default\",\r\n \"jmsAliasType\": \"JMS\",\r\n \"jndiProvAlias\": \"\",\r\n \"connFactoryName\": \"qpidConnectionFactory\",\r\n \"jmsConnAlias\": \"JMS_CONN\",\r\n \"user\": \"user\",\r\n \"password\": \"password\"\r\n },\r\n {\r\n \"id\": \"c002\",\r\n \"alias\": \"c002\",\r\n \"description\": \"des\",\r\n \"aliasType\": \"CONSUMER\",\r\n \"transportType\": \"JMS\",\r\n \"keyStoreAlias\": \"DEFAULT_IS_KEYSTORE\",\r\n \"keyAlias\": \"ssos\",\r\n \"trustStoreAlias\": \"DEFAULT_IS_TRUSTSTORE\",\r\n \"timestampPrecisionInMillis\": \"false\",\r\n \"timestampTimeToLive\": \"123\",\r\n \"timestampMaximumSkew\": \"1234\",\r\n \"executeACL\": \"Default\",\r\n \"jmsAliasType\": \"JNDI\",\r\n \"jndiProvAlias\": \"JNDI_AMQP\",\r\n \"connFactoryName\": \"qpidConnectionFactory\",\r\n \"jmsConnAlias\": \"\",\r\n \"user\": \"user\",\r\n \"password\": \"password\"\r\n },\r\n {\r\n \"id\": \"c00214272\",\r\n \"alias\": \"c00214272\",\r\n \"description\": \"des\",\r\n \"aliasType\": \"CONSUMER\",\r\n \"transportType\": \"JMS\",\r\n \"keyStoreAlias\": \"DEFAULT_IS_KEYSTORE\",\r\n \"keyAlias\": \"ssos\",\r\n \"trustStoreAlias\": \"DEFAULT_IS_TRUSTSTORE\",\r\n \"timestampPrecisionInMillis\": \"false\",\r\n \"timestampTimeToLive\": \"123\",\r\n \"timestampMaximumSkew\": \"1234\",\r\n \"executeACL\": \"Default\",\r\n \"jmsAliasType\": \"JNDI\",\r\n \"jndiProvAlias\": \"JNDI_AMQP\",\r\n \"connFactoryName\": \"qpidConnectionFactory\",\r\n \"jmsConnAlias\": \"JMS_CONN\",\r\n \"user\": \"user\",\r\n \"password\": \"password\"\r\n }\r\n ]\r\n}" + } + }, + "401" : { + "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." + }, + "404" : { + "description" : "" + } + }, + "security" : [ { + "Basic" : [ ] + } ] + }, + "post" : { + "description" : "The method creates a Webservice endpoint in API Gateway. The API request body must contain the payload for the Webservice endpoint", + "operationId" : "createWebserviceEndpoint", + "consumes" : [ "application/json" ], + "produces" : [ "application/json" ], + "parameters" : [ { + "in" : "body", + "name" : "body", + "description" : "", + "required" : true, + "schema" : { + "$ref" : "#/definitions/WebserviceEndpointAlias" + }, + "x-examples" : { + "application/json" : "{\r\n \r\n \"alias\": \"c00222\",\r\n \"description\": \"des\",\r\n \"aliasType\": \"CONSUMER\",\r\n \"transportType\": \"JMS\",\r\n \"keyStoreAlias\": \"DEFAULT_IS_KEYSTORE\",\r\n \"keyAlias\": \"ssos\",\r\n \"trustStoreAlias\": \"DEFAULT_IS_TRUSTSTORE\",\r\n \"timestampPrecisionInMillis\": \"false\",\r\n \"timestampTimeToLive\": \"123\",\r\n \"timestampMaximumSkew\": \"1234\",\r\n \"executeACL\": \"Default\",\r\n \"jmsAliasType\": \"JMS\",\r\n \"jndiProvAlias\": \"\",\r\n \"connFactoryName\": \"qpidConnectionFactory\",\r\n \"jmsConnAlias\": \"JMS_CONN\",\r\n \"user\": \"user\",\r\n \"password\": \"password\"\r\n }" + } + } ], + "responses" : { + "201" : { + "description" : "This status code indicates that the Webservice endpoint has been successfully created in API Gateway, and the newly created Webservice endpoint is available in the response body.", + "schema" : { + "$ref" : "#/definitions/WebserviceEndpointAlias" + }, + "examples" : { + "application/json" : "{\r\n \"WebserviceEndpointAlias\": {\r\n \"id\": \"c001\",\r\n \"alias\": \"c001\",\r\n \"description\": \"des\",\r\n \"aliasType\": \"CONSUMER\",\r\n \"transportType\": \"JMS\",\r\n \"keyStoreAlias\": \"DEFAULT_IS_KEYSTORE\",\r\n \"keyAlias\": \"ssos\",\r\n \"trustStoreAlias\": \"DEFAULT_IS_TRUSTSTORE\",\r\n \"timestampPrecisionInMillis\": \"false\",\r\n \"timestampTimeToLive\": \"123\",\r\n \"timestampMaximumSkew\": \"1234\",\r\n \"executeACL\": \"Default\",\r\n \"jmsAliasType\": \"JMS\",\r\n \"jndiProvAlias\": \"\",\r\n \"connFactoryName\": \"qpidConnectionFactory\",\r\n \"jmsConnAlias\": \"JMS_CONN\",\r\n \"user\": \"user\",\r\n \"password\": \"password\"\r\n }\r\n}" + } + }, + "401" : { + "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." + }, + "400" : { + "description" : "This status code indicates that the Webservice endpoint with the given name already exists in API Gateway or the request body is not correct.", + "examples" : { + "application/json" : "{}" + } + } + }, + "security" : [ { + "Basic" : [ ] + } ] + }, + "put" : { + "description" : "This REST service is used to update the Webservice endpoint", + "operationId" : "updateWebserviceEndpoint", + "consumes" : [ "application/json" ], + "produces" : [ "application/json" ], + "parameters" : [ { + "in" : "body", + "name" : "body", + "description" : "", + "required" : true, + "schema" : { + "$ref" : "#/definitions/WebserviceEndpointAlias" + }, + "x-examples" : { + "application/json" : "{\r\n \"id\": \"c001\",\r\n \"alias\": \"c001\",\r\n \"description\": \"des\",\r\n \"aliasType\": \"CONSUMER\",\r\n \"transportType\": \"JMS\",\r\n \"keyStoreAlias\": \"DEFAULT_IS_KEYSTORE\",\r\n \"keyAlias\": \"ssos\",\r\n \"trustStoreAlias\": \"DEFAULT_IS_TRUSTSTORE\",\r\n \"timestampPrecisionInMillis\": \"false\",\r\n \"timestampTimeToLive\": \"123\",\r\n \"timestampMaximumSkew\": \"1234\",\r\n \"executeACL\": \"Default\",\r\n \"jmsAliasType\": \"JMS\",\r\n \"jndiProvAlias\": \"\",\r\n \"connFactoryName\": \"qpidConnectionFactory\",\r\n \"jmsConnAlias\": \"JMS_CONN\",\r\n \"user\": \"user\",\r\n \"password\": \"password\"\r\n }" + } + } ], + "responses" : { + "200" : { + "description" : "This status code indicates that API Gateway has successfully updated the specified Webservice endpoint and the updated Webservice endpoint details can be found in the response body", + "schema" : { + "$ref" : "#/definitions/WebserviceEndpointAlias" + }, + "examples" : { + "application/json" : "{\r\n \"WebserviceEndpointAlias\": {\r\n \"id\": \"c001\",\r\n \"alias\": \"c001\",\r\n \"description\": \"des\",\r\n \"aliasType\": \"CONSUMER\",\r\n \"transportType\": \"JMS\",\r\n \"keyStoreAlias\": \"DEFAULT_IS_KEYSTORE\",\r\n \"keyAlias\": \"ssos\",\r\n \"trustStoreAlias\": \"DEFAULT_IS_TRUSTSTORE\",\r\n \"timestampPrecisionInMillis\": \"false\",\r\n \"timestampTimeToLive\": \"123\",\r\n \"timestampMaximumSkew\": \"1234\",\r\n \"executeACL\": \"Default\",\r\n \"jmsAliasType\": \"JMS\",\r\n \"jndiProvAlias\": \"\",\r\n \"connFactoryName\": \"qpidConnectionFactory\",\r\n \"jmsConnAlias\": \"JMS_CONN\",\r\n \"user\": \"user\",\r\n \"password\": \"password\"\r\n }\r\n}" + } + }, + "401" : { + "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." + }, + "400" : { + "description" : "Tis status code indicates the request payload is not correct and corresponding error details can be seen in the response body", + "examples" : { + "application/json" : "" + } + } + }, + "security" : [ { + "Basic" : [ ] + } ] + } + }, + "/is/webServiceEndpoints/{webserviceEndpointId}" : { + "get" : { + "description" : "The method retrieves the specified Webservice endpoint in API Gateway.", + "operationId" : "getWebserviceEndpoint", + "consumes" : [ "application/json" ], + "produces" : [ "application/json" ], + "parameters" : [ { + "name" : "webserviceEndpointId", + "in" : "path", + "description" : "This path parameter is used to specify the Webservice endpoint id which Webservice endpoint needs to be retrived.", + "required" : true, + "type" : "string", + "x-example" : "sampleEndpoint" + } ], + "responses" : { + "200" : { + "description" : "This status code indicates that the specified Webservice endpoint is successfully retrieved.", + "schema" : { + "$ref" : "#/definitions/WebserviceEndpointAlias" + }, + "examples" : { + "application/json" : "{\r\n \"WebserviceEndpointAlias\": {\r\n \"id\": \"c001\",\r\n \"alias\": \"c001\",\r\n \"description\": \"des\",\r\n \"aliasType\": \"CONSUMER\",\r\n \"transportType\": \"JMS\",\r\n \"keyStoreAlias\": \"DEFAULT_IS_KEYSTORE\",\r\n \"keyAlias\": \"ssos\",\r\n \"trustStoreAlias\": \"DEFAULT_IS_TRUSTSTORE\",\r\n \"timestampPrecisionInMillis\": \"false\",\r\n \"timestampTimeToLive\": \"123\",\r\n \"timestampMaximumSkew\": \"1234\",\r\n \"executeACL\": \"Default\",\r\n \"jmsAliasType\": \"JMS\",\r\n \"jndiProvAlias\": \"\",\r\n \"connFactoryName\": \"qpidConnectionFactory\",\r\n \"jmsConnAlias\": \"JMS_CONN\",\r\n \"user\": \"user\",\r\n \"password\": \"password\"\r\n }\r\n}" + } + }, + "401" : { + "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." + }, + "404" : { + "description" : "This status code indicates that the Webservice endpoint id specified is not found in API Gateway", + "examples" : { + "application/json" : "{\r\n \"errorDetails\": \" Exception occured : The Webservice endpoint object with the given ID: Consumer123 couldn't found\"\r\n}" + } + } + }, + "security" : [ { + "Basic" : [ ] + } ] + }, + "delete" : { + "description" : "This delete request will delete the Webservice endpoint based on the Webservice endpoint id which is specified in path", + "operationId" : "deleteWebserviceEndpoint", + "consumes" : [ "application/json" ], + "produces" : [ "application/json" ], + "parameters" : [ { + "name" : "webserviceEndpointId", + "in" : "path", + "description" : "This path parameter is used to specify the Webservice endpoint id for which Webservice endpoint needs to deleted.", + "required" : true, + "type" : "string", + "x-example" : "sampleEndpoint" + } ], + "responses" : { + "200" : { + "description" : "" + }, + "401" : { + "description" : "This status code indicates either user didn't provide any user credential or user doesn't have API Gateway Administrator or API Gateway provider access to delete the assertion." + }, + "404" : { + "description" : "This status code indicates that the corresponding Webservice endpoint id does not exist", + "examples" : { + "application/json" : "{\r\n \"errorDetails\": \" Unable to find the resource: 685e99ee-0e1b-4afa-8ff3-4322cf2965661\"\r\n}" + } + } + }, + "security" : [ { + "Basic" : [ ] + } ] + } + }, + "/configurations/loadBalancer" : { + "get" : { + "description" : "The method retrieves the details of the Load Balancer configuration in API Gateway.", + "operationId" : "getLoadBalancers", + "consumes" : [ "application/json" ], + "produces" : [ "application/json" ], + "parameters" : [ ], + "responses" : { + "200" : { + "description" : "This status code indicates that the Load Balancer configurations are retrieved successfully. ", + "schema" : { + "$ref" : "#/definitions/LoadBalancer" + }, + "examples" : { + "application/json" : "{\r\n \"webAppUrl\": \"\",\r\n \"httpUrls\": [\r\n \"http://localhost:8080\"\r\n ],\r\n \"httpsUrls\": [\r\n \"https://localhost:443\"\r\n ],\r\n \"websocketUrls\": []\r\n}" + } + }, + "400" : { + "description" : "This status code indicates that the loadBalancer not mentioned in API access uri path.", + "examples" : { + "application/json" : "{\r\n \"errorDetails\": \"Missing mandatory field configId in request.\"\r\n}" + } + }, + "401" : { + "description" : "This status code indicates that the user is not a valid API Gateway user for retrieving the Load Balancer configuration." + } + }, + "security" : [ { + "Basic" : [ ] + } ] + }, + "put" : { + "description" : "The method is used to update the details of the load Balancer configuration in API Gateway.", + "operationId" : "saveLoadBalancers", + "consumes" : [ "application/json" ], + "produces" : [ "application/json" ], + "parameters" : [ { + "in" : "body", + "name" : "body", + "description" : "", + "required" : true, + "schema" : { + "$ref" : "#/definitions/LoadBalancer" + }, + "x-examples" : { + "application/json" : "{\r\n \"webAppUrl\": \"\",\r\n \"httpUrls\": [\r\n \"http://localhost:8080\"\r\n ],\r\n \"httpsUrls\": [\r\n \"https://localhost:443\"\r\n ],\r\n \"websocketUrls\": []\r\n}" + } + } ], + "responses" : { + "200" : { + "description" : "This status code indicates that the Load Balancer configuration has been successfully updated in API Gateway, and the updated configuration is available in the response body.", + "schema" : { + "$ref" : "#/definitions/LoadBalancer" + }, + "examples" : { + "application/json" : "{\r\n \"webAppUrl\": \"\",\r\n \"httpUrls\": [\r\n \"http://localhost:8080\"\r\n ],\r\n \"httpsUrls\": [\r\n \"https://localhost:443\"\r\n ],\r\n \"websocketUrls\": []\r\n}" + } + }, + "401" : { + "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have \"Manage General Administration\" functional privilege to access this API." + }, + "400" : { + "description" : "This status code indicates that the request body is invalid.", + "examples" : { + "application/json" : "{\r\n\"errorDetails\": \" Invalid property key found in request payload.\"\r\n}" + } + } + }, + "security" : [ { + "Basic" : [ ] + } ] + } + }, + "/configurations/whiteListedIPs" : { + "get" : { + "description" : "The method retrieves the details of the whitelisted IPs configuration in API Gateway.", + "operationId" : "getWhiteListedIPs", + "consumes" : [ "application/json" ], + "produces" : [ "application/json" ], + "parameters" : [ ], + "responses" : { + "200" : { + "description" : "This status code indicates that the whitelistedIPs configurations are retrieved successfully.", + "schema" : { + "$ref" : "#/definitions/WhiteListedIPs" + }, + "examples" : { + "application/json" : "{\r\n \"privateIPs\": [\r\n \"127.0.0.1\",\r\n \"10.0.0.0/8\",\r\n \"172.16.0.0/12\",\r\n \"192.168.0.0/16\"\r\n ]\r\n}" + } + }, + "401" : { + "description" : "This status code indicates that the user is not a valid API Gateway user for retrieving the whitelistedIPs configuration." + } + }, + "security" : [ { + "Basic" : [ ] + } ] + }, + "put" : { + "description" : "The method is used to update the details of the whitelisted IPs configuration in API Gateway.", + "operationId" : "saveWhitelistedIPs", + "consumes" : [ "application/json" ], + "produces" : [ "application/json" ], + "parameters" : [ { + "in" : "body", + "name" : "body", + "description" : "", + "required" : true, + "schema" : { + "$ref" : "#/definitions/WhiteListedIPs" + }, + "x-examples" : { + "application/json" : "{\r\n \"privateIPs\": [\r\n \"127.0.0.1\",\r\n \"10.0.0.0/8\",\r\n \"172.16.0.0/12\",\r\n \"192.168.0.0/16\"\r\n ]\r\n}" + } + } ], + "responses" : { + "200" : { + "description" : "This status code indicates that the whitelisted IPs configuration has been successfully updated in API Gateway, and the updated configuration is available in the response body.", + "schema" : { + "$ref" : "#/definitions/WhiteListedIPs" + }, + "examples" : { + "application/json" : "{\r\n \"privateIPs\": [\r\n \"127.0.0.1\",\r\n \"10.0.0.0/8\",\r\n \"172.16.0.0/12\",\r\n \"192.168.0.0/16\"\r\n ]\r\n}" + } + }, + "401" : { + "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have \"Manage General Administration\" functional privilege to access this API." + }, + "400" : { + "description" : "This status code indicates that the request body is invalid." + } + }, + "security" : [ { + "Basic" : [ ] + } ] + } + }, + "/configurations/apiCallBackSettings" : { + "get" : { + "description" : "This method retrieves the API callback processor settings from API Gateway.", + "operationId" : "getAPICallbackProcessorSettings", + "consumes" : [ "application/json" ], + "produces" : [ "application/json" ], + "parameters" : [ ], + "responses" : { + "200" : { + "description" : "This status code indicates that the API callback processor settings is successfully retrieved from API Gateway.", + "schema" : { + "$ref" : "#/definitions/CallbackProcessorSettings" + }, + "examples" : { + "application/json" : "{\r\n \"configuration\": {\r\n \"processCallbackRequests\": true,\r\n \"allowCallBackRequestsHTTPsAccessOnly\": true,\r\n \"allowCallbackRequestAccessToAllowedIPs\": false,\r\n \"allowedIPs\": []\r\n }\r\n}" + } + }, + "400" : { + "description" : "This status code indicates that the provided configuration id is invalid.", + "examples" : { + "application/json" : "{\r\n \"errorDetails\": \" Invalid configId value in request. configId: apiCallBackSettings.\"\r\n}" + } + }, + "401" : { + "description" : "This status code indicates that the user did not provide any user credential or the user is not authorized to retrieve API callback processor settings." + } + }, + "security" : [ { + "Basic" : [ ] + } ] + }, + "put" : { + "description" : "This method updates or creates API callback processor settings in API Gateway. The user should have Manage general administration configurations privilege to update the API callback processor settings.", + "operationId" : "saveAPICallbackProcessorSettings", + "consumes" : [ "application/json" ], + "produces" : [ "application/json" ], + "parameters" : [ { + "in" : "body", + "name" : "body", + "description" : "", + "required" : true, + "schema" : { + "$ref" : "#/definitions/CallbackProcessorSettings" + }, + "x-examples" : { + "application/json" : "{\r\n \"configuration\": {\r\n \"processCallbackRequests\": true,\r\n \"allowCallBackRequestsHTTPsAccessOnly\": true,\r\n \"allowCallbackRequestAccessToAllowedIPs\": false,\r\n \"allowedIPs\": []\r\n }\r\n}" + } + } ], + "responses" : { + "200" : { + "description" : "This status code indicates that the API callback processor settings has been successfully updated in API Gateway, and the updated list of API callback processor settings is available in the response body.", + "schema" : { + "$ref" : "#/definitions/CallbackProcessorSettings" + }, + "examples" : { + "application/json" : "{\r\n \"configuration\": {\r\n \"processCallbackRequests\": true,\r\n \"allowCallBackRequestsHTTPsAccessOnly\": true,\r\n \"allowCallbackRequestAccessToAllowedIPs\": false,\r\n \"allowedIPs\": []\r\n }\r\n}" + } + }, + "401" : { + "description" : "This status code indicates that the user did not provide any user credential or the user is not authorized to update API callback processor settings." + }, + "400" : { + "description" : "This status code indicates that the the user sends an empty or invalid JSON payload." + } + }, + "security" : [ { + "Basic" : [ ] + } ] + } + }, + "/configurations/settings" : { + "get" : { + "description" : "This method retrieves the list of extended settings and watt properties from API Gateway.", + "operationId" : "getSettings", + "consumes" : [ "application/json" ], + "produces" : [ "application/json" ], + "parameters" : [ ], + "responses" : { + "200" : { + "description" : "This status code indicates that the list of extended settings and watt properties are successfully retrieved from API Gateway.", + "schema" : { + "$ref" : "#/definitions/ExtendedSettingsOutput" + }, + "examples" : { + "application/json" : "{\r\n \"preferredSettings\": {\r\n \"wattKeys\": {},\r\n \"extendedKeys\": {\r\n \"allowExceedMaxWindowSize\": \"true\"\r\n }\r\n },\r\n \"allSettings\": {\r\n \"wattKeys\": {\r\n \"watt.server.http.allowOptions\": \"true\",\r\n \"watt.server.coder.responseAsXML\": \"false\",\r\n \"watt.server.SoapRPC.checkHeaders\": \"true\",\r\n \"watt.server.ws.responseTNS.from.request\": \"false\",\r\n \"watt.server.brokerTransport.dur\": \"60\"\r\n },\r\n \"extendedKeys\": {\r\n \"allowExceedMaxWindowSize\": \"true\",\r\n \"saveAuditlogsWithPayload\": \"true\",\r\n \"apig_schemaValidationPoolSize\": \"10\",\r\n \"apig_MENConfiguration_tickInterval\": \"60\",\r\n \"pg_JWT_isHTTPS\": \"true\"\r\n\t}\r\n }\r\n}" + } + }, + "400" : { + "description" : "This status code indicates that the provided configuration id is invalid." + }, + "401" : { + "description" : "This status code indicates that the user did not provide any user credential or the user is not authorized to retrieve extended and watt settings." + } + }, + "security" : [ { + "Basic" : [ ] + } ] + }, + "put" : { + "description" : "This method updates or creates a list of extended settings and watt properties in API Gateway. The user should have an API Gateway administrator access to update thse settings. The user needs to send only the modified settings i.e, 'preferredSettings', in the payload.", + "operationId" : "saveSettings", + "consumes" : [ "application/json" ], + "produces" : [ "application/json" ], + "parameters" : [ { + "in" : "body", + "name" : "body", + "description" : "", + "required" : true, + "schema" : { + "$ref" : "#/definitions/ExtendedSettingsInput" + }, + "x-examples" : { + "application/json" : "{\r\n\t\"preferredSettings\": {\r\n\t\t\"wattKeys\": {\r\n\t\t\"watt.net.timeout\": \"300\",\r\n\t\t\"watt.server.oauth.authCode.expirySeconds\": \"600\"\r\n\t},\r\n\t\"extendedKeys\": {\r\n\t\t\"pg_oauth2_isHTTPS\": \"false\"\r\n\t}\r\n\t}}" + } + } ], + "responses" : { + "200" : { + "description" : "This status code indicates that the list of extended settings and watt properties has been successfully updated in API Gateway.", + "schema" : { + "$ref" : "#/definitions/ExtendedSettingsOutput" + }, + "examples" : { + "application/json" : "{\r\n \"preferredSettings\": {\r\n \"wattKeys\": {},\r\n \"extendedKeys\": {\r\n \"allowExceedMaxWindowSize\": \"true\"\r\n }\r\n },\r\n \"allSettings\": {\r\n \"wattKeys\": {\r\n \"watt.server.http.allowOptions\": \"true\",\r\n \"watt.server.coder.responseAsXML\": \"false\",\r\n \"watt.server.SoapRPC.checkHeaders\": \"true\",\r\n \"watt.server.ws.responseTNS.from.request\": \"false\",\r\n \"watt.server.brokerTransport.dur\": \"60\"\r\n },\r\n \"extendedKeys\": {\r\n \"allowExceedMaxWindowSize\": \"true\",\r\n \"saveAuditlogsWithPayload\": \"true\",\r\n \"apig_schemaValidationPoolSize\": \"10\",\r\n \"apig_MENConfiguration_tickInterval\": \"60\",\r\n \"pg_JWT_isHTTPS\": \"true\"\r\n\t}\r\n }\r\n}" + } + }, + "401" : { + "description" : "This status code indicates that the user did not provide any user credential or the user is not authorized to update extended and watt settings." + }, + "400" : { + "description" : "This status code indicates that the the user sends an empty or invalid JSON payload." + } + }, + "security" : [ { + "Basic" : [ ] + } ] + } + }, + "/configurations/errorProcessing" : { + "get" : { + "description" : "This REST method is used to get the configured error template and the value of the property - sendNativeProviderFault,which enables the server to forward the native error as it is.", + "operationId" : "getErrorProcessingDetails", + "consumes" : [ "application/json" ], + "produces" : [ "application/json" ], + "parameters" : [ ], + "responses" : { + "200" : { + "description" : "This response returns the current fault message templates and the native fault configuration", + "schema" : { + "$ref" : "#/definitions/ErrorProcessing" + }, + "examples" : { + "application/json" : "{\r\n \"sendNativeProviderFault\": \"false\",\r\n \"defaultErrorMessage\": \"API Gateway encountered an error. Error Message: $ERROR_MESSAGE. Request Details: Service - $SERVICE, Operation - $OPERATION, Invocation Time:$TIME, Date:$DATE, Client IP - $CLIENT_IP, User - $USER and Application:$CONSUMER_APPLICATION.\",\r\n \"fallbackErrorMessage\": \"API Gateway encountered an error. Error Message: $ERROR_MESSAGE. Request Details: Service - $SERVICE, Operation - $OPERATION, Invocation Time:$TIME, Date:$DATE, Client IP - $CLIENT_IP, User - $USER and Application:$CONSUMER_APPLICATION\"\r\n}" + } + }, + "400" : { + "description" : "This status code indicates the request payload is not correct and corresponding error details can be seen in the response body" + }, + "401" : { + "description" : "This response indicates that invalid credentials have been provided for the request." + } + }, + "security" : [ { + "Basic" : [ ] + } ] + }, + "put" : { + "description" : "This REST method is used to update the default error template with any custom templates and the value of the property - sendNativeProviderFault.", + "operationId" : "saveErrorProcessingDetails", + "consumes" : [ "application/json" ], + "produces" : [ "application/json" ], + "parameters" : [ { + "in" : "body", + "name" : "body", + "description" : "", + "required" : true, + "schema" : { + "$ref" : "#/definitions/ErrorProcessing" + }, + "x-examples" : { + "application/json" : "{\r\n \"sendNativeProviderFault\": \"false\",\r\n \"defaultErrorMessage\": \"API Gateway encountered an error. Error Message: $ERROR_MESSAGE. Request Details: Service - $SERVICE, Operation - $OPERATION, Invocation Time:$TIME, Date:$DATE, Client IP - $CLIENT_IP, User - $USER and Application:$CONSUMER_APPLICATION.\",\r\n \"fallbackErrorMessage\": \"API Gateway encountered an error. Error Message: $ERROR_MESSAGE. Request Details: Service - $SERVICE, Operation - $OPERATION, Invocation Time:$TIME, Date:$DATE, Client IP - $CLIENT_IP, User - $USER and Application:$CONSUMER_APPLICATION\"\r\n}" + } + } ], + "responses" : { + "200" : { + "description" : "This status code indicates that API Gateway has successfully updated the API Fault template and the updated template can be found in the response body", + "schema" : { + "$ref" : "#/definitions/ErrorProcessing" + }, + "examples" : { + "application/json" : "{\r\n \"sendNativeProviderFault\": \"false\",\r\n \"defaultErrorMessage\": \"API Gateway encountered an error. Error Message: $ERROR_MESSAGE. Request Details: Service - $SERVICE, Operation - $OPERATION, Invocation Time:$TIME, Date:$DATE, Client IP - $CLIENT_IP, User - $USER and Application:$CONSUMER_APPLICATION.\",\r\n \"fallbackErrorMessage\": \"API Gateway encountered an error. Error Message: $ERROR_MESSAGE. Request Details: Service - $SERVICE, Operation - $OPERATION, Invocation Time:$TIME, Date:$DATE, Client IP - $CLIENT_IP, User - $USER and Application:$CONSUMER_APPLICATION\"\r\n}" + } + }, + "401" : { + "description" : "This response indicates that invalid credentials have been provided for the request." + }, + "400" : { + "description" : "This status code indicates the request payload is not correct and corresponding error details can be seen in the response body" + } + }, + "security" : [ { + "Basic" : [ ] + } ] + } + }, + "/configurations/keystore" : { + "get" : { + "description" : "The method retrieves the details of the default keystore, truststore and alias settings in API Gateway. You might want to configure API Gateway to refer to a default keystore, truststore, or both, before deploying any SOAP message flows that require signature, encryption, X.509 authentication, and so on, as configured in the Inbound Authentication - Message policy. The default keystore and truststore are that you want API Gateway to use for the incoming secured messages", + "operationId" : "getKeyStoreTrustore", + "consumes" : [ "application/json" ], + "produces" : [ "application/json" ], + "parameters" : [ ], + "responses" : { + "200" : { + "description" : "This status code indicates that the default keystore, truststore and alias configurations are retrieved successfully. ", + "schema" : { + "$ref" : "#/definitions/KeystoreTruststore" + }, + "examples" : { + "application/json" : "{\r\n\t\"keystoreName\": \"DEFAULT_IS_KEYSTORE\",\r\n\t\"signingAlias\": \"ssos\",\r\n\t\"truststoreName\": \"DEFAULT_IS_TRUSTSTORE\"\r\n}" + } + }, + "400" : { + "description" : "This status code indicates that the keystore not mentioned in API access uri path.", + "examples" : { + "application/json" : "{\r\n \"errorDetails\": \"Missing mandatory field configId in request.\"\r\n}" + } + }, + "401" : { + "description" : "This status code indicates that the user is not a valid API Gateway user for retrieving this configuration." + } + }, + "security" : [ { + "Basic" : [ ] + } ] + }, + "put" : { + "description" : "The method is used to update the details of the default keystore, truststore and alias configuration in API Gateway.", + "operationId" : "saveKeystoreTruststore", + "consumes" : [ "application/json" ], + "produces" : [ "application/json" ], + "parameters" : [ { + "in" : "body", + "name" : "body", + "description" : "", + "required" : true, + "schema" : { + "$ref" : "#/definitions/KeystoreTruststore" + }, + "x-examples" : { + "application/json" : "{\r\n\t\"keystoreName\": \"DEFAULT_IS_KEYSTORE\",\r\n\t\"signingAlias\": \"ssos\",\r\n\t\"truststoreName\": \"DEFAULT_IS_TRUSTSTORE\"\r\n}" + } + } ], + "responses" : { + "200" : { + "description" : "This status code indicates that the default keystore, truststore and alias configuration has been successfully updated in API Gateway, and the updated configuration is available in the response body.", + "schema" : { + "$ref" : "#/definitions/KeystoreTruststore" + }, + "examples" : { + "application/json" : "{\r\n \"configId\": \"keystore\",\r\n \"keystoreName\": \"DEFAULT_IS_KEYSTORE\",\r\n \"signingAlias\": \"ssos\",\r\n \"truststoreName\": \"DEFAULT_IS_TRUSTSTORE\"\r\n}" + } + }, + "401" : { + "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have \"Manage security configurations\" functional privilege to access this API." + }, + "400" : { + "description" : "This status code indicates that the request body is invalid.", + "examples" : { + "application/json" : "{\r\n\"errorDetails\": \" Invalid property key found in request payload.\"\r\n}" + } + } + }, + "security" : [ { + "Basic" : [ ] + } ] + } + }, + "/configurations/gatewayDestinationConfig" : { + "get" : { + "description" : "The method retrieves the details of the API Gateway destination. API Gateway can publish runtime events(example: policy violation, log invocation, error events etc), design time events (example: audit log events) and metrics data. By default, error events, lifecycle events, policy violation event, audit logs and performance data are published to API Gateway.", + "operationId" : "getGatewayAsDestination", + "consumes" : [ "application/json" ], + "produces" : [ "application/json" ], + "parameters" : [ ], + "responses" : { + "200" : { + "description" : "This status code indicates that the API Gateway destination configurations are retrieved successfully. SendErrorEvent indicates whether API Gateway has to send error events to API Gateway destination. SendLifecycleEvent indicates whether API Gateway has to send lifecycle events to API Gateway destination. SendPolicyViolationEvent indicates whether API Gateway has to send policy violation events to API Gateway destination. SendPerformanceMetrics indicates whether API Gateway has to send performance metrics to API Gateway destination. MetricsPublishInterval indicates the interval at which the performance metrics will be published (value has to be between 1-60), default being 60. sendAuditlogAliasManagementEvent indicates whether API Gateway has to send Alias Management related audit logs to API Gateway destination. sendAuditlogPackageManagementEvent indicates whether API Gateway has to send Package Management related audit logs to API Gateway destination. sendAuditlogRuntimeDataManagementEvent indicates whether API Gateway has to send RuntimeData Management related audit logs to API Gateway destination. sendAuditlogPolicyManagementEvent indicates whether API Gateway has to send Policy Management related audit logs to API Gateway destination. sendAuditlogPlanManagementEvent indicates whether API Gateway has to send Plan Management related audit logs to API Gateway destination. sendAuditlogApprovalManagementEvent indicates whether API Gateway has to send Approval Management related audit logs to API Gateway destination. sendAuditlogUserManagementEvent indicates whether API Gateway has to send User Management related audit logs to API Gateway destination. sendAuditlogApplicationManagementEvent indicates whether API Gateway has to send Application Management related audit logs to API Gateway destination. sendAuditlogAdministrationEvent indicates whether API Gateway has to send Administration related audit logs to API Gateway destination. sendAuditlogGroupManagementEvent indicates whether API Gateway has to send Group Management related audit logs to API Gateway destination. sendAuditlogAccessProfileManagementEvent indicates whether API Gateway has to send Access Profile Management related audit logs to API Gateway destination. sendAuditlogAPIManagementEvent indicates whether API Gateway has to send API Management related audit logs to API Gateway destination. sendAuditlogPromotionManagementEvent indicates whether API Gateway has to send Promotion Management related audit logs to API Gateway destination.", + "schema" : { + "$ref" : "#/definitions/Destination" + }, + "examples" : { + "application/json" : "{\r\n \"sendAuditlogAliasManagementEvent\": \"true\",\r\n \"sendLifecycleEvent\": \"true\",\r\n \"sendAuditlogPackageManagementEvent\": \"true\",\r\n \"sendAuditlogRuntimeDataManagementEvent\": \"true\",\r\n \"sendAuditlogPolicyManagementEvent\": \"true\",\r\n \"sendAuditlogPlanManagementEvent\": \"true\",\r\n \"sendAuditlogApprovalManagementEvent\": \"true\",\r\n \"sendAuditlogUserManagementEvent\": \"true\",\r\n \"sendPerformanceMetrics\": \"true\",\r\n \"sendAuditlogApplicationManagementEvent\": \"true\",\r\n \"sendAuditlogAdministrationEvent\": \"true\",\r\n \"sendPolicyViolationEvent\": \"true\",\r\n \"sendErrorEvent\": \"true\",\r\n \"sendAuditlogGroupManagementEvent\": \"true\",\r\n \"metricsPublishInterval\": \"60\",\r\n \"sendAuditlogAccessProfileManagementEvent\": \"true\",\r\n \"sendAuditlogAPIManagementEvent\": \"true\",\r\n \"sendAuditlogPromotionManagementEvent\": \"true\"\r\n}" + } + }, + "400" : { + "description" : "This status code indicates that the provided configuration id is invalid.", + "examples" : { + "application/json" : "{\r\n \"errorDetails\": \" Invalid configId value in request. configId: gatewayDestinationConfigg.\"\r\n}" + } + }, + "401" : { + "description" : "This status code indicates that the user is not a valid API Gateway user for retrieving the API Gateway destination configuration." + } + }, + "security" : [ { + "Basic" : [ ] + } ] + }, + "put" : { + "description" : "The method is used to update the details of the API Gateway destination in API Gateway.", + "operationId" : "saveGatewayAsDestination", + "consumes" : [ "application/json" ], + "produces" : [ "application/json" ], + "parameters" : [ { + "in" : "body", + "name" : "body", + "description" : "", + "required" : true, + "schema" : { + "$ref" : "#/definitions/Destination" + }, + "x-examples" : { + "application/json" : "{\r\n \"sendAuditlogAliasManagementEvent\": \"true\",\r\n \"sendLifecycleEvent\": \"true\",\r\n \"sendAuditlogPackageManagementEvent\": \"true\",\r\n \"sendAuditlogRuntimeDataManagementEvent\": \"true\",\r\n \"sendAuditlogPolicyManagementEvent\": \"true\",\r\n \"sendAuditlogPlanManagementEvent\": \"true\",\r\n \"sendAuditlogApprovalManagementEvent\": \"true\",\r\n \"sendAuditlogUserManagementEvent\": \"true\",\r\n \"sendPerformanceMetrics\": \"true\",\r\n \"sendAuditlogApplicationManagementEvent\": \"true\",\r\n \"sendAuditlogAdministrationEvent\": \"true\",\r\n \"sendPolicyViolationEvent\": \"true\",\r\n \"sendErrorEvent\": \"true\",\r\n \"sendAuditlogGroupManagementEvent\": \"true\",\r\n \"metricsPublishInterval\": \"60\",\r\n \"sendAuditlogAccessProfileManagementEvent\": \"true\",\r\n \"sendAuditlogAPIManagementEvent\": \"true\",\r\n \"sendAuditlogPromotionManagementEvent\": \"true\"\r\n}" + } + } ], + "responses" : { + "200" : { + "description" : "This status code indicates that the API Gateway destination configuration has been successfully updated in API Gateway, and the updated configuration is available in the response body.", + "schema" : { + "$ref" : "#/definitions/Destination" + }, + "examples" : { + "application/json" : "{\r\n \"sendAuditlogAliasManagementEvent\": \"true\",\r\n \"sendLifecycleEvent\": \"true\",\r\n \"sendAuditlogPackageManagementEvent\": \"true\",\r\n \"sendAuditlogRuntimeDataManagementEvent\": \"true\",\r\n \"sendAuditlogPolicyManagementEvent\": \"true\",\r\n \"sendAuditlogPlanManagementEvent\": \"true\",\r\n \"sendAuditlogApprovalManagementEvent\": \"true\",\r\n \"sendAuditlogUserManagementEvent\": \"true\",\r\n \"sendPerformanceMetrics\": \"true\",\r\n \"sendAuditlogApplicationManagementEvent\": \"true\",\r\n \"sendAuditlogAdministrationEvent\": \"true\",\r\n \"sendPolicyViolationEvent\": \"true\",\r\n \"sendErrorEvent\": \"true\",\r\n \"sendAuditlogGroupManagementEvent\": \"true\",\r\n \"metricsPublishInterval\": \"60\",\r\n \"sendAuditlogAccessProfileManagementEvent\": \"true\",\r\n \"sendAuditlogAPIManagementEvent\": \"true\",\r\n \"sendAuditlogPromotionManagementEvent\": \"true\"\r\n}" + } + }, + "405" : { + "description" : "This status code indicates that the specified HTTP method is not allowed for the requested destination configuration in API Gateway.", + "examples" : { + "application/json" : "{\r\n\t\"errorDetails\": \" Unable to process the PUT request for API Gateway destination configuration. Error occurred while processing the payload. Error Message: Method: PUT is not allowed on resource: gatewayDestinationConfig\"\r\n}" + } + }, + "401" : { + "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have \"Manage Destination Administration\" functional privilege to access this API." + }, + "400" : { + "description" : "This status code indicates that the request body is invalid.", + "examples" : { + "application/json" : "{\r\n\"errorDetails\": \" Invalid property key found in request payload.\"\r\n}" + } + } + }, + "security" : [ { + "Basic" : [ ] + } ] + } + }, + "/configurations/auditlogDestinationConfig" : { + "get" : { + "description" : "The method retrieves the details of the Transaction Logger destination in API Gateway. Transaction Logger captures the API runtime invocations performed in API Gateway. The transaction logger data is written to a file or a database based on the configurations. Transactions events are written to the transaction logger only when the Transaction Logger is selected as a destination in Log Invocation Policy.", + "operationId" : "getAuditLogAsDestination", + "consumes" : [ "application/json" ], + "produces" : [ "application/json" ], + "parameters" : [ ], + "responses" : { + "200" : { + "description" : "This status code indicates that the Transaction Logger destination configurations are retrieved successfully.", + "schema" : { + "$ref" : "#/definitions/AuditLogDestination" + }, + "examples" : { + "application/json" : "{\r\n \"name\": \"API Gateway Transaction Logger\",\r\n \"enabled\": \"false\",\r\n \"mode\": \"synchronous\",\r\n \"guaranteed\": \"false\",\r\n \"destination\": \"file\",\r\n \"maximumQueueSize\": \"100000\",\r\n \"maximumRetries\": \"3\",\r\n \"waitBetweenRetries\": \"5\"\r\n}" + } + }, + "400" : { + "description" : "This status code indicates that the provided configuration id is invalid.", + "examples" : { + "application/json" : "{\r\n \"errorDetails\": \" Invalid configId value in request. configId: auditlogDestinationConfigg.\"\r\n}" + } + }, + "401" : { + "description" : "This status code indicates that the user is not a valid API Gateway user for retrieving the Transaction Logger destination configuration." + } + }, + "security" : [ { + "Basic" : [ ] + } ] + }, + "put" : { + "description" : "The method is used to update the details of the Transaction Logger destination in API Gateway.", + "operationId" : "saveAuditLogAsDestination", + "consumes" : [ "application/json" ], + "produces" : [ "application/json" ], + "parameters" : [ { + "in" : "body", + "name" : "body", + "description" : "", + "required" : true, + "schema" : { + "$ref" : "#/definitions/AuditLogDestination" + }, + "x-examples" : { + "application/json" : "{\r\n \"name\": \"API Gateway Transaction Logger\",\r\n \"enabled\": \"false\",\r\n \"mode\": \"synchronous\",\r\n \"guaranteed\": \"false\",\r\n \"destination\": \"file\",\r\n \"maximumQueueSize\": \"100000\",\r\n \"maximumRetries\": \"3\",\r\n \"waitBetweenRetries\": \"5\"\r\n}" + } + } ], + "responses" : { + "200" : { + "description" : "This status code indicates that the Transaction Logger destination configuration has been successfully updated in API Gateway, and the updated configuration is available in the response body.", + "schema" : { + "$ref" : "#/definitions/AuditLogDestination" + }, + "examples" : { + "application/json" : "{\r\n \"name\": \"API Gateway Transaction Logger\",\r\n \"enabled\": \"false\",\r\n \"mode\": \"synchronous\",\r\n \"guaranteed\": \"false\",\r\n \"destination\": \"file\",\r\n \"maximumQueueSize\": \"100000\",\r\n \"maximumRetries\": \"3\",\r\n \"waitBetweenRetries\": \"5\"\r\n}" + } + }, + "401" : { + "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have \"Manage Destination Administration\" functional privilege to access this API." + }, + "405" : { + "description" : "This status code indicates that the specified HTTP method is not allowed for the requested destination configuration in API Gateway.", + "examples" : { + "application/json" : "{\r\n\t\"errorDetails\": \" Unable to process the PUT request for Audit Log destination configuration. Error occurred while processing the payload. Error Message: Method: PUT is not allowed on resource: auditlogDestinationConfig\"\r\n}" + } + }, + "400" : { + "description" : "This status code indicates that the request body is invalid.", + "examples" : { + "application/json" : "{\r\n\"errorDetails\": \" Invalid property key found in request payload.\"\r\n}" + } + } + }, + "security" : [ { + "Basic" : [ ] + } ] + } + }, + "/configurations/centraSiteDestinationCommunicationConfig" : { + "get" : { + "description" : "The method retrieves the communication details of the CentraSite destination in API Gateway. API Gateway can publish events and metrics to the configured CentraSite destination.", + "operationId" : "getCentraSiteCommunicationAsDestination", + "consumes" : [ "application/json" ], + "produces" : [ "application/json" ], + "parameters" : [ ], + "responses" : { + "200" : { + "description" : "This status code indicates that the Communication details for the CentraSite destination configurations are retrieved successfully.", + "schema" : { + "$ref" : "#/definitions/CSCommunicationDestination" + }, + "examples" : { + "application/json" : "{\r\n \"protocol\": \"tcp\",\r\n \"hostName\": \"localhost\",\r\n \"targetName\": \"cstarget\",\r\n \"UDDIPort\": \"53307\",\r\n \"userName\": \"Admin\",\r\n \"password\": \"***\",\r\n \"gatewayAssetId\": \"334-3443-sd34\"\r\n}" + } + }, + "400" : { + "description" : "This status code indicates that the provided configuration id is invalid.", + "examples" : { + "application/json" : "{\r\n \"errorDetails\": \" Invalid configId value in request. configId: centraSiteDestinationCommunicationConfigg.\"\r\n}" + } + }, + "401" : { + "description" : "This status code indicates that the user is not a valid API Gateway user for retrieving the Communication details for the CentraSite destination." + } + }, + "security" : [ { + "Basic" : [ ] + } ] + }, + "put" : { + "description" : "The method is used to update the Communication details of the CentraSite destination in API Gateway.", + "operationId" : "saveCentraSiteCommunicationAsDestination", + "consumes" : [ "application/json" ], + "produces" : [ "application/json" ], + "parameters" : [ { + "in" : "body", + "name" : "body", + "description" : "", + "required" : true, + "schema" : { + "$ref" : "#/definitions/CSCommunicationDestination" + }, + "x-examples" : { + "application/json" : "{\r\n \"protocol\": \"tcp\",\r\n \"hostName\": \"localhost\",\r\n \"targetName\": \"cstarget\",\r\n \"UDDIPort\": \"53307\",\r\n \"userName\": \"Admin\",\r\n \"password\": \"***\",\r\n \"gatewayAssetId\": \"334-3443-sd34\"\r\n}" + } + } ], + "responses" : { + "200" : { + "description" : "This status code indicates that the CentraSite Communication destination configuration has been successfully updated in API Gateway, and the updated configuration is available in the response body.", + "schema" : { + "$ref" : "#/definitions/CSCommunicationDestination" + }, + "examples" : { + "application/json" : "{\r\n \"protocol\": \"tcp\",\r\n \"hostName\": \"localhost\",\r\n \"targetName\": \"cstarget\",\r\n \"UDDIPort\": \"53307\",\r\n \"userName\": \"Admin\",\r\n \"password\": \"***\",\r\n \"gatewayAssetId\": \"334-3443-sd34\"\r\n}" + } + }, + "401" : { + "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have \"Manage Destination Administration\" functional privilege to access this API." + }, + "405" : { + "description" : "This status code indicates that the specified HTTP method is not allowed for the requested destination configuration in API Gateway.", + "examples" : { + "application/json" : "{\r\n\t\"errorDetails\": \" Unable to process the PUT request for Audit Log destination configuration. Error occurred while processing the payload. Error Message: Method: PUT is not allowed on resource: centraSiteDestinationCommunicationConfigg\"\r\n}" + } + }, + "400" : { + "description" : "This status code indicates that the request body is invalid.", + "examples" : { + "application/json" : "{\r\n\"errorDetails\": \" Invalid property key found in request payload.\"\r\n}" + } + } + }, + "security" : [ { + "Basic" : [ ] + } ] + } + }, + "/configurations/centraSiteDestinationSNMPConfig" : { + "get" : { + "description" : "The method retrieves the SNMP details of the CentraSite destination in API Gateway. API Gateway can publish events and metrics to the configured CentraSite destination.", + "operationId" : "getCentraSiteSNMPAsDestination", + "consumes" : [ "application/json" ], + "produces" : [ "application/json" ], + "parameters" : [ ], + "responses" : { + "200" : { + "description" : "This status code indicates that the CentraSite SNMP destination configurations are retrieved successfully.", + "schema" : { + "$ref" : "#/definitions/CSSNMPDestination" + }, + "examples" : { + "application/json" : "{\r\n \"sendTRAPsToCentrasite\": \"false\",\r\n \"hostName\": \"localhost\",\r\n \"port\": \"8181\",\r\n \"transport\": \"tcp\",\r\n \"userName\": \"Administrator\",\r\n \"authorizationPassword\": \"*****\",\r\n \"authorizationProtocol\": \"MD5\",\r\n \"privacyPassword\": \"*****\",\r\n \"privacyProtocol\": \"DES\"\r\n}" + } + }, + "400" : { + "description" : "This status code indicates that the provided configuration id is invalid.", + "examples" : { + "application/json" : "{\r\n \"errorDetails\": \" Invalid configId value in request. configId: centraSiteDestinationSNMPConfigg.\"\r\n}" + } + }, + "401" : { + "description" : "This status code indicates that the user is not a valid API Gateway user for retrieving the CentraSite SNMP destination configuration." + } + }, + "security" : [ { + "Basic" : [ ] + } ] + }, + "put" : { + "description" : "The method is used to update the details of the CentraSite SNMP destination in API Gateway.", + "operationId" : "saveCentraSiteSNMPAsDestination", + "consumes" : [ "application/json" ], + "produces" : [ "application/json" ], + "parameters" : [ { + "in" : "body", + "name" : "body", + "description" : "", + "required" : true, + "schema" : { + "$ref" : "#/definitions/CSSNMPDestination" + }, + "x-examples" : { + "application/json" : "{\r\n \"sendTRAPsToCentrasite\": \"false\",\r\n \"hostName\": \"localhost\",\r\n \"port\": \"8181\",\r\n \"transport\": \"tcp\",\r\n \"userName\": \"Administrator\",\r\n \"authorizationPassword\": \"*****\",\r\n \"authorizationProtocol\": \"MD5\",\r\n \"privacyPassword\": \"*****\",\r\n \"privacyProtocol\": \"DES\"\r\n}" + } + } ], + "responses" : { + "200" : { + "description" : "This status code indicates that the CentraSite SNMP destination configuration has been successfully updated in API Gateway, and the updated configuration is available in the response body.", + "schema" : { + "$ref" : "#/definitions/CSSNMPDestination" + }, + "examples" : { + "application/json" : "{\r\n \"sendTRAPsToCentrasite\": \"false\",\r\n \"hostName\": \"localhost\",\r\n \"port\": \"8181\",\r\n \"transport\": \"tcp\",\r\n \"userName\": \"Administrator\",\r\n \"authorizationPassword\": \"*****\",\r\n \"authorizationProtocol\": \"MD5\",\r\n \"privacyPassword\": \"*****\",\r\n \"privacyProtocol\": \"DES\"\r\n}" + } + }, + "401" : { + "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have \"Manage Destination Administration\" functional privilege to access this API." + }, + "405" : { + "description" : "This status code indicates that the specified HTTP method is not allowed for the requested destination configuration in API Gateway.", + "examples" : { + "application/json" : "{\r\n\t\"errorDetails\": \" Unable to process the PUT request for Audit Log destination configuration. Error occurred while processing the payload. Error Message: Method: PUT is not allowed on resource: centraSiteDestinationSNMPConfigg\"\r\n}" + } + }, + "400" : { + "description" : "This status code indicates that the request body is invalid.", + "examples" : { + "application/json" : "{\r\n\"errorDetails\": \" Invalid property key found in request payload.\"\r\n}" + } + } + }, + "security" : [ { + "Basic" : [ ] + } ] + } + }, + "/configurations/jdbcDestinationConfig" : { + "get" : { + "description" : "The method retrieves the details of the Database destination in API Gateway. API Gateway can publish runtime events(example: policy violation, log invocation, error events etc), design time events (example: audit log events) and metrics to the configured Database destination.", + "operationId" : "getDatabaseAsDestination", + "consumes" : [ "application/json" ], + "produces" : [ "application/json" ], + "parameters" : [ ], + "responses" : { + "200" : { + "description" : "This status code indicates that the JDBC destination configurations are retrieved successfully. SendErrorEvent indicates whether API Gateway has to send error events to API Gateway destination. SendLifecycleEvent indicates whether API Gateway has to send lifecycle events to API Gateway destination. SendPolicyViolationEvent indicates whether API Gateway has to send policy violation events to API Gateway destination. SendPerformanceMetrics indicates whether API Gateway has to send performance metrics to API Gateway destination. MetricsPublishInterval indicates the interval at which the performance metrics will be published (value has to be between 1-60), default being 60. sendAuditlogAliasManagementEvent indicates whether API Gateway has to send Alias Management related audit logs to API Gateway destination. sendAuditlogPackageManagementEvent indicates whether API Gateway has to send Package Management related audit logs to API Gateway destination. sendAuditlogRuntimeDataManagementEvent indicates whether API Gateway has to send RuntimeData Management related audit logs to API Gateway destination. sendAuditlogPolicyManagementEvent indicates whether API Gateway has to send Policy Management related audit logs to API Gateway destination. sendAuditlogPlanManagementEvent indicates whether API Gateway has to send Plan Management related audit logs to API Gateway destination. sendAuditlogApprovalManagementEvent indicates whether API Gateway has to send Approval Management related audit logs to API Gateway destination. sendAuditlogUserManagementEvent indicates whether API Gateway has to send User Management related audit logs to API Gateway destination. sendAuditlogApplicationManagementEvent indicates whether API Gateway has to send Application Management related audit logs to API Gateway destination. sendAuditlogAdministrationEvent indicates whether API Gateway has to send Administration related audit logs to API Gateway destination. sendAuditlogGroupManagementEvent indicates whether API Gateway has to send Group Management related audit logs to API Gateway destination. sendAuditlogAccessProfileManagementEvent indicates whether API Gateway has to send Access Profile Management related audit logs to API Gateway destination. sendAuditlogAPIManagementEvent indicates whether API Gateway has to send API Management related audit logs to API Gateway destination. sendAuditlogPromotionManagementEvent indicates whether API Gateway has to send Promotion Management related audit logs to API Gateway destination.", + "schema" : { + "$ref" : "#/definitions/Destination" + }, + "examples" : { + "application/json" : "{\r\n \"sendAuditlogAliasManagementEvent\": \"true\",\r\n \"sendLifecycleEvent\": \"true\",\r\n \"sendAuditlogPackageManagementEvent\": \"true\",\r\n \"sendAuditlogRuntimeDataManagementEvent\": \"true\",\r\n \"sendAuditlogPolicyManagementEvent\": \"true\",\r\n \"sendAuditlogPlanManagementEvent\": \"true\",\r\n \"sendAuditlogApprovalManagementEvent\": \"true\",\r\n \"sendAuditlogUserManagementEvent\": \"true\",\r\n \"sendPerformanceMetrics\": \"true\",\r\n \"sendAuditlogApplicationManagementEvent\": \"true\",\r\n \"sendAuditlogAdministrationEvent\": \"true\",\r\n \"sendPolicyViolationEvent\": \"true\",\r\n \"sendErrorEvent\": \"true\",\r\n \"sendAuditlogGroupManagementEvent\": \"true\",\r\n \"metricsPublishInterval\": \"60\",\r\n \"sendAuditlogAccessProfileManagementEvent\": \"true\",\r\n \"sendAuditlogAPIManagementEvent\": \"true\",\r\n \"sendAuditlogPromotionManagementEvent\": \"true\"\r\n}" + } + }, + "400" : { + "description" : "This status code indicates that the provided configuration id is invalid.", + "examples" : { + "application/json" : "{\r\n \"errorDetails\": \" Invalid configId value in request. configId: jdbcDestinationConfigg.\"\r\n}" + } + }, + "401" : { + "description" : "This status code indicates that the user is not a valid API Gateway user for retrieving the Database destination configuration." + } + }, + "security" : [ { + "Basic" : [ ] + } ] + }, + "put" : { + "description" : "The method is used to update the details of the Database destination in API Gateway.", + "operationId" : "saveDatabaseAsDestination", + "consumes" : [ "application/json" ], + "produces" : [ "application/json" ], + "parameters" : [ { + "in" : "body", + "name" : "body", + "description" : "", + "required" : true, + "schema" : { + "$ref" : "#/definitions/Destination" + }, + "x-examples" : { + "application/json" : "{\r\n \"sendAuditlogAliasManagementEvent\": \"true\",\r\n \"sendLifecycleEvent\": \"true\",\r\n \"sendAuditlogPackageManagementEvent\": \"true\",\r\n \"sendAuditlogRuntimeDataManagementEvent\": \"true\",\r\n \"sendAuditlogPolicyManagementEvent\": \"true\",\r\n \"sendAuditlogPlanManagementEvent\": \"true\",\r\n \"sendAuditlogApprovalManagementEvent\": \"true\",\r\n \"sendAuditlogUserManagementEvent\": \"true\",\r\n \"sendPerformanceMetrics\": \"true\",\r\n \"sendAuditlogApplicationManagementEvent\": \"true\",\r\n \"sendAuditlogAdministrationEvent\": \"true\",\r\n \"sendPolicyViolationEvent\": \"true\",\r\n \"sendErrorEvent\": \"true\",\r\n \"sendAuditlogGroupManagementEvent\": \"true\",\r\n \"metricsPublishInterval\": \"60\",\r\n \"sendAuditlogAccessProfileManagementEvent\": \"true\",\r\n \"sendAuditlogAPIManagementEvent\": \"true\",\r\n \"sendAuditlogPromotionManagementEvent\": \"true\"\r\n}" + } + } ], + "responses" : { + "200" : { + "description" : "This status code indicates that the Database destination configuration has been successfully updated in API Gateway, and the updated configuration is available in the response body.", + "schema" : { + "$ref" : "#/definitions/Destination" + }, + "examples" : { + "application/json" : "{\r\n \"sendAuditlogAliasManagementEvent\": \"true\",\r\n \"sendLifecycleEvent\": \"true\",\r\n \"sendAuditlogPackageManagementEvent\": \"true\",\r\n \"sendAuditlogRuntimeDataManagementEvent\": \"true\",\r\n \"sendAuditlogPolicyManagementEvent\": \"true\",\r\n \"sendAuditlogPlanManagementEvent\": \"true\",\r\n \"sendAuditlogApprovalManagementEvent\": \"true\",\r\n \"sendAuditlogUserManagementEvent\": \"true\",\r\n \"sendPerformanceMetrics\": \"true\",\r\n \"sendAuditlogApplicationManagementEvent\": \"true\",\r\n \"sendAuditlogAdministrationEvent\": \"true\",\r\n \"sendPolicyViolationEvent\": \"true\",\r\n \"sendErrorEvent\": \"true\",\r\n \"sendAuditlogGroupManagementEvent\": \"true\",\r\n \"metricsPublishInterval\": \"60\",\r\n \"sendAuditlogAccessProfileManagementEvent\": \"true\",\r\n \"sendAuditlogAPIManagementEvent\": \"true\",\r\n \"sendAuditlogPromotionManagementEvent\": \"true\"\r\n}" + } + }, + "401" : { + "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have \"Manage Destination Administration\" functional privilege to access this API." + }, + "405" : { + "description" : "This status code indicates that the specified HTTP method is not allowed for the requested destination configuration in API Gateway.", + "examples" : { + "application/json" : "{\r\n\t\"errorDetails\": \" Unable to process the PUT request for Database destination configuration. Error occurred while processing the payload. Error Message: Method: PUT is not allowed on resource: jdbcDestinationConfig\"\r\n}" + } + }, + "400" : { + "description" : "This status code indicates that the request body is invalid.", + "examples" : { + "application/json" : "{\r\n\"errorDetails\": \" Invalid property key found in request payload.\"\r\n}" + } + } + }, + "security" : [ { + "Basic" : [ ] + } ] + } + }, + "/configurations/desDestinationConfig" : { + "get" : { + "description" : "The method retrieves the details of the Digital Events destination in API Gateway. Digital Event Services (DES) enables API Gateway to communicate by exchanging digital events. API Gateway can publish runtime events(example: policy violation,log invocation, error events etc), design time events (example: audit log events) and metrics to the configured DES destination.", + "operationId" : "getDigitalEventsAsDestination", + "consumes" : [ "application/json" ], + "produces" : [ "application/json" ], + "parameters" : [ ], + "responses" : { + "200" : { + "description" : "This status code indicates that the DES destination configurations are retrieved successfully. SendErrorEvent indicates whether API Gateway has to send error events to API Gateway destination. SendLifecycleEvent indicates whether API Gateway has to send lifecycle events to API Gateway destination. SendPolicyViolationEvent indicates whether API Gateway has to send policy violation events to API Gateway destination. SendPerformanceMetrics indicates whether API Gateway has to send performance metrics to API Gateway destination. MetricsPublishInterval indicates the interval at which the performance metrics will be published (value has to be between 1-60), default being 60. sendAuditlogAliasManagementEvent indicates whether API Gateway has to send Alias Management related audit logs to API Gateway destination. sendAuditlogPackageManagementEvent indicates whether API Gateway has to send Package Management related audit logs to API Gateway destination. sendAuditlogRuntimeDataManagementEvent indicates whether API Gateway has to send RuntimeData Management related audit logs to API Gateway destination. sendAuditlogPolicyManagementEvent indicates whether API Gateway has to send Policy Management related audit logs to API Gateway destination. sendAuditlogPlanManagementEvent indicates whether API Gateway has to send Plan Management related audit logs to API Gateway destination. sendAuditlogApprovalManagementEvent indicates whether API Gateway has to send Approval Management related audit logs to API Gateway destination. sendAuditlogUserManagementEvent indicates whether API Gateway has to send User Management related audit logs to API Gateway destination. sendAuditlogApplicationManagementEvent indicates whether API Gateway has to send Application Management related audit logs to API Gateway destination. sendAuditlogAdministrationEvent indicates whether API Gateway has to send Administration related audit logs to API Gateway destination. sendAuditlogGroupManagementEvent indicates whether API Gateway has to send Group Management related audit logs to API Gateway destination. sendAuditlogAccessProfileManagementEvent indicates whether API Gateway has to send Access Profile Management related audit logs to API Gateway destination. sendAuditlogAPIManagementEvent indicates whether API Gateway has to send API Management related audit logs to API Gateway destination. sendAuditlogPromotionManagementEvent indicates whether API Gateway has to send Promotion Management related audit logs to API Gateway destination.", + "schema" : { + "$ref" : "#/definitions/Destination" + }, + "examples" : { + "application/json" : "{\r\n \"sendAuditlogAliasManagementEvent\": \"true\",\r\n \"sendLifecycleEvent\": \"true\",\r\n \"sendAuditlogPackageManagementEvent\": \"true\",\r\n \"sendAuditlogRuntimeDataManagementEvent\": \"true\",\r\n \"sendAuditlogPolicyManagementEvent\": \"true\",\r\n \"sendAuditlogPlanManagementEvent\": \"true\",\r\n \"sendAuditlogApprovalManagementEvent\": \"true\",\r\n \"sendAuditlogUserManagementEvent\": \"true\",\r\n \"sendPerformanceMetrics\": \"true\",\r\n \"sendAuditlogApplicationManagementEvent\": \"true\",\r\n \"sendAuditlogAdministrationEvent\": \"true\",\r\n \"sendPolicyViolationEvent\": \"true\",\r\n \"sendErrorEvent\": \"true\",\r\n \"sendAuditlogGroupManagementEvent\": \"true\",\r\n \"metricsPublishInterval\": \"60\",\r\n \"sendAuditlogAccessProfileManagementEvent\": \"true\",\r\n \"sendAuditlogAPIManagementEvent\": \"true\",\r\n \"sendAuditlogPromotionManagementEvent\": \"true\"\r\n}" + } + }, + "400" : { + "description" : "This status code indicates that the provided configuration id is invalid.", + "examples" : { + "application/json" : "{\r\n \"errorDetails\": \" Invalid configId value in request. configId: desDestinationConfigg.\"\r\n}" + } + }, + "401" : { + "description" : "This status code indicates that the user is not a valid API Gateway user for retrieving the Digital Events destination configuration." + } + }, + "security" : [ { + "Basic" : [ ] + } ] + }, + "put" : { + "description" : "The method is used to update the details of the Digital Events destination in API Gateway.", + "operationId" : "saveDigitalEventsAsDestination", + "consumes" : [ "application/json" ], + "produces" : [ "application/json" ], + "parameters" : [ { + "in" : "body", + "name" : "body", + "description" : "", + "required" : true, + "schema" : { + "$ref" : "#/definitions/Destination" + }, + "x-examples" : { + "application/json" : "{\r\n \"sendAuditlogAliasManagementEvent\": \"true\",\r\n \"sendLifecycleEvent\": \"true\",\r\n \"sendAuditlogPackageManagementEvent\": \"true\",\r\n \"sendAuditlogRuntimeDataManagementEvent\": \"true\",\r\n \"sendAuditlogPolicyManagementEvent\": \"true\",\r\n \"sendAuditlogPlanManagementEvent\": \"true\",\r\n \"sendAuditlogApprovalManagementEvent\": \"true\",\r\n \"sendAuditlogUserManagementEvent\": \"true\",\r\n \"sendPerformanceMetrics\": \"true\",\r\n \"sendAuditlogApplicationManagementEvent\": \"true\",\r\n \"sendAuditlogAdministrationEvent\": \"true\",\r\n \"sendPolicyViolationEvent\": \"true\",\r\n \"sendErrorEvent\": \"true\",\r\n \"sendAuditlogGroupManagementEvent\": \"true\",\r\n \"metricsPublishInterval\": \"60\",\r\n \"sendAuditlogAccessProfileManagementEvent\": \"true\",\r\n \"sendAuditlogAPIManagementEvent\": \"true\",\r\n \"sendAuditlogPromotionManagementEvent\": \"true\"\r\n}" + } + } ], + "responses" : { + "200" : { + "description" : "This status code indicates that the Digital Events destination configuration has been successfully updated in API Gateway, and the updated configuration is available in the response body.", + "schema" : { + "$ref" : "#/definitions/Destination" + }, + "examples" : { + "application/json" : "{\r\n \"sendAuditlogAliasManagementEvent\": \"true\",\r\n \"sendLifecycleEvent\": \"true\",\r\n \"sendAuditlogPackageManagementEvent\": \"true\",\r\n \"sendAuditlogRuntimeDataManagementEvent\": \"true\",\r\n \"sendAuditlogPolicyManagementEvent\": \"true\",\r\n \"sendAuditlogPlanManagementEvent\": \"true\",\r\n \"sendAuditlogApprovalManagementEvent\": \"true\",\r\n \"sendAuditlogUserManagementEvent\": \"true\",\r\n \"sendPerformanceMetrics\": \"true\",\r\n \"sendAuditlogApplicationManagementEvent\": \"true\",\r\n \"sendAuditlogAdministrationEvent\": \"true\",\r\n \"sendPolicyViolationEvent\": \"true\",\r\n \"sendErrorEvent\": \"true\",\r\n \"sendAuditlogGroupManagementEvent\": \"true\",\r\n \"metricsPublishInterval\": \"60\",\r\n \"sendAuditlogAccessProfileManagementEvent\": \"true\",\r\n \"sendAuditlogAPIManagementEvent\": \"true\",\r\n \"sendAuditlogPromotionManagementEvent\": \"true\"\r\n}" + } + }, + "401" : { + "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have \"Manage Destination Administration\" functional privilege to access this API." + }, + "405" : { + "description" : "This status code indicates that the specified HTTP method is not allowed for the requested destination configuration in API Gateway.", + "examples" : { + "application/json" : "{\r\n\t\"errorDetails\": \" Unable to process the PUT request for Digital Events destination configuration. Error occurred while processing the payload. Error Message: Method: PUT is not allowed on resource: desDestinationConfig\"\r\n}" + } + }, + "400" : { + "description" : "This status code indicates that the request body is invalid.", + "examples" : { + "application/json" : "{\r\n\"errorDetails\": \" Invalid property key found in request payload.\"\r\n}" + } + } + }, + "security" : [ { + "Basic" : [ ] + } ] + } + }, + "/configurations/elasticsearchDestinationConfig" : { + "get" : { + "description" : "The method retrieves the details of the Elasticsearch destination in API Gateway. API Gateway can publish runtime events(example: policy violation, log invocation, error events etc), design time events (example: audit log events) and metrics to the configured Elasticsearch destination.", + "operationId" : "getElasticsearchAsDestination", + "consumes" : [ "application/json" ], + "produces" : [ "application/json" ], + "parameters" : [ ], + "responses" : { + "200" : { + "description" : "This status code indicates that the Elastic search destination configurations are retrieved successfully. SendErrorEvent indicates whether API Gateway has to send error events to API Gateway destination. SendLifecycleEvent indicates whether API Gateway has to send lifecycle events to API Gateway destination. SendPolicyViolationEvent indicates whether API Gateway has to send policy violation events to API Gateway destination. SendPerformanceMetrics indicates whether API Gateway has to send performance metrics to API Gateway destination. MetricsPublishInterval indicates the interval at which the performance metrics will be published (value has to be between 1-60), default being 60. sendAuditlogAliasManagementEvent indicates whether API Gateway has to send Alias Management related audit logs to API Gateway destination. sendAuditlogPackageManagementEvent indicates whether API Gateway has to send Package Management related audit logs to API Gateway destination. sendAuditlogRuntimeDataManagementEvent indicates whether API Gateway has to send RuntimeData Management related audit logs to API Gateway destination. sendAuditlogPolicyManagementEvent indicates whether API Gateway has to send Policy Management related audit logs to API Gateway destination. sendAuditlogPlanManagementEvent indicates whether API Gateway has to send Plan Management related audit logs to API Gateway destination. sendAuditlogApprovalManagementEvent indicates whether API Gateway has to send Approval Management related audit logs to API Gateway destination. sendAuditlogUserManagementEvent indicates whether API Gateway has to send User Management related audit logs to API Gateway destination. sendAuditlogApplicationManagementEvent indicates whether API Gateway has to send Application Management related audit logs to API Gateway destination. sendAuditlogAdministrationEvent indicates whether API Gateway has to send Administration related audit logs to API Gateway destination. sendAuditlogGroupManagementEvent indicates whether API Gateway has to send Group Management related audit logs to API Gateway destination. sendAuditlogAccessProfileManagementEvent indicates whether API Gateway has to send Access Profile Management related audit logs to API Gateway destination. sendAuditlogAPIManagementEvent indicates whether API Gateway has to send API Management related audit logs to API Gateway destination. sendAuditlogPromotionManagementEvent indicates whether API Gateway has to send Promotion Management related audit logs to API Gateway destination.", + "schema" : { + "$ref" : "#/definitions/ElasticsearchDestination" + }, + "examples" : { + "application/json" : "{\r\n \"sendAuditlogAliasManagementEvent\": \"true\",\r\n \"sendLifecycleEvent\": \"true\",\r\n \"sendAuditlogPackageManagementEvent\": \"true\",\r\n \"sendAuditlogRuntimeDataManagementEvent\": \"true\",\r\n \"sendAuditlogPolicyManagementEvent\": \"true\",\r\n \"sendAuditlogPlanManagementEvent\": \"true\",\r\n \"sendAuditlogApprovalManagementEvent\": \"true\",\r\n \"sendAuditlogUserManagementEvent\": \"true\",\r\n \"sendPerformanceMetrics\": \"true\",\r\n \"sendAuditlogApplicationManagementEvent\": \"true\",\r\n \"sendAuditlogAdministrationEvent\": \"true\",\r\n \"sendPolicyViolationEvent\": \"true\",\r\n \"sendErrorEvent\": \"true\",\r\n \"sendAuditlogGroupManagementEvent\": \"true\",\r\n \"metricsPublishInterval\": \"60\",\r\n \"sendAuditlogAccessProfileManagementEvent\": \"true\",\r\n \"sendAuditlogAPIManagementEvent\": \"true\",\r\n \"sendAuditlogPromotionManagementEvent\": \"true\"\r\n}" + } + }, + "400" : { + "description" : "This status code indicates that the provided configuration id is invalid.", + "examples" : { + "application/json" : "{\r\n \"errorDetails\": \" Invalid configId value in request. configId: elasticsearchdestinationConfigg.\"\r\n}" + } + }, + "401" : { + "description" : "This status code indicates that the user is not a valid API Gateway user for retrieving the Elasticsearch destination configuration." + } + }, + "security" : [ { + "Basic" : [ ] + } ] + }, + "put" : { + "description" : "The method is used to update the details of the Elasticsearch destination in API Gateway.", + "operationId" : "saveElasticsearchAsDestination", + "consumes" : [ "application/json" ], + "produces" : [ "application/json" ], + "parameters" : [ { + "in" : "body", + "name" : "body", + "description" : "", + "required" : true, + "schema" : { + "$ref" : "#/definitions/ElasticsearchDestination" + }, + "x-examples" : { + "application/json" : "{\r\n \"sendAuditlogAliasManagementEvent\": \"true\",\r\n \"sendLifecycleEvent\": \"true\",\r\n \"sendAuditlogPackageManagementEvent\": \"true\",\r\n \"sendAuditlogRuntimeDataManagementEvent\": \"true\",\r\n \"sendAuditlogPolicyManagementEvent\": \"true\",\r\n \"sendAuditlogPlanManagementEvent\": \"true\",\r\n \"sendAuditlogApprovalManagementEvent\": \"true\",\r\n \"sendAuditlogUserManagementEvent\": \"true\",\r\n \"sendPerformanceMetrics\": \"true\",\r\n \"sendAuditlogApplicationManagementEvent\": \"true\",\r\n \"sendAuditlogAdministrationEvent\": \"true\",\r\n \"sendPolicyViolationEvent\": \"true\",\r\n \"sendErrorEvent\": \"true\",\r\n \"sendAuditlogGroupManagementEvent\": \"true\",\r\n \"metricsPublishInterval\": \"60\",\r\n \"sendAuditlogAccessProfileManagementEvent\": \"true\",\r\n \"sendAuditlogAPIManagementEvent\": \"true\",\r\n \"sendAuditlogPromotionManagementEvent\": \"true\"\r\n}" + } + } ], + "responses" : { + "200" : { + "description" : "This status code indicates that the Elasticsearch destination configuration has been successfully updated in API Gateway, and the updated configuration is available in the response body.", + "schema" : { + "$ref" : "#/definitions/ElasticsearchDestination" + }, + "examples" : { + "application/json" : "{\r\n \"sendAuditlogAliasManagementEvent\": \"true\",\r\n \"sendLifecycleEvent\": \"true\",\r\n \"sendAuditlogPackageManagementEvent\": \"true\",\r\n \"sendAuditlogRuntimeDataManagementEvent\": \"true\",\r\n \"sendAuditlogPolicyManagementEvent\": \"true\",\r\n \"sendAuditlogPlanManagementEvent\": \"true\",\r\n \"sendAuditlogApprovalManagementEvent\": \"true\",\r\n \"sendAuditlogUserManagementEvent\": \"true\",\r\n \"sendPerformanceMetrics\": \"true\",\r\n \"sendAuditlogApplicationManagementEvent\": \"true\",\r\n \"sendAuditlogAdministrationEvent\": \"true\",\r\n \"sendPolicyViolationEvent\": \"true\",\r\n \"sendErrorEvent\": \"true\",\r\n \"sendAuditlogGroupManagementEvent\": \"true\",\r\n \"metricsPublishInterval\": \"60\",\r\n \"sendAuditlogAccessProfileManagementEvent\": \"true\",\r\n \"sendAuditlogAPIManagementEvent\": \"true\",\r\n \"sendAuditlogPromotionManagementEvent\": \"true\"\r\n}" + } + }, + "401" : { + "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have \"Manage Destination Administration\" functional privilege to access this API." + }, + "405" : { + "description" : "This status code indicates that the specified HTTP method is not allowed for the requested destination configuration in API Gateway.", + "examples" : { + "application/json" : "{\r\n\t\"errorDetails\": \" Unable to process the PUT request for Elasticsearch destination configuration. Error occurred while processing the payload. Error Message: Method: PUT is not allowed on resource: elasticsearchDestinationConfigg\"\r\n}" + } + }, + "400" : { + "description" : "This status code indicates that the request body is invalid.", + "examples" : { + "application/json" : "{\r\n\"errorDetails\": \" Invalid property key found in request payload.\"\r\n}" + } + } + }, + "security" : [ { + "Basic" : [ ] + } ] + } + }, + "/configurations/snmpDestinationConfig" : { + "get" : { + "description" : "The method retrieves the details of the SNMP destination in API Gateway. API Gateway can publish events and performance metrics data to the configured 3rd party SNMP server.", + "operationId" : "getSNMPAsDestination", + "consumes" : [ "application/json" ], + "produces" : [ "application/json" ], + "parameters" : [ ], + "responses" : { + "200" : { + "description" : "This status code indicates that the SNMP destination configurations are retrieved successfully. SendErrorEvent indicates whether API Gateway has to send error events to SNMP destination. SendLifecycleEvent indicates whether API Gateway has to send lifecycle events to SNMP destination. SendPolicyViolationEvent indicates whether API Gateway has to send policy violation events to SNMP destination. SendPerformanceMetrics indicates whether API Gateway has to send performance metrics to SNMP destination. MetricsPublishInterval indicates the interval at which the performance metrics will be published (value has to be between 1-60), default being 60.", + "schema" : { + "$ref" : "#/definitions/SNMPDestination" + }, + "examples" : { + "application/json" : "{\r\n \"sendTRAPs\": \"false\",\r\n \"snmpTargetType\": \"user\",\r\n \"hostName\": \"localhost\",\r\n \"port\": \"8081\",\r\n \"transport\": \"tcp\",\r\n \"userName\": \"Admin\",\r\n \"useAuth\": \"false\",\r\n \"authPassword\": \"\",\r\n \"authProtocol\": \"MD5\",\r\n \"usePrivacy\": \"false\",\r\n \"privacyPassword\": \"\",\r\n \"privacyProtocol\": \"DES\",\r\n \"communityName\": \"\",\r\n \"sendErrorEvent\": \"false\",\r\n \"sendLifecycleEvent\": \"false\",\r\n \"sendPolicyViolationEvent\": \"false\"\r\n}" + } + }, + "400" : { + "description" : "This status code indicates that the provided configuration id is invalid.", + "examples" : { + "application/json" : "{\r\n \"errorDetails\": \" Invalid configId value in request. configId: snmpDestinationConfigg.\"\r\n}" + } + }, + "401" : { + "description" : "This status code indicates that the user is not a valid API Gateway user for retrieving the SNMP destination configuration." + } + }, + "security" : [ { + "Basic" : [ ] + } ] + }, + "put" : { + "description" : "The method is used to update the details of the SNMP destination in API Gateway.", + "operationId" : "saveSNMPAsDestination", + "consumes" : [ "application/json" ], + "produces" : [ "application/json" ], + "parameters" : [ { + "in" : "body", + "name" : "body", + "description" : "", + "required" : true, + "schema" : { + "$ref" : "#/definitions/SNMPDestination" + }, + "x-examples" : { + "application/json" : "{\r\n \"sendTRAPs\": \"false\",\r\n \"snmpTargetType\": \"user\",\r\n \"hostName\": \"localhost\",\r\n \"port\": \"8081\",\r\n \"transport\": \"tcp\",\r\n \"userName\": \"Admin\",\r\n \"useAuth\": \"false\",\r\n \"authPassword\": \"\",\r\n \"authProtocol\": \"MD5\",\r\n \"usePrivacy\": \"false\",\r\n \"privacyPassword\": \"\",\r\n \"privacyProtocol\": \"DES\",\r\n \"communityName\": \"\",\r\n \"sendErrorEvent\": \"false\",\r\n \"sendLifecycleEvent\": \"false\",\r\n \"sendPolicyViolationEvent\": \"false\"\r\n}" + } + } ], + "responses" : { + "200" : { + "description" : "This status code indicates that the SNMP destination configuration has been successfully updated in API Gateway, and the updated configuration is available in the response body.", + "schema" : { + "$ref" : "#/definitions/SNMPDestination" + }, + "examples" : { + "application/json" : "{\r\n \"sendTRAPs\": \"false\",\r\n \"snmpTargetType\": \"user\",\r\n \"hostName\": \"localhost\",\r\n \"port\": \"8081\",\r\n \"transport\": \"tcp\",\r\n \"userName\": \"Admin\",\r\n \"useAuth\": \"false\",\r\n \"authPassword\": \"\",\r\n \"authProtocol\": \"MD5\",\r\n \"usePrivacy\": \"false\",\r\n \"privacyPassword\": \"\",\r\n \"privacyProtocol\": \"DES\",\r\n \"communityName\": \"\",\r\n \"sendErrorEvent\": \"false\",\r\n \"sendLifecycleEvent\": \"false\",\r\n \"sendPolicyViolationEvent\": \"false\"\r\n}" + } + }, + "401" : { + "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have \"Manage Destination Administration\" functional privilege to access this API." + }, + "405" : { + "description" : "This status code indicates that the specified HTTP method is not allowed for the requested destination configuration in API Gateway.", + "examples" : { + "application/json" : "{\r\n\t\"errorDetails\": \" Unable to process the PUT request for SNMP destination configuration. Error occurred while processing the payload. Error Message: Method: PUT is not allowed on resource: snmpDestinationConfig\"\r\n}" + } + }, + "400" : { + "description" : "This status code indicates that the request body is invalid.", + "examples" : { + "application/json" : "{\r\n\"errorDetails\": \" Invalid property key found in request payload.\"\r\n}" + } + } + }, + "security" : [ { + "Basic" : [ ] + } ] + } + }, + "/configurations/emailDestinationConfig" : { + "get" : { + "description" : "The method retrieves the details of the Email destination in API Gateway. API Gateway can send alerts to the email ID specified either in the Log Invocation, Monitor Service Performance, Monitor Service Level Agreement, (or) Throttling Traffic Optimization policies through the configured Email destination.", + "operationId" : "getEmailAsDestination", + "consumes" : [ "application/json" ], + "produces" : [ "application/json" ], + "parameters" : [ ], + "responses" : { + "200" : { + "description" : "This status code indicates that the Email destination configurations are retrieved successfully.", + "schema" : { + "$ref" : "#/definitions/EmailDestination" + }, + "examples" : { + "application/json" : "{\r\n \"smtpServer\": \"mailhost\",\r\n \"port\": \"26\",\r\n \"userName\": \"\",\r\n \"password\": \"\",\r\n \"tls\": \"\",\r\n \"truststoreAlias\": \"\",\r\n \"internalEmail\": \"\",\r\n \"serviceEmail\": \"\",\r\n \"fromEmail\": \"a@example.com\",\r\n \"defaultEmailCharset\": \"\",\r\n \"testRecipient\": \"b@example.com\",\r\n \"logInvocationSubject\": \"Log Invocation mail\",\r\n \"logInvocationContent\": \"The transaction event\",\r\n \"monitorSPSubject\": \"Monitor Service Performance mail\",\r\n \"monitorSPContent\": \"The monitoring event\",\r\n \"monitorSLASubject\": \"Monitor SLA mail\",\r\n \"monitorSLAContent\": \"The monitoring event\",\r\n \"throttlingSubject\": \"Throttling mail\",\r\n \"throttlingContent\": \"The Throttling event\"\r\n}" + } + }, + "400" : { + "description" : "This status code indicates that the provided configuration id is invalid.", + "examples" : { + "application/json" : "{\r\n \"errorDetails\": \" Invalid configId value in request. configId: emailDestinationConfigg.\"\r\n}" + } + }, + "401" : { + "description" : "This status code indicates that the user is not a valid API Gateway user retrieving the Email destination configuration." + } + }, + "security" : [ { + "Basic" : [ ] + } ] + }, + "put" : { + "description" : "The method is used to update the details of the Email destination in API Gateway.", + "operationId" : "saveEmailAsDestination", + "consumes" : [ "application/json" ], + "produces" : [ "application/json" ], + "parameters" : [ { + "in" : "body", + "name" : "body", + "description" : "", + "required" : true, + "schema" : { + "$ref" : "#/definitions/EmailDestination" + }, + "x-examples" : { + "application/json" : "{\r\n \"smtpServer\": \"mailhost\",\r\n \"port\": \"26\",\r\n \"userName\": \"\",\r\n \"password\": \"\",\r\n \"tls\": \"\",\r\n \"truststoreAlias\": \"\",\r\n \"internalEmail\": \"\",\r\n \"serviceEmail\": \"\",\r\n \"fromEmail\": \"a@example.com\",\r\n \"defaultEmailCharset\": \"\",\r\n \"testRecipient\": \"b@example.com\",\r\n \"logInvocationSubject\": \"Log Invocation mail\",\r\n \"logInvocationContent\": \"The transaction event\",\r\n \"monitorSPSubject\": \"Monitor Service Performance mail\",\r\n \"monitorSPContent\": \"The monitoring event\",\r\n \"monitorSLASubject\": \"Monitor SLA mail\",\r\n \"monitorSLAContent\": \"The monitoring event\",\r\n \"throttlingSubject\": \"Throttling mail\",\r\n \"throttlingContent\": \"The Throttling event\"\r\n}" + } + } ], + "responses" : { + "200" : { + "description" : "This status code indicates that the Email destination configuration has been successfully updated in API Gateway, and the updated configuration is available in the response body.", + "schema" : { + "$ref" : "#/definitions/EmailDestination" + }, + "examples" : { + "application/json" : "{\r\n \"smtpServer\": \"mailhost\",\r\n \"port\": \"26\",\r\n \"userName\": \"\",\r\n \"password\": \"\",\r\n \"tls\": \"\",\r\n \"truststoreAlias\": \"\",\r\n \"internalEmail\": \"\",\r\n \"serviceEmail\": \"\",\r\n \"fromEmail\": \"a@example.com\",\r\n \"defaultEmailCharset\": \"\",\r\n \"testRecipient\": \"b@example.com\",\r\n \"logInvocationSubject\": \"Log Invocation mail\",\r\n \"logInvocationContent\": \"The transaction event\",\r\n \"monitorSPSubject\": \"Monitor Service Performance mail\",\r\n \"monitorSPContent\": \"The monitoring event\",\r\n \"monitorSLASubject\": \"Monitor SLA mail\",\r\n \"monitorSLAContent\": \"The monitoring event\",\r\n \"throttlingSubject\": \"Throttling mail\",\r\n \"throttlingContent\": \"The Throttling event\"\r\n}" + } + }, + "401" : { + "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have \"Manage Destination Administration\" functional privilege to access this API." + }, + "405" : { + "description" : "This status code indicates that the specified HTTP method is not allowed for the requested destination configuration in API Gateway.", + "examples" : { + "application/json" : "{\r\n\t\"errorDetails\": \" Unable to process the PUT request for Email destination configuration. Error occurred while processing the payload. Error Message: Method: PUT is not allowed on resource: emailDestinationConfig\"\r\n}" + } + }, + "400" : { + "description" : "This status code indicates that the request body is invalid.", + "examples" : { + "application/json" : "{\r\n\"errorDetails\": \" Invalid property key found in request payload.\"\r\n}" + } + } + }, + "security" : [ { + "Basic" : [ ] + } ] + } + }, + "/configurations/apiPortalDestinationConfig" : { + "get" : { + "description" : "The method retrieves the details of the API Portal destination configurations. API Gateway can publish events and performance metrics data. By default, error events, lifecycle events, policy violation event, and performance data are published to API Portal.", + "operationId" : "getAPIPortalAsDestination", + "consumes" : [ "application/json" ], + "produces" : [ "application/json" ], + "parameters" : [ ], + "responses" : { + "200" : { + "description" : "This status code indicates that the API Portal destination configurations are retrieved successfully.", + "schema" : { + "$ref" : "#/definitions/Destination" + }, + "examples" : { + "application/json" : "{\r\n\t\"sendPolicyViolationEvent\": \"true\",\r\n\t\"metricsPublishInterval\": \"10\",\r\n\t\"sendErrorEvent\": \"true\",\r\n\t\"sendPerformanceMetrics\": \"true\",\r\n\t\"sendLifecycleEvent\": \"true\"\r\n}" + } + }, + "400" : { + "description" : "This status code indicates that the provided configuration id is invalid." + }, + "401" : { + "description" : "This status code indicates that the user is not a valid API Gateway user for retrieving the API Portal destination configuration." + } + }, + "security" : [ { + "Basic" : [ ] + } ] + }, + "put" : { + "description" : "The method is used to update the details of the API Portal destination in API Gateway.", + "operationId" : "saveAPIPortalAsDestination", + "consumes" : [ "application/json" ], + "produces" : [ "application/json" ], + "parameters" : [ { + "in" : "body", + "name" : "body", + "description" : "", + "required" : true, + "schema" : { + "$ref" : "#/definitions/Destination" + }, + "x-examples" : { + "application/json" : "{\r\n\t\"sendPolicyViolationEvent\": \"true\",\r\n\t\"metricsPublishInterval\": \"10\",\r\n\t\"sendErrorEvent\": \"true\",\r\n\t\"sendPerformanceMetrics\": \"true\",\r\n\t\"sendLifecycleEvent\": \"true\"\r\n}" + } + } ], + "responses" : { + "200" : { + "description" : "This status code indicates that the API Portal destination configuration has been successfully updated in API Gateway, and the updated configuration is available in the response body.", + "schema" : { + "$ref" : "#/definitions/Destination" + }, + "examples" : { + "application/json" : "{\r\n\t\"configId\": \"apiPortalDestinationConfig\",\r\n\t\"sendPolicyViolationEvent\": \"true\",\r\n\t\"metricsPublishInterval\": \"10\",\r\n\t\"sendErrorEvent\": \"true\",\r\n\t\"sendPerformanceMetrics\": \"true\",\r\n\t\"sendLifecycleEvent\": \"true\"\r\n}" + } + }, + "401" : { + "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have \"Manage Destination Administration\" functional privilege to access this API." + }, + "400" : { + "description" : "This status code indicates that the request body is invalid.", + "examples" : { + "application/json" : "{\r\n\"errorDetails\": \" Invalid property key found in request payload.\"\r\n}" + } + } + }, + "security" : [ { + "Basic" : [ ] + } ] + } + }, + "/configurations/cache" : { + "get" : { + "operationId" : "getCacheConfig", + "consumes" : [ "application/json" ], + "produces" : [ "application/json" ], + "parameters" : [ ], + "responses" : { + "200" : { + "description" : "This status code indicates that the cache configurations are successfully retrieved", + "schema" : { + "$ref" : "#/definitions/GatewayCacheConfig" + } + }, + "400" : { + "description" : "This status code indicates that the user generated an invalid request" + }, + "401" : { + "description" : "This status code indicates that the user passed invalid credentials" + } + }, + "security" : [ { + "Basic" : [ ] + } ] + }, + "put" : { + "operationId" : "updateCacheConfig", + "consumes" : [ "application/json" ], + "produces" : [ "application/json" ], + "parameters" : [ ], + "responses" : { + "200" : { + "description" : "This status code indicates that the cache configurations are updated successfully.", + "schema" : { + "$ref" : "#/definitions/GatewayCacheConfig" + } + }, + "400" : { + "description" : "This status code indicates that the cache configuratoins payload is incorrect." + }, + "401" : { + "description" : "This status code indicates that the user did not provide the correct credentials to update the cache configuration" + } + }, + "security" : [ { + "Basic" : [ ] + } ] + } + }, + "/configurations/customContentTypes" : { + "get" : { + "description" : "This REST method is used to get the configured custom content types in API Gateway. Custom content types can be defined for base types XML,JSON and Text.These Custom types can be then used for payload processing in policies like Content based routing,Identify and access and Conditional error processing", + "operationId" : "getCustomContentTypes", + "consumes" : [ "application/json" ], + "produces" : [ "application/json" ], + "parameters" : [ ], + "responses" : { + "200" : { + "description" : "This response returns all the configured custom content types in API Gateway. The response is a set of key/value pair where key indicates the custom content type and value indicates the base type. The value can be application/xml or application/json or text/xml", + "schema" : { + "$ref" : "#/definitions/CustomContentType" + }, + "examples" : { + "application/json" : "{\r\n \"application/myorg+json\": \"application/json\",\r\n \"application/myorg+xml\" : \"application/xml\"\r\n}" + } + }, + "401" : { + "description" : "This response indicates that invalid credentials have been provided for the request." + } + }, + "security" : [ { + "Basic" : [ ] + } ] + }, + "put" : { + "description" : "This REST method is used to update the custom content types for API Gateway.The response is a set of key/value pair where key indicates the custom content type and value indicates the base type. The value can be application/xml or application/json or text/xml", + "operationId" : "saveCustomContentTypes", + "consumes" : [ "application/json" ], + "produces" : [ "application/json" ], + "parameters" : [ { + "in" : "body", + "name" : "body", + "description" : "", + "required" : true, + "schema" : { + "$ref" : "#/definitions/CustomContentType" + }, + "x-examples" : { + "application/json" : "{\r\n \"application/myorg+json\": \"application/json\", \r\n \"application/myorg+xml\" : \"application/xml\"\r\n}" + } + } ], + "responses" : { + "200" : { + "description" : "This response returns all the configured custom content types in API Gateway. The response is a set of key/value pair where key indicates the custom content type and value indicates the base type. The value can be application/xml or application/json or text/xml", + "schema" : { + "$ref" : "#/definitions/CustomContentType" + }, + "examples" : { + "application/json" : "{\r\n \"application/myorg+json\": \"application/json\", \r\n \"application/myorg+xml\" : \"application/xml\"\r\n}" + } + }, + "400" : { + "description" : "This status code indicates that the user did not provide proper values for the base content type. The only allowed values are application/xml,application/json,text/xml" + }, + "401" : { + "description" : "This response indicates that invalid credentials have been provided for the request." + } + }, + "security" : [ { + "Basic" : [ ] + } ] + } + }, + "/configurations/logConfig" : { + "get" : { + "description" : "APIGateway has log files from different components.This method is used to retrieve the log settings of various components used by APIGateway.", + "operationId" : "getLogConfig", + "consumes" : [ "application/json" ], + "produces" : [ "application/json" ], + "parameters" : [ ], + "responses" : { + "200" : { + "description" : "This status code indicates that the external log configuration is retrieved successfully.", + "schema" : { + "$ref" : "#/definitions/LogConfiguration" + }, + "examples" : { + "application/json" : "{\"apigatewayLogger\": \"trace\",\"elasticSearchLogger\": \"info\",\"kibanaLogger\": \"verbose\",\"enableSessionLogger\": \"false\",\"enableSecurityLogger\": \"true\",\"sagOsgiLogger\": \"debug\",\"enableLogAggregation\": \"true\",\"logDestination\": \"INTERNAL\"}" + } + }, + "401" : { + "description" : "This status code indicates that the user is not a valid API Gateway user for retrieving the log configuration." + } + }, + "security" : [ { + "Basic" : [ ] + } ] + }, + "put" : { + "description" : "The method is used to update the details of the log configuration in API Gateway.", + "operationId" : "saveLogConfig", + "consumes" : [ "application/json" ], + "produces" : [ "application/json" ], + "parameters" : [ ], + "responses" : { + "200" : { + "description" : "This status code indicates that the log configuration has been successfully updated in API Gateway, and the updated configuration is available in the response body.", + "schema" : { + "$ref" : "#/definitions/LogConfiguration" + }, + "examples" : { + "application/json" : "{\"apigatewayLogger\": \"trace\",\"elasticSearchLogger\": \"info\",\"kibanaLogger\": \"verbose\",\"enableSessionLogger\": \"false\",\"enableSecurityLogger\": \"true\",\"sagOsgiLogger\": \"debug\",\"enableLogAggregation\": \"true\",\"logDestination\": \"INTERNAL\"}" + } + }, + "401" : { + "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have \"Administration\" functional privilege to access this API." + } + }, + "security" : [ { + "Basic" : [ ] + } ] + } + }, + "/configurations/ldapConfig" : { + "get" : { + "description" : "Retrieves the LDAP configuration settings configured in the API Gateway", + "operationId" : "getLdapConfig", + "consumes" : [ "application/json" ], + "produces" : [ "application/json" ], + "parameters" : [ ], + "responses" : { + "200" : { + "description" : "", + "schema" : { + "$ref" : "#/definitions/InputLdapConfiguration" + }, + "examples" : { + "application/json" : "{\r\n \"ldapConfig\": {\r\n \"cacheSize\": \"10\",\r\n \"cacheTTL\": \"60\",\r\n \"provider\": \"LDAP\",\r\n \"ldapDirectoryList\": [\r\n {\r\n \"url\": \"ldap://abc.xyz.org:3128\",\r\n \"principal\": \"CN=alias, OU=User,DC=xyz,DC=org\",\r\n \"password\": \"abcde\",\r\n \"timeout\": \"5\",\r\n \"poolMin\": \"0\",\r\n \"poolMax\": \"10\",\r\n \"useaf\": false,\r\n \"dnPrefix\": null,\r\n \"dnSuffix\": null,\r\n \"uidProp\": \"uidAccountName\",\r\n \"userRootDn\": \"OU=User,DC=xyz,DC=org\",\r\n \"group\": \"Administrators\",\r\n \"memberAttribute\": \"member\",\r\n \"groupIdProperty\": \"gidAccountName\",\r\n \"groupRootDN\": \"OU=Groups,DC=xyz,DC=org\",\r\n \"index\": 0\r\n }\r\n ]\r\n }\r\n}" + } + }, + "401" : { + "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." + } + }, + "security" : [ { + "Basic" : [ ] + } ] + }, + "put" : { + "description" : "Saves the LDAP configuration settings in the API Gateway", + "operationId" : "saveLdapConfig", + "consumes" : [ "application/json" ], + "produces" : [ "application/json" ], + "parameters" : [ { + "in" : "body", + "name" : "body", + "description" : "", + "required" : true, + "schema" : { + "$ref" : "#/definitions/InputLdapConfiguration" + }, + "x-examples" : { + "application/json" : "{\r\n \"ldapConfig\": {\r\n \"cacheSize\": \"10\",\r\n \"cacheTTL\": \"60\",\r\n \"provider\": \"LDAP\",\r\n \"ldapDirectoryList\": [\r\n {\r\n \"url\": \"ldap://abc.xyz.org:3128\",\r\n \"principal\": \"CN=alias, OU=User,DC=xyz,DC=org\",\r\n \"password\": \"abcde\",\r\n \"timeout\": \"5\",\r\n \"poolMin\": \"0\",\r\n \"poolMax\": \"10\",\r\n \"useaf\": false,\r\n \"dnPrefix\": null,\r\n \"dnSuffix\": null,\r\n \"uidProp\": \"uidAccountName\",\r\n \"userRootDn\": \"OU=User,DC=xyz,DC=org\",\r\n \"group\": \"Administrators\",\r\n \"memberAttribute\": \"member\",\r\n \"groupIdProperty\": \"gidAccountName\",\r\n \"groupRootDN\": \"OU=Groups,DC=xyz,DC=org\",\r\n \"index\": 0\r\n }\r\n ]\r\n }\r\n}" + } + } ], + "responses" : { + "200" : { + "description" : "", + "schema" : { + "$ref" : "#/definitions/InputLdapConfiguration" + }, + "examples" : { + "application/json" : "{\r\n \"ldapConfig\": {\r\n \"cacheSize\": \"10\",\r\n \"cacheTTL\": \"60\",\r\n \"provider\": \"LDAP\",\r\n \"ldapDirectoryList\": [\r\n {\r\n \"url\": \"ldap://abc.xyz.org:3128\",\r\n \"principal\": \"CN=alias, OU=User,DC=xyz,DC=org\",\r\n \"password\": \"abcde\",\r\n \"timeout\": \"5\",\r\n \"poolMin\": \"0\",\r\n \"poolMax\": \"10\",\r\n \"useaf\": false,\r\n \"dnPrefix\": null,\r\n \"dnSuffix\": null,\r\n \"uidProp\": \"uidAccountName\",\r\n \"userRootDn\": \"OU=User,DC=xyz,DC=org\",\r\n \"group\": \"Administrators\",\r\n \"memberAttribute\": \"member\",\r\n \"groupIdProperty\": \"gidAccountName\",\r\n \"groupRootDN\": \"OU=Groups,DC=xyz,DC=org\",\r\n \"index\": 0\r\n }\r\n ]\r\n }\r\n}" + } + }, + "401" : { + "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." + } + }, + "security" : [ { + "Basic" : [ ] + } ] + } + }, + "/configurations/passwordRestrictions" : { + "get" : { + "description" : "Retrieves the password restrictions settings configured in API Gateway", + "operationId" : "getPasswordRestrictions", + "consumes" : [ "application/json" ], + "produces" : [ "application/json" ], + "parameters" : [ ], + "responses" : { + "200" : { + "description" : "", + "schema" : { + "$ref" : "#/definitions/PasswordRestrictions" + }, + "examples" : { + "application/json" : "{\r\n \"mode\": \"lax\",\r\n \"minLowerChars\": \"10\",\r\n \"minDigits\": \"10\",\r\n \"minLength\": \"10\",\r\n \"enablePasswordChange\": \"true\",\r\n \"historyLength\": \"3\",\r\n \"maxIdenticalCharsInARow\": \"10\",\r\n \"minSpecialChars\": \"10\",\r\n \"minUpperChars\": \"10\",\r\n \"maxLength\": \"20\"\r\n}" + } + }, + "401" : { + "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." + } + }, + "security" : [ { + "Basic" : [ ] + } ] + }, + "put" : { + "description" : "Saves the password restrictions settings in API Gateway", + "operationId" : "savePasswordRestrictions", + "consumes" : [ "application/json" ], + "produces" : [ "application/json" ], + "parameters" : [ { + "in" : "body", + "name" : "body", + "description" : "", + "required" : true, + "schema" : { + "$ref" : "#/definitions/PasswordRestrictions" + }, + "x-examples" : { + "application/json" : "{\r\n \"mode\": \"lax\",\r\n \"minLowerChars\": \"10\",\r\n \"minDigits\": \"10\",\r\n \"minLength\": \"10\",\r\n \"enablePasswordChange\": \"true\",\r\n \"historyLength\": \"3\",\r\n \"maxIdenticalCharsInARow\": \"10\",\r\n \"minSpecialChars\": \"10\",\r\n \"minUpperChars\": \"10\",\r\n \"maxLength\": \"20\"\r\n}" + } + } ], + "responses" : { + "200" : { + "description" : "", + "schema" : { + "$ref" : "#/definitions/PasswordRestrictions" + }, + "examples" : { + "application/json" : "{\r\n \"mode\": \"lax\",\r\n \"minLowerChars\": \"10\",\r\n \"minDigits\": \"10\",\r\n \"minLength\": \"10\",\r\n \"enablePasswordChange\": \"true\",\r\n \"historyLength\": \"3\",\r\n \"maxIdenticalCharsInARow\": \"10\",\r\n \"minSpecialChars\": \"10\",\r\n \"minUpperChars\": \"10\",\r\n \"maxLength\": \"20\"\r\n}" + } + }, + "401" : { + "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." + } + }, + "security" : [ { + "Basic" : [ ] + } ] + } + }, + "/configurations/passwordExpiry" : { + "get" : { + "description" : "Retrieves the password expiry settings configured in API Gateway", + "operationId" : "getPasswordExpirySettings", + "consumes" : [ "application/json" ], + "produces" : [ "application/json" ], + "parameters" : [ ], + "responses" : { + "200" : { + "description" : "", + "schema" : { + "$ref" : "#/definitions/PasswordExpirySettings" + }, + "examples" : { + "application/json" : "{\r\n \"expirationInterval\": \"90\",\r\n \"emailIds\": \"fa@abc.xyz\\nfa1@abc.xyz\",\r\n \"applicableUsers\": \"user1;user2\",\r\n \"expiryEmailBefore\": \"3\",\r\n \"isEnabled\": \"true\",\r\n \"remainingUsers\": \"user3;user4\"\r\n}" + } + }, + "401" : { + "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." + } + }, + "security" : [ { + "Basic" : [ ] + } ] + }, + "put" : { + "description" : "Saves the password expiry settings in API Gateway", + "operationId" : "savePasswordExpirySettings", + "consumes" : [ "application/json" ], + "produces" : [ "application/json" ], + "parameters" : [ { + "in" : "body", + "name" : "body", + "description" : "", + "required" : true, + "schema" : { + "$ref" : "#/definitions/PasswordExpirySettings" + }, + "x-examples" : { + "application/json" : "{\r\n \"expirationInterval\": \"90\",\r\n \"emailIds\": \"fa@abc.xyz\\nfa1@abc.xyz\",\r\n \"applicableUsers\": \"user1;user2\",\r\n \"expiryEmailBefore\": \"3\",\r\n \"isEnabled\": \"true\",\r\n \"remainingUsers\": \"user3;user4\"\r\n}" + } + } ], + "responses" : { + "200" : { + "description" : "", + "schema" : { + "$ref" : "#/definitions/PasswordExpirySettings" + }, + "examples" : { + "application/json" : "{\r\n \"expirationInterval\": \"90\",\r\n \"emailIds\": \"fa@abc.xyz\\nfa1@abc.xyz\",\r\n \"applicableUsers\": \"user1;user2\",\r\n \"expiryEmailBefore\": \"3\",\r\n \"isEnabled\": \"true\",\r\n \"remainingUsers\": \"user3;user4\"\r\n}" + } + }, + "401" : { + "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." + } + }, + "security" : [ { + "Basic" : [ ] + } ] + } + }, + "/configurations/accountLockSettings" : { + "get" : { + "description" : "Retrieves the account lock settings configured in API Gateway", + "operationId" : "getAccountLockSettings", + "consumes" : [ "application/json" ], + "produces" : [ "application/json" ], + "parameters" : [ ], + "responses" : { + "200" : { + "description" : "", + "schema" : { + "$ref" : "#/definitions/AccountLockSettings" + }, + "examples" : { + "application/json" : "{\r\n \"blockDuration\": \"15\",\r\n \"isEnabled\": \"true\",\r\n \"timeIntervalUnit\": \"Minutes\",\r\n \"timeInterval\": \"100\",\r\n \"maximumLoginAttempts\": \"2\",\r\n \"blockDurationUnit\": \"Minutes\",\r\n \"appliesToUsers\": \"allUsersExceptPredefinedUsers\"\r\n}" + } + }, + "401" : { + "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." + } + }, + "security" : [ { + "Basic" : [ ] + } ] + }, + "put" : { + "description" : "Saves the account lock settings in API Gateway", + "operationId" : "saveAccountLockSettings", + "consumes" : [ "application/json" ], + "produces" : [ "application/json" ], + "parameters" : [ { + "in" : "body", + "name" : "body", + "description" : "", + "required" : true, + "schema" : { + "$ref" : "#/definitions/AccountLockSettings" + }, + "x-examples" : { + "application/json" : "{\r\n \"blockDuration\": \"15\",\r\n \"isEnabled\": \"true\",\r\n \"timeIntervalUnit\": \"Minutes\",\r\n \"timeInterval\": \"100\",\r\n \"maximumLoginAttempts\": \"2\",\r\n \"blockDurationUnit\": \"Minutes\",\r\n \"appliesToUsers\": \"allUsersExceptPredefinedUsers\"\r\n}" + } + } ], + "responses" : { + "200" : { + "description" : "", + "schema" : { + "$ref" : "#/definitions/AccountLockSettings" + }, + "examples" : { + "application/json" : "{\r\n \"blockDuration\": \"15\",\r\n \"isEnabled\": \"true\",\r\n \"timeIntervalUnit\": \"Minutes\",\r\n \"timeInterval\": \"100\",\r\n \"maximumLoginAttempts\": \"2\",\r\n \"blockDurationUnit\": \"Minutes\",\r\n \"appliesToUsers\": \"allUsersExceptPredefinedUsers\"\r\n}" + } + }, + "401" : { + "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." + } + }, + "security" : [ { + "Basic" : [ ] + } ] + } + }, + "/portalGateways" : { + "get" : { + "description" : "This API allows you to retrieve API Portal configurations available in API Gateway.", + "operationId" : "getAllAPIPortalConfiguration", + "produces" : [ "application/json" ], + "parameters" : [ ], + "responses" : { + "200" : { + "description" : "This status code indicates that all the API Portal configurations are retrieved successfully.", + "schema" : { + "$ref" : "#/definitions/PortalGateway" + }, + "examples" : { + "application/json" : "{\r\n\t\"portalGatewayResponse\": [{\r\n\t\t\t\"id\": \"c7059719-e434-4b45-9b09-b5176fa8b787\",\r\n\t\t\t\"gatewayName\": \"myportal\",\r\n\t\t\t\"gatewayUsername\": \"adminUser\",\r\n\t\t\t\"gatewayPassword\": \"*****\",\r\n\t\t\t\"gatewayURL\": \"http://apigateway_host:5555\",\r\n\t\t\t\"refId\": \"2609fc40-87d2-11e7-1298-d481d790920c\",\r\n\t\t\t\"externalPortal\": {\r\n\t\t\t\t\"type\": \"apiportal\",\r\n\t\t\t\t\"endpointTenant\": \"default\",\r\n\t\t\t\t\"endpointURL\": \"http://api_portal_host/\",\r\n\t\t\t\t\"endpointUsername\": \"adminUser\",\r\n\t\t\t\t\"endpointPassword\": \"*****\"\r\n\t\t\t},\r\n\t\t\t\"version\": \"1.0\",\r\n\t\t\t\"published\": true\r\n\t\t}\r\n\r\n\t]\r\n}" + } + }, + "401" : { + "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." + } + }, + "security" : [ { + "Basic" : [ ] + } ] + }, + "post" : { + "description" : "This method allows you to create the API Portal configuration in API Gateway.", + "operationId" : "createAPIPortalConfiguration", + "consumes" : [ "application/json" ], + "produces" : [ "application/json" ], + "parameters" : [ { + "in" : "body", + "name" : "body", + "description" : "API Portal configuration payload", + "required" : true, + "schema" : { + "$ref" : "#/definitions/PortalGateway" + }, + "x-examples" : { + "application/json" : "{\r\n\t\"externalPortal\": {\r\n\t\t\"type\": \"apiportal\",\r\n\t\t\"endpointURL\": \"http://apiportal_host:18101\",\r\n\t\t\"endpointTenant\": \"default\",\r\n\t\t\"endpointUsername\": \"providerUser\",\r\n\t\t\"endpointPassword\": \"providerPassword\"\r\n\t},\r\n\t\"gatewayName\": \"MyPortalConfiguration\",\r\n\t\"version\": \"1.0\",\r\n\t\"gatewayURL\": \"http://apigateway_host:5555\",\r\n\t\"gatewayUsername\": \"adminUser\",\r\n\t\"gatewayPassword\": \"adminPassword\"\r\n}" + } + } ], + "responses" : { + "201" : { + "description" : "This status code indicates that the API Portal configuration is created successfully.", + "schema" : { + "$ref" : "#/definitions/PortalGateway" + }, + "examples" : { + "application/json" : "{\r\n\t\"portalGatewayResponse\": [{\r\n\t\t\"id\": \"c7059719-e434-4b45-9b09-b5176fa8b787\",\r\n\t\t\"gatewayName\": \"myportal\",\r\n\t\t\"gatewayUsername\": \"adminUser\",\r\n\t\t\"gatewayPassword\": \"*****\",\r\n\t\t\"gatewayURL\": \"http://apigateway_host:5555\",\r\n\t\t\"refId\": \"2609fc40-87d2-11e7-1298-d481d790920c\",\r\n\t\t\"externalPortal\": {\r\n\t\t\t\"type\": \"apiportal\",\r\n\t\t\t\"endpointTenant\": \"default\",\r\n\t\t\t\"endpointURL\": \"http://apiportal_host/\",\r\n\t\t\t\"endpointUsername\": \"adminUser\",\r\n\t\t\t\"endpointPassword\": \"*****\"\r\n\t\t},\r\n\t\t\"version\": \"1.0\",\r\n\t\t\"published\": true\r\n\t}]\r\n}" + } + }, + "400" : { + "description" : "This status code indicates that the user has missed some mandatory field that is required to create the API Portal configuration." + }, + "401" : { + "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." + }, + "500" : { + "description" : "This status code indicates that an error occurred while processing the information in API Gateway or while communicating with API Portal." + } + }, + "security" : [ { + "Basic" : [ ] + } ] + } + }, + "/portalGateways/{portalGatewayId}" : { + "get" : { + "description" : "This API allows you to retrieve an API Portal configuration in API Gateway.", + "operationId" : "getAPIPortalConfiguration", + "produces" : [ "application/json" ], + "parameters" : [ { + "name" : "portalGatewayId", + "in" : "path", + "description" : "Id of the API Portal configuration for retrieval", + "required" : true, + "type" : "string", + "x-example" : "353bd366-47d4-4703-aecf-9cb40cdcc864" + } ], + "responses" : { + "200" : { + "description" : "This status code indicates that the API Portal configuration is retrieved successfully.", + "schema" : { + "$ref" : "#/definitions/PortalGateway" + }, + "examples" : { + "application/json" : "{\r\n\t\"portalGatewayResponse\": {\r\n\t\t\"id\": \"c7059719-e434-4b45-9b09-b5176fa8b787\",\r\n\t\t\"gatewayName\": \"mygateway\",\r\n\t\t\"gatewayUsername\": \"adminUser\",\r\n\t\t\"gatewayPassword\": \"*****\",\r\n\t\t\"gatewayURL\": \"http://apigateway_host:5555\",\r\n\t\t\"refId\": \"2609fc40-87d2-11e7-1298-d481d790920c\",\r\n\t\t\"externalPortal\": {\r\n\t\t\t\"type\": \"apiportal\",\r\n\t\t\t\"endpointTenant\": \"default\",\r\n\t\t\t\"endpointURL\": \"http://apiportal_host/\",\r\n\t\t\t\"endpointUsername\": \"adminUser\",\r\n\t\t\t\"endpointPassword\": \"*****\"\r\n\t\t},\r\n\t\t\"version\": \"1.0\",\r\n\t\t\"published\": true\r\n\t}\r\n}" + } + }, + "404" : { + "description" : "This status code indicates that the API Portal configuration is not available." + }, + "401" : { + "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." + } + }, + "security" : [ { + "Basic" : [ ] + } ] + }, + "put" : { + "description" : "This API allows you to update API Portal configuration information in API Gateway.", + "operationId" : "updateAPIPortalConfiguration", + "consumes" : [ "application/json" ], + "produces" : [ "application/json" ], + "parameters" : [ { + "name" : "portalGatewayId", + "in" : "path", + "description" : "Id of the API Portal configuration for update", + "required" : true, + "type" : "string", + "x-example" : "353bd366-47d4-4703-aecf-9cb40cdcc864" + }, { + "in" : "body", + "name" : "body", + "description" : "API Portal configuration payload", + "required" : true, + "schema" : { + "$ref" : "#/definitions/PortalGateway" + }, + "x-examples" : { + "application/json" : "{\r\n\t\"externalPortal\": {\r\n\t\t\"type\": \"apiportal\",\r\n\t\t\"endpointURL\": \"http://apiportal_host:18101\",\r\n\t\t\"endpointTenant\": \"default\",\r\n\t\t\"endpointUsername\": \"providerUser\",\r\n\t\t\"endpointPassword\": \"providerPassword\"\r\n\t},\r\n\t\"gatewayName\": \"MyPortalConfiguration\",\r\n\t\"version\": \"1.0\",\r\n\t\"gatewayURL\": \"http://apigateway_host:5555\",\r\n\t\"gatewayUsername\": \"adminUser\",\r\n\t\"gatewayPassword\": \"adminPassword\"\r\n}" + } + } ], + "responses" : { + "200" : { + "description" : "This status code indicates that the API Portal configuration is updated successfully.", + "schema" : { + "$ref" : "#/definitions/PortalGateway" + }, + "examples" : { + "application/json" : "{\r\n\t\"portalGatewayResponse\": [{\r\n\t\t\"id\": \"c7059719-e434-4b45-9b09-b5176fa8b787\",\r\n\t\t\"gatewayName\": \"myportal\",\r\n\t\t\"gatewayUsername\": \"adminUser\",\r\n\t\t\"gatewayPassword\": \"*****\",\r\n\t\t\"gatewayURL\": \"http://apigateway_host:5555\",\r\n\t\t\"refId\": \"2609fc40-87d2-11e7-1298-d481d790920c\",\r\n\t\t\"externalPortal\": {\r\n\t\t\t\"type\": \"apiportal\",\r\n\t\t\t\"endpointTenant\": \"default\",\r\n\t\t\t\"endpointURL\": \"http://apiportal_host/\",\r\n\t\t\t\"endpointUsername\": \"adminUser\",\r\n\t\t\t\"endpointPassword\": \"*****\"\r\n\t\t},\r\n\t\t\"version\": \"1.0\",\r\n\t\t\"published\": true\r\n\t}]\r\n}" + } + }, + "400" : { + "description" : "This status code indicates that the user has missed some mandatory field that is required to update the API Portal configuration." + }, + "404" : { + "description" : "This status code indicates that the API Portal configuration is not available." + }, + "401" : { + "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." + }, + "500" : { + "description" : "This status code indicates that an error occurred while processing the information in API Gateway or while communicating with API Portal." + } + }, + "security" : [ { + "Basic" : [ ] + } ] + }, + "delete" : { + "description" : "This API allows you to delete an API Portal configuration in API Gateway.", + "operationId" : "deleteAPIPortalConfiguration", + "parameters" : [ { + "name" : "portalGatewayId", + "in" : "path", + "description" : "Id of the API Portal configuration for delete.", + "required" : true, + "type" : "string", + "x-example" : "353bd366-47d4-4703-aecf-9cb40cdcc864" + } ], + "responses" : { + "401" : { + "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." + }, + "204" : { + "description" : "This status code indicates that the API Portal configuration is deleted successfully." + } + }, + "security" : [ { + "Basic" : [ ] + } ] + } + }, + "/portalGateways/communities" : { + "get" : { + "description" : "This API allows you to retrieve the details about communities in API Portal. An API can be published from API Gateway to any of the communities available in API Portal", + "operationId" : "getAPIPortalMetadata", + "produces" : [ "application/json" ], + "parameters" : [ { + "name" : "portalGatewayId", + "in" : "query", + "description" : "Id of the API Portal configuration for retrieval of the community information", + "required" : true, + "type" : "string", + "x-example" : "353bd366-47d4-4703-aecf-9cb40cdcc864" + }, { + "name" : "apiId", + "in" : "query", + "description" : "Id of the API published from API Gateway to API Portal", + "required" : true, + "type" : "string", + "x-example" : "353bd366-47d4-4703-aecf-9cb40cdcc864" + } ], + "responses" : { + "200" : { + "description" : "This status code indicates that the the community information from the API Portal is retrieved successfully.", + "schema" : { + "$ref" : "#/definitions/PortalGatewayCommunitiesData" + }, + "examples" : { + "application/json" : "{\r\n\t\"portalGatewayResponse\": {\r\n\t\t\"provider\": \"mcprga02\",\r\n\t\t\"communities\": {\r\n\t\t\t\"portalCommunities\": [{\r\n\t\t\t\t\"id\": \"3bdf8005-5685-3ef5-b132-de4681963fb6\",\r\n\t\t\t\t\"name\": \"Public Community\",\r\n\t\t\t\t\"description\": \"Public Community\",\r\n\t\t\t\t\"status\": \"NEW\"\r\n\t\t\t}]\r\n\t\t}\r\n\t}\r\n}" + } + }, + "401" : { + "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." + } + }, + "security" : [ { + "Basic" : [ ] + } ] + } + }, + "/approvalConfigurations" : { + "get" : { + "description" : "The method retrieves a list of available approval configurations in API Gateway.", + "operationId" : "getApprovalConfigurations", + "produces" : [ "application/json" ], + "parameters" : [ ], + "responses" : { + "200" : { + "description" : "This status code indicates that a list of the available approval configurations is retrieved successfully.", + "schema" : { + "$ref" : "#/definitions/ApprovalConfiguration" + }, + "examples" : { + "application/json" : "{\r\n \"approvalConfigurations\": [\r\n {\r\n \"id\": \"createApplication\",\r\n \"eventType\": \"createApplication\",\r\n \"isEnabled\": true,\r\n \"approversGroupId\": \"0936de2c-9fb9-4625-b5b0-b7648e0d4103\",\r\n \"approvalMode\": \"anyone\",\r\n \"approvedEmailConfiguration\": {\r\n \"emailSubject\": \"Approval of @event.type\",\r\n \"emailContent\": \"Congratulations @requestor.name !\\n\\nYour request for @event.type has been approved.\",\r\n \"enabled\": false,\r\n \"requestType\": \"approved\"\r\n },\r\n \"rejectedEmailConfiguration\": {\r\n \"emailSubject\": \"Rejection of @event.type\",\r\n \"emailContent\": \"Hello @requestor.name,\\n\\nYour @event.type request has been rejected.\\nReasons:@rejectionReason.\\n\\nBest Regards,\\nAPI Gateway Team\\n\\n*** This notification was sent automatically. Do not reply to this email.***\",\r\n \"enabled\": false,\r\n \"requestType\": \"rejected\"\r\n },\r\n \"initiateApprovalRequestEmailConfiguration\": {\r\n \"emailSubject\": \"Approval request pending\",\r\n \"emailContent\": \"Hello @approver.name,\\n\\n A request by @requestor.name to @event.type needs your review and approval.\\n\\nBest Regards,\\nAPI Gateway Team\\n\\n*** This notification was sent automatically. Do not reply to this email.***\",\r\n \"enabled\": false,\r\n \"requestType\": \"initiate\"\r\n }\r\n }\r\n ]\r\n}" + } + }, + "401" : { + "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." + } + }, + "security" : [ { + "Basic" : [ ] + } ] + }, + "post" : { + "description" : "The method creates an approval configuration in API Gateway.", + "operationId" : "createApprovalConfiguration", + "consumes" : [ "application/json" ], + "produces" : [ "application/json" ], + "parameters" : [ { + "in" : "body", + "name" : "body", + "description" : "This parameter describes the request payload of an approval configuration that is to be created in API Gateway.", + "required" : true, + "schema" : { + "$ref" : "#/definitions/ApprovalConfiguration" + }, + "x-examples" : { + "application/json" : "{\r\n \"approvalConfig\": {\r\n \"id\": \"createApplication\",\r\n \"eventType\": \"createApplication\",\r\n \"isEnabled\": true,\r\n \"approversGroupId\": \"0936de2c-9fb9-4625-b5b0-b7648e0d4103\",\r\n \"approvalMode\": \"anyone\",\r\n \"approvedEmailConfiguration\": {\r\n \"emailSubject\": \"Approval of @event.type\",\r\n \"emailContent\": \"Congratulations @requestor.name !\\n\\nYour request for @event.type has been approved.\",\r\n \"enabled\": false,\r\n \"requestType\": \"approved\"\r\n },\r\n \"rejectedEmailConfiguration\": {\r\n \"emailSubject\": \"Rejection of @event.type\",\r\n \"emailContent\": \"Hello @requestor.name,\\n\\nYour @event.type request has been rejected.\\nReasons:@rejectionReason.\\n\\nBest Regards,\\nAPI Gateway Team\\n\\n*** This notification was sent automatically. Do not reply to this email.***\",\r\n \"enabled\": false,\r\n \"requestType\": \"rejected\"\r\n },\r\n \"initiateApprovalRequestEmailConfiguration\": {\r\n \"emailSubject\": \"Approval request pending\",\r\n \"emailContent\": \"Hello @approver.name,\\n\\n A request by @requestor.name to @event.type needs your review and approval.\\n\\nBest Regards,\\nAPI Gateway Team\\n\\n*** This notification was sent automatically. Do not reply to this email.***\",\r\n \"enabled\": false,\r\n \"requestType\": \"initiate\"\r\n }\r\n }\r\n}" + } + } ], + "responses" : { + "200" : { + "description" : "This status code indicates that the approval configuration has been successfully created in API Gateway.", + "schema" : { + "$ref" : "#/definitions/ApprovalConfiguration" + }, + "examples" : { + "application/json" : "{\r\n \"approvalConfig\": {\r\n \"id\": \"createApplication\",\r\n \"eventType\": \"createApplication\",\r\n \"isEnabled\": true,\r\n \"approversGroupId\": \"0936de2c-9fb9-4625-b5b0-b7648e0d4103\",\r\n \"approvalMode\": \"anyone\",\r\n \"approvedEmailConfiguration\": {\r\n \"emailSubject\": \"Approval of @event.type\",\r\n \"emailContent\": \"Congratulations @requestor.name !\\n\\nYour request for @event.type has been approved.\",\r\n \"enabled\": false,\r\n \"requestType\": \"approved\"\r\n },\r\n \"rejectedEmailConfiguration\": {\r\n \"emailSubject\": \"Rejection of @event.type\",\r\n \"emailContent\": \"Hello @requestor.name,\\n\\nYour @event.type request has been rejected.\\nReasons:@rejectionReason.\\n\\nBest Regards,\\nAPI Gateway Team\\n\\n*** This notification was sent automatically. Do not reply to this email.***\",\r\n \"enabled\": false,\r\n \"requestType\": \"rejected\"\r\n },\r\n \"initiateApprovalRequestEmailConfiguration\": {\r\n \"emailSubject\": \"Approval request pending\",\r\n \"emailContent\": \"Hello @approver.name,\\n\\n A request by @requestor.name to @event.type needs your review and approval.\\n\\nBest Regards,\\nAPI Gateway Team\\n\\n*** This notification was sent automatically. Do not reply to this email.***\",\r\n \"enabled\": false,\r\n \"requestType\": \"initiate\"\r\n }\r\n }\r\n}" + } + }, + "400" : { + "description" : "This status code indicates that the given approval configuration request body is not correct." + }, + "401" : { + "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." + } + }, + "security" : [ { + "Basic" : [ ] + } ] + } + }, + "/approvalConfigurations/{id}" : { + "get" : { + "description" : "The method retrieves the details of a specified approval configuration in API Gateway", + "operationId" : "getApprovalConfiguration", + "produces" : [ "application/json" ], + "parameters" : [ { + "name" : "id", + "in" : "path", + "description" : "This parameter specifies the ID of an approval configuration whose details are to be retrieved in API Gateway.", + "required" : true, + "type" : "string" + } ], + "responses" : { + "200" : { + "description" : "This status code indicates that the details of the specified approval configuration are retrieved successfully.", + "schema" : { + "$ref" : "#/definitions/ApprovalConfiguration" + }, + "examples" : { + "application/json" : "{\r\n \"approvalConfig\": {\r\n \"id\": \"createApplication\",\r\n \"eventType\": \"createApplication\",\r\n \"isEnabled\": true,\r\n \"approversGroupId\": \"0936de2c-9fb9-4625-b5b0-b7648e0d4103\",\r\n \"approvalMode\": \"anyone\",\r\n \"approvedEmailConfiguration\": {\r\n \"emailSubject\": \"Approval of @event.type\",\r\n \"emailContent\": \"Congratulations @requestor.name !\\n\\nYour request for @event.type has been approved.\",\r\n \"enabled\": false,\r\n \"requestType\": \"approved\"\r\n },\r\n \"rejectedEmailConfiguration\": {\r\n \"emailSubject\": \"Rejection of @event.type\",\r\n \"emailContent\": \"Hello @requestor.name,\\n\\nYour @event.type request has been rejected.\\nReasons:@rejectionReason.\\n\\nBest Regards,\\nAPI Gateway Team\\n\\n*** This notification was sent automatically. Do not reply to this email.***\",\r\n \"enabled\": false,\r\n \"requestType\": \"rejected\"\r\n },\r\n \"initiateApprovalRequestEmailConfiguration\": {\r\n \"emailSubject\": \"Approval request pending\",\r\n \"emailContent\": \"Hello @approver.name,\\n\\n A request by @requestor.name to @event.type needs your review and approval.\\n\\nBest Regards,\\nAPI Gateway Team\\n\\n*** This notification was sent automatically. Do not reply to this email.***\",\r\n \"enabled\": false,\r\n \"requestType\": \"initiate\"\r\n }\r\n }\r\n}" + } + }, + "404" : { + "description" : "This status code indicates that an approval configuration with the given ID could not be found in API Gateway." + }, + "401" : { + "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." + } + }, + "security" : [ { + "Basic" : [ ] + } ] + }, + "put" : { + "description" : "The method updates the approval configuration in API Gateway.", + "operationId" : "updateApprovalConfiguration", + "consumes" : [ "application/json" ], + "produces" : [ "application/json" ], + "parameters" : [ { + "in" : "body", + "name" : "body", + "description" : "This parameter describes the request payload of an approval configuration that is to be updated in API Gateway.", + "required" : true, + "schema" : { + "$ref" : "#/definitions/ApprovalConfiguration" + }, + "x-examples" : { + "application/json" : "{\r\n \"approvalConfig\": {\r\n \"id\": \"createApplication\",\r\n \"eventType\": \"createApplication\",\r\n \"isEnabled\": true,\r\n \"approversGroupId\": \"0936de2c-9fb9-4625-b5b0-b7648e0d4103\",\r\n \"approvalMode\": \"anyone\",\r\n \"approvedEmailConfiguration\": {\r\n \"emailSubject\": \"Approval of @event.type\",\r\n \"emailContent\": \"Congratulations @requestor.name !\\n\\nYour request for @event.type has been approved.\",\r\n \"enabled\": false,\r\n \"requestType\": \"approved\"\r\n },\r\n \"rejectedEmailConfiguration\": {\r\n \"emailSubject\": \"Rejection of @event.type\",\r\n \"emailContent\": \"Hello @requestor.name,\\n\\nYour @event.type request has been rejected.\\nReasons:@rejectionReason.\\n\\nBest Regards,\\nAPI Gateway Team\\n\\n*** This notification was sent automatically. Do not reply to this email.***\",\r\n \"enabled\": false,\r\n \"requestType\": \"rejected\"\r\n },\r\n \"initiateApprovalRequestEmailConfiguration\": {\r\n \"emailSubject\": \"Approval request pending\",\r\n \"emailContent\": \"Hello @approver.name,\\n\\n A request by @requestor.name to @event.type needs your review and approval.\\n\\nBest Regards,\\nAPI Gateway Team\\n\\n*** This notification was sent automatically. Do not reply to this email.***\",\r\n \"enabled\": false,\r\n \"requestType\": \"initiate\"\r\n }\r\n }\r\n}" + } + }, { + "name" : "id", + "in" : "path", + "description" : "This parameter specifies the ID of an approval configuration that is to be updated in API Gateway.", + "required" : true, + "type" : "string" + } ], + "responses" : { + "200" : { + "description" : "This status code indicates that the approval configuration has been successfully updated in API Gateway.", + "schema" : { + "$ref" : "#/definitions/ApprovalConfiguration" + }, + "examples" : { + "application/json" : "{\r\n \"approvalConfig\": {\r\n \"id\": \"createApplication\",\r\n \"eventType\": \"createApplication\",\r\n \"isEnabled\": true,\r\n \"approversGroupId\": \"0936de2c-9fb9-4625-b5b0-b7648e0d4103\",\r\n \"approvalMode\": \"anyone\",\r\n \"approvedEmailConfiguration\": {\r\n \"emailSubject\": \"Approval of @event.type\",\r\n \"emailContent\": \"Congratulations @requestor.name !\\n\\nYour request for @event.type has been approved.\",\r\n \"enabled\": false,\r\n \"requestType\": \"approved\"\r\n },\r\n \"rejectedEmailConfiguration\": {\r\n \"emailSubject\": \"Rejection of @event.type\",\r\n \"emailContent\": \"Hello @requestor.name,\\n\\nYour @event.type request has been rejected.\\nReasons:@rejectionReason.\\n\\nBest Regards,\\nAPI Gateway Team\\n\\n*** This notification was sent automatically. Do not reply to this email.***\",\r\n \"enabled\": false,\r\n \"requestType\": \"rejected\"\r\n },\r\n \"initiateApprovalRequestEmailConfiguration\": {\r\n \"emailSubject\": \"Approval request pending\",\r\n \"emailContent\": \"Hello @approver.name,\\n\\n A request by @requestor.name to @event.type needs your review and approval.\\n\\nBest Regards,\\nAPI Gateway Team\\n\\n*** This notification was sent automatically. Do not reply to this email.***\",\r\n \"enabled\": false,\r\n \"requestType\": \"initiate\"\r\n }\r\n }\r\n}" + } + }, + "400" : { + "description" : "This status code indicates that the given approval configuration request body is not correct." + }, + "401" : { + "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." + } + }, + "security" : [ { + "Basic" : [ ] + } ] + }, + "delete" : { + "description" : "The method deletes the specified approval configuration in API Gateway.", + "operationId" : "deleteApprovalConfiguration", + "produces" : [ "application/json" ], + "parameters" : [ { + "name" : "id", + "in" : "path", + "description" : "This parameter specifies the ID of an approval configuration that is to be deleted in API Gateway.", + "required" : true, + "type" : "string" + } ], + "responses" : { + "401" : { + "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." + }, + "204" : { + "description" : "This status code indicates that the specified approval configuration has been successfully deleted from API Gateway." + }, + "404" : { + "description" : "This status code indicates that an approval configuration with the given ID could not be found in API Gateway." + } + }, + "security" : [ { + "Basic" : [ ] + } ] + } + }, + "/is/jmsConnections" : { + "get" : { + "description" : "The method retrieves list of all the JMS connections in API Gateway.", + "operationId" : "getAllJMSConnections", + "consumes" : [ "application/json" ], + "produces" : [ "application/json" ], + "parameters" : [ ], + "responses" : { + "200" : { + "description" : "This status code indicates that the list of JMS connections is successfully retrieved.", + "examples" : { + "application/json" : "{\r\n \"jmsList\": [\r\n {\r\n \"id\": \"JMSConn1\",\r\n \"aliasName\": \"JMSConn1\",\r\n \"enabled\": \"false\",\r\n \"description\": \"adasd\",\r\n \"transactionType\": \"0\",\r\n \"clientID\": \"clientID\",\r\n \"user\": \"user\",\r\n \"password\": \"pwd\",\r\n \"associationType\": \"0\",\r\n \"jndi_jndiAliasName\": \"JNDI_AMQP\",\r\n \"jndi_connectionFactoryLookupName\": \"qpidConnectionFactory\",\r\n \"jndi_automaticallyCreateUMAdminObjects\": \"false\",\r\n \"jndi_enableFollowTheMaster\": \"true\",\r\n \"jndi_connectionFactoryUpdateType\": \"NONE\",\r\n \"jndi_connectionFactoryPollingInterval\": \"0\",\r\n \"classLoader\": \"INTEGRATION_SERVER\",\r\n \"csqSize\": \"-1\",\r\n \"csqDrainInOrder\": \"true\",\r\n \"optTempQueueCreate\": \"true\",\r\n \"allowReplyToConsumer\": \"false\",\r\n \"manageDestinations\": \"true\",\r\n \"allowNewConnectionPerTrigger\": \"true\",\r\n \"producerCachingMode\": \"0\",\r\n \"producerSessionPoolMinSize\": \"0\",\r\n \"producerSessionPoolSize\": \"0\",\r\n \"cacheProducersPoolMinSize\": \"0\",\r\n \"cacheProducersPoolSize\": \"0\",\r\n \"poolTimeout\": \"6000\",\r\n \"cacheProducersQueueList\": \"\",\r\n \"producerMaxRetryAttempts\": \"0\",\r\n \"producerRetryInterval\": \"1000\",\r\n \"um_loggingOutput\": \"0\",\r\n \"um_producerMessageTracking\": \"false\",\r\n \"um_producerIncludedStrings\": \"1000\",\r\n \"um_consumerMessageTracking\": \"false\",\r\n \"um_consumerIncludedStrings\": \"1000\"\r\n },\r\n {\r\n \"id\": \"JMSConn 002\",\r\n \"aliasName\": \"JMSConn 002\",\r\n \"enabled\": \"false\",\r\n \"description\": \"sailesh2\",\r\n \"transactionType\": \"0\",\r\n \"clientID\": \"clientID\",\r\n \"user\": \"user\",\r\n \"password\": \"pwd\",\r\n \"associationType\": \"0\",\r\n \"jndi_jndiAliasName\": \"JNDI_AMQP\",\r\n \"jndi_connectionFactoryLookupName\": \"qpidConnectionFactory\",\r\n \"jndi_automaticallyCreateUMAdminObjects\": \"false\",\r\n \"jndi_enableFollowTheMaster\": \"true\",\r\n \"jndi_connectionFactoryUpdateType\": \"NONE\",\r\n \"jndi_connectionFactoryPollingInterval\": \"0\",\r\n \"classLoader\": \"INTEGRATION_SERVER\",\r\n \"csqSize\": \"-1\",\r\n \"csqDrainInOrder\": \"true\",\r\n \"optTempQueueCreate\": \"true\",\r\n \"allowReplyToConsumer\": \"false\",\r\n \"manageDestinations\": \"true\",\r\n \"allowNewConnectionPerTrigger\": \"true\",\r\n \"producerCachingMode\": \"0\",\r\n \"producerSessionPoolMinSize\": \"0\",\r\n \"producerSessionPoolSize\": \"0\",\r\n \"cacheProducersPoolMinSize\": \"0\",\r\n \"cacheProducersPoolSize\": \"0\",\r\n \"poolTimeout\": \"6000\",\r\n \"cacheProducersQueueList\": \"\",\r\n \"producerMaxRetryAttempts\": \"0\",\r\n \"producerRetryInterval\": \"1000\",\r\n \"um_loggingOutput\": \"0\",\r\n \"um_producerMessageTracking\": \"false\",\r\n \"um_producerIncludedStrings\": \"1000\",\r\n \"um_consumerMessageTracking\": \"1000\",\r\n \"um_consumerIncludedStrings\": \"1000\"\r\n }\r\n ]\r\n}" + } + }, + "401" : { + "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." + } + }, + "security" : [ { + "Basic" : [ ] + } ] + }, + "post" : { + "description" : "The method creates a JMS connection in API Gateway. The API request body must contain the payload for the JMS connection", + "operationId" : "createJMSConnection", + "consumes" : [ "application/json" ], + "produces" : [ "application/json" ], + "parameters" : [ { + "in" : "body", + "name" : "body", + "description" : "", + "required" : true, + "schema" : { + "$ref" : "#/definitions/JMSConnectionAlias" + }, + "x-examples" : { + "application/json" : "{\"aliasName\":\"JMSConn1\",\"enabled\":\"false\",\"description\":\"adasd\",\"transactionType\":\"0\",\"clientID\":\"clientID\",\"user\":\"user\",\"password\":\"pwd\",\"associationType\":\"0\",\"jndi_jndiAliasName\":\"JNDI_AMQP\",\"jndi_connectionFactoryLookupName\":\"qpidConnectionFactory\",\"jndi_automaticallyCreateUMAdminObjects\":\"false\",\"jndi_enableFollowTheMaster\":\"true\",\"jndi_connectionFactoryUpdateType\":\"NONE\",\"jndi_connectionFactoryPollingInterval\":\"0\",\"classLoader\":\"INTEGRATION_SERVER\",\"csqSize\":\"-1\",\"csqDrainInOrder\":\"true\",\"optTempQueueCreate\":\"true\",\"allowReplyToConsumer\":\"false\",\"manageDestinations\":\"true\",\"allowNewConnectionPerTrigger\":\"true\",\"producerCachingMode\":\"0\",\"producerSessionPoolSize\":\"0\",\"producerSessionPoolMinSize\":\"0\",\"cacheProducersPoolMinSize\":\"0\",\"cacheProducersPoolSize\":\"0\",\"poolTimeout\":\"6000\",\"cacheProducersQueueList\":\"\",\"producerMaxRetryAttempts\":\"0\",\"producerRetryInterval\":\"1000\",\"um_loggingOutput\":\"0\",\"um_producerMessageTracking\":\"false\",\"um_producerIncludedStrings\":\"1000\",\"um_consumerMessageTracking\":\"false\",\"um_consumerIncludedStrings\":\"1000\"}\r\n\r\n" + } + } ], + "responses" : { + "201" : { + "description" : "This status code indicates that the JMS connection has been successfully created in API Gateway, and the newly created JMS connection is available in the response body.", + "schema" : { + "$ref" : "#/definitions/JMSConnectionAlias" + }, + "examples" : { + "application/json" : "{\r\n \"jms\": {\r\n \"id\": \"JMSConn11\",\r\n \"aliasName\": \"JMSConn11\",\r\n \"enabled\": \"false\",\r\n \"description\": \"adasd\",\r\n \"transactionType\": \"0\",\r\n \"clientID\": \"clientID\",\r\n \"user\": \"user\",\r\n \"password\": \"pwd\",\r\n \"associationType\": \"0\",\r\n \"jndi_jndiAliasName\": \"JNDI_AMQP\",\r\n \"jndi_connectionFactoryLookupName\": \"qpidConnectionFactory\",\r\n \"jndi_automaticallyCreateUMAdminObjects\": \"false\",\r\n \"jndi_enableFollowTheMaster\": \"true\",\r\n \"jndi_connectionFactoryUpdateType\": \"NONE\",\r\n \"jndi_connectionFactoryPollingInterval\": \"0\",\r\n \"classLoader\": \"INTEGRATION_SERVER\",\r\n \"csqSize\": \"-1\",\r\n \"csqDrainInOrder\": \"true\",\r\n \"optTempQueueCreate\": \"true\",\r\n \"allowReplyToConsumer\": \"false\",\r\n \"manageDestinations\": \"true\",\r\n \"allowNewConnectionPerTrigger\": \"true\",\r\n \"producerCachingMode\": \"0\",\r\n \"producerSessionPoolMinSize\": \"0\",\r\n \"producerSessionPoolSize\": \"0\",\r\n \"cacheProducersPoolMinSize\": \"0\",\r\n \"cacheProducersPoolSize\": \"0\",\r\n \"poolTimeout\": \"6000\",\r\n \"cacheProducersQueueList\": \"\",\r\n \"producerMaxRetryAttempts\": \"0\",\r\n \"producerRetryInterval\": \"1000\",\r\n \"um_loggingOutput\": \"0\",\r\n \"um_producerMessageTracking\": \"false\",\r\n \"um_producerIncludedStrings\": \"1000\",\r\n \"um_consumerMessageTracking\": \"false\",\r\n \"um_consumerIncludedStrings\": \"1000\"\r\n }\r\n}" + } + }, + "401" : { + "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." + }, + "400" : { + "description" : "This status code indicates that the JMS connection with the given name already exists in API Gateway or the request body is not correct.", + "examples" : { + "application/json" : "{}" + } + } + }, + "security" : [ { + "Basic" : [ ] + } ] + }, + "put" : { + "description" : "This REST service is used to update the JMS connection", + "operationId" : "updateJMSConnection", + "consumes" : [ "application/json" ], + "produces" : [ "application/json" ], + "parameters" : [ { + "in" : "body", + "name" : "body", + "description" : "", + "required" : true, + "schema" : { + "$ref" : "#/definitions/JMSConnectionAlias" + }, + "x-examples" : { + "application/json" : "{\r\n \"id\": \"JMSConn11\",\r\n \"aliasName\": \"JMSConn11\",\r\n \"enabled\": \"false\",\r\n \"description\": \"adasd\",\r\n \"transactionType\": \"0\",\r\n \"clientID\": \"clientID\",\r\n \"user\": \"user\",\r\n \"password\": \"pwd\",\r\n \"associationType\": \"0\",\r\n \"jndi_jndiAliasName\": \"JNDI_AMQP\",\r\n \"jndi_connectionFactoryLookupName\": \"qpidConnectionFactory\",\r\n \"jndi_automaticallyCreateUMAdminObjects\": \"false\",\r\n \"jndi_enableFollowTheMaster\": \"true\",\r\n \"jndi_connectionFactoryUpdateType\": \"NONE\",\r\n \"jndi_connectionFactoryPollingInterval\": \"0\",\r\n \"classLoader\": \"INTEGRATION_SERVER\",\r\n \"csqSize\": \"-1\",\r\n \"csqDrainInOrder\": \"true\",\r\n \"optTempQueueCreate\": \"true\",\r\n \"allowReplyToConsumer\": \"false\",\r\n \"manageDestinations\": \"true\",\r\n \"allowNewConnectionPerTrigger\": \"true\",\r\n \"producerCachingMode\": \"0\",\r\n \"producerSessionPoolMinSize\": \"0\",\r\n \"producerSessionPoolSize\": \"0\",\r\n \"cacheProducersPoolMinSize\": \"0\",\r\n \"cacheProducersPoolSize\": \"0\",\r\n \"poolTimeout\": \"6000\",\r\n \"cacheProducersQueueList\": \"\",\r\n \"producerMaxRetryAttempts\": \"0\",\r\n \"producerRetryInterval\": \"1000\",\r\n \"um_loggingOutput\": \"0\",\r\n \"um_producerMessageTracking\": \"false\",\r\n \"um_producerIncludedStrings\": \"1000\",\r\n \"um_consumerMessageTracking\": \"false\",\r\n \"um_consumerIncludedStrings\": \"1000\"\r\n }" + } + } ], + "responses" : { + "200" : { + "description" : "This status code indicates that API Gateway has successfully updated the specified JMS connection and the updated JMS connection details can be found in the response body", + "schema" : { + "$ref" : "#/definitions/JMSConnectionAlias" + }, + "examples" : { + "application/json" : "{\r\n \"jms\": {\r\n \"id\": \"JMSConn11\",\r\n \"aliasName\": \"JMSConn11\",\r\n \"enabled\": \"false\",\r\n \"description\": \"adasd\",\r\n \"transactionType\": \"0\",\r\n \"clientID\": \"clientID\",\r\n \"user\": \"user\",\r\n \"password\": \"pwd\",\r\n \"associationType\": \"0\",\r\n \"jndi_jndiAliasName\": \"JNDI_AMQP\",\r\n \"jndi_connectionFactoryLookupName\": \"qpidConnectionFactory\",\r\n \"jndi_automaticallyCreateUMAdminObjects\": \"false\",\r\n \"jndi_enableFollowTheMaster\": \"true\",\r\n \"jndi_connectionFactoryUpdateType\": \"NONE\",\r\n \"jndi_connectionFactoryPollingInterval\": \"0\",\r\n \"classLoader\": \"INTEGRATION_SERVER\",\r\n \"csqSize\": \"-1\",\r\n \"csqDrainInOrder\": \"true\",\r\n \"optTempQueueCreate\": \"true\",\r\n \"allowReplyToConsumer\": \"false\",\r\n \"manageDestinations\": \"true\",\r\n \"allowNewConnectionPerTrigger\": \"true\",\r\n \"producerCachingMode\": \"0\",\r\n \"producerSessionPoolMinSize\": \"0\",\r\n \"producerSessionPoolSize\": \"0\",\r\n \"cacheProducersPoolMinSize\": \"0\",\r\n \"cacheProducersPoolSize\": \"0\",\r\n \"poolTimeout\": \"6000\",\r\n \"cacheProducersQueueList\": \"\",\r\n \"producerMaxRetryAttempts\": \"0\",\r\n \"producerRetryInterval\": \"1000\",\r\n \"um_loggingOutput\": \"0\",\r\n \"um_producerMessageTracking\": \"false\",\r\n \"um_producerIncludedStrings\": \"1000\",\r\n \"um_consumerMessageTracking\": \"false\",\r\n \"um_consumerIncludedStrings\": \"1000\"\r\n }\r\n}" + } + }, + "401" : { + "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." + }, + "400" : { + "description" : "Tis status code indicates the request payload is not correct and corresponding error details can be seen in the response body", + "examples" : { + "application/json" : "" + } + } + }, + "security" : [ { + "Basic" : [ ] + } ] + } + }, + "/is/jmsConnections/{jmsConnId}" : { + "get" : { + "description" : "The method retrieves the specified JMS connection in API Gateway.", + "operationId" : "getJMSConnection", + "consumes" : [ "application/json" ], + "produces" : [ "application/json" ], + "parameters" : [ { + "name" : "jmsConnId", + "in" : "path", + "description" : "This path parameter is used to specify the JMS connection id which JMS connection needs to be retrived.", + "required" : true, + "type" : "string", + "x-example" : "sampleJMSConn" + } ], + "responses" : { + "200" : { + "description" : "This status code indicates that the specified JMS connections is successfully retrieved.", + "schema" : { + "$ref" : "#/definitions/JMSConnectionAlias" + }, + "examples" : { + "application/json" : "{\r\n \"jms\": {\r\n \"id\": \"JMSConn1\",\r\n \"aliasName\": \"JMSConn1\",\r\n \"enabled\": \"false\",\r\n \"description\": \"adasd\",\r\n \"transactionType\": \"0\",\r\n \"clientID\": \"clientID\",\r\n \"user\": \"user\",\r\n \"password\": \"pwd\",\r\n \"associationType\": \"0\",\r\n \"jndi_jndiAliasName\": \"JNDI_AMQP\",\r\n \"jndi_connectionFactoryLookupName\": \"qpidConnectionFactory\",\r\n \"jndi_automaticallyCreateUMAdminObjects\": \"false\",\r\n \"jndi_enableFollowTheMaster\": \"true\",\r\n \"jndi_connectionFactoryUpdateType\": \"NONE\",\r\n \"jndi_connectionFactoryPollingInterval\": \"0\",\r\n \"classLoader\": \"INTEGRATION_SERVER\",\r\n \"csqSize\": \"-1\",\r\n \"csqDrainInOrder\": \"true\",\r\n \"optTempQueueCreate\": \"true\",\r\n \"allowReplyToConsumer\": \"false\",\r\n \"manageDestinations\": \"true\",\r\n \"allowNewConnectionPerTrigger\": \"true\",\r\n \"producerCachingMode\": \"0\",\r\n \"producerSessionPoolMinSize\": \"0\",\r\n \"producerSessionPoolSize\": \"0\",\r\n \"cacheProducersPoolMinSize\": \"0\",\r\n \"cacheProducersPoolSize\": \"0\",\r\n \"poolTimeout\": \"6000\",\r\n \"cacheProducersQueueList\": \"\",\r\n \"producerMaxRetryAttempts\": \"0\",\r\n \"producerRetryInterval\": \"1000\",\r\n \"um_loggingOutput\": \"0\",\r\n \"um_producerMessageTracking\": \"false\",\r\n \"um_producerIncludedStrings\": \"1000\",\r\n \"um_consumerMessageTracking\": \"false\",\r\n \"um_consumerIncludedStrings\": \"1000\"\r\n }\r\n}" + } + }, + "401" : { + "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." + }, + "404" : { + "description" : "This status code indicates that the JMS id specified is not found in API Gateway", + "examples" : { + "application/json" : "{\r\n \"errorDetails\": \" Exception occured : The JMS settings object with the given ID: JMSConn11 couldn't found\"\r\n}" + } + } + }, + "security" : [ { + "Basic" : [ ] + } ] + }, + "delete" : { + "description" : "This delete request will delete the JMS connection based on the JMS connection id which is specified in path", + "operationId" : "deleteJMSConnection", + "consumes" : [ "application/json" ], + "produces" : [ "application/json" ], + "parameters" : [ { + "name" : "jmsConnId", + "in" : "path", + "description" : "This path parameter is used to specify the JMS connection id for which JMS connection needs to deleted.", + "required" : true, + "type" : "string", + "x-example" : "sampleJMSConn" + } ], + "responses" : { + "204" : { + "description" : "This status code indicates that the specified JMS connection is successfully deleted" + }, + "401" : { + "description" : "This status code indicates either user didn't provide any user credential or user doesn't have API Gateway Administrator or API Gateway provider access to delete the assertion." + }, + "404" : { + "description" : "This status code indicates that the corresponding JMS connection id does not exist", + "examples" : { + "application/json" : "{\r\n \"errorDetails\": \" Unable to find the resource: 685e99ee-0e1b-4afa-8ff3-4322cf2965661\"\r\n}" + } + } + }, + "security" : [ { + "Basic" : [ ] + } ] + } + }, + "/is/jmsConnections/{jmsConnId}/enable" : { + "put" : { + "description" : "The method enables the specified JMS connections in API Gateway.", + "operationId" : "enableJMSConnection", + "consumes" : [ "application/json" ], + "produces" : [ "application/json" ], + "parameters" : [ { + "name" : "jmsConnId", + "in" : "path", + "description" : "This path parameter is used to specify the JMS connection id which JMS connection needs to be enabled.", + "required" : true, + "type" : "string", + "x-example" : "sampleJMSConn" + } ], + "responses" : { + "200" : { + "description" : "This status code indicates that the specified JMS connections is successfully enabled.", + "examples" : { + "application/json" : "{\r\n \"status\": \"JMS Connection Alias \\\"JMSConn11\\\" set to enabled.\",\r\n \"result\": true\r\n}" + } + }, + "401" : { + "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." + }, + "500" : { + "description" : "" + } + }, + "security" : [ { + "Basic" : [ ] + } ] + } + }, + "/is/jmsConnections/{jmsConnId}/disable" : { + "put" : { + "description" : "The method disables the specified JMS connections in API Gateway.", + "operationId" : "disableJMSConnection", + "consumes" : [ "application/json" ], + "produces" : [ "application/json" ], + "parameters" : [ { + "name" : "jmsConnId", + "in" : "path", + "description" : "This path parameter is used to specify the JMS connection id which JMS connection needs to be disabled.", + "required" : true, + "type" : "string", + "x-example" : "sampleJMSConn" + } ], + "responses" : { + "200" : { + "description" : "This status code indicates that the specified JMS connections is successfully disabled.", + "examples" : { + "application/json" : "{\r\n \"status\": \"JMS Connection Alias \\\"JMSConn11\\\" set to disabled.\",\r\n \"result\": true\r\n}" + } + }, + "401" : { + "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." + }, + "500" : { + "description" : "" + } + }, + "security" : [ { + "Basic" : [ ] + } ] + } + }, + "/apitransactions/jobs/{jobId}" : { + "get" : { + "description" : "Use this method to know the status of a specific job. This method returns the status and file name (in case of archive process) as a response. The user should be part of API-Gateway-Administrators group or else should have 'Manage purge and restore runtime events' privilege to perform this operation", + "operationId" : "trackJobStatus", + "consumes" : [ "application/json" ], + "produces" : [ "application/json" ], + "parameters" : [ { + "name" : "jobId", + "in" : "path", + "description" : "This parameter indicates the job Id. job Id is needed to identify and track the status of a job which has been initiated earlier. Ex: jobId=1504011632215", + "required" : true, + "type" : "string", + "x-example" : "1234432412312" + } ], + "responses" : { + "200" : { + "description" : "This response indicates that the status has been returned to the requestor.", + "examples" : { + "application/json" : "{\r\n \"status\": \"Completed\",\r\n \"Filename\": \"default-2017-08-31-1504177207377\"\r\n}" + } + }, + "401" : { + "description" : "This response indicates that invalid credentials have been provided for the request." + }, + "500" : { + "description" : "This response indicates that the server has encountered an error while returning the status. " + } + }, + "security" : [ { + "Basic" : [ ] + } ] + } + }, + "/apitransactions/jobs" : { + "get" : { + "description" : "This method returns a list of pending jobs. Every time you initiate archive, restore or purge process you will get the job id as a response. You can then use the specific job id to query the status of the initiated operation. The user should be part of API-Gateway-Administrators group or else should have 'Manage purge and restore runtime events' privilege to perform this operation.", + "operationId" : "listAllPendingJobs", + "consumes" : [ "application/json" ], + "produces" : [ "application/json" ], + "parameters" : [ ], + "responses" : { + "200" : { + "description" : "This response indicates that the list of in progress job ids has been returned to the requestor.", + "examples" : { + "application/json" : "{\r\n \"pendingJobs\": [124234,3312312]\r\n}" + } + }, + "401" : { + "description" : "This response indicates that invalid credentials have been provided for the request." + }, + "500" : { + "description" : "This response indicates that the server has encountered an error while returning the list of in progress job ids. " + } + }, + "security" : [ { + "Basic" : [ ] + } ] + } + }, + "/is/kerberos" : { + "get" : { + "description" : "Retrieves the configured Kerberos settings from API Gateway.", + "operationId" : "getKerberosSetting", + "produces" : [ "application/json" ], + "parameters" : [ ], + "responses" : { + "200" : { + "description" : "This status code indicates that the kerberos setting has been successfully retrieved from API Gateway.", + "schema" : { + "$ref" : "#/definitions/KerberosSettings" + }, + "examples" : { + "application/json" : "{\r\n\t\"kerberosRealm\": \"krbRelam\",\r\n\t\"kerberosKDC\": \"krbDistCenter\",\r\n\t\"useSubjectCreds\": false,\r\n\t\"kerberosConfigContents\": \"\"\r\n}" + } + }, + "400" : { + "description" : "This status code indicates invalid request or bad input." + }, + "401" : { + "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." + }, + "404" : { + "description" : "This status code indicates that the requested resource is not found." + }, + "405" : { + "description" : "This status code indicates that the requested HTTP method is not supported for the resource." + }, + "500" : { + "description" : "This status code indicates an error occurred while fetching the configured Kerberos settings from API Gateway." + } + }, + "security" : [ { + "Basic" : [ ] + } ] + }, + "put" : { + "operationId" : "updateKerberos", + "consumes" : [ "application/json" ], + "produces" : [ "application/json" ], + "parameters" : [ { + "in" : "body", + "name" : "body", + "description" : "The request payload for Kerberos settings in API Gateway.", + "required" : true, + "schema" : { + "$ref" : "#/definitions/KerberosSettings" + }, + "x-examples" : { + "application/json" : "{\r\n\t\"kerberosRealm\": \"krbRelam\",\r\n\t\"kerberosKDC\": \"krbDistCenter\",\r\n\t\"useSubjectCreds\": false,\r\n\t\"kerberosConfigContents\": \"\"\r\n}" + } + } ], + "responses" : { + "200" : { + "description" : "This status code indicates that the configured Kerberos settings have been successfully persisted in API Gateway." + }, + "400" : { + "description" : "This status code indicates invalid request or bad input." + }, + "401" : { + "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." + }, + "404" : { + "description" : "This status code indicates that the requested resource is not found." + }, + "405" : { + "description" : "This status code indicates that the requested HTTP method is not supported for the resource." + }, + "500" : { + "description" : "This status code indicates an error occurred while persisting the Kerberos settings in API Gateway." + } + }, + "security" : [ { + "Basic" : [ ] + } ] + } + }, + "/is/jmsTriggers" : { + "get" : { + "description" : "The method retrieves list of all JMS triggers in API Gateway.", + "operationId" : "getAllJMSTriggers", + "consumes" : [ "application/json" ], + "produces" : [ "application/json" ], + "parameters" : [ ], + "responses" : { + "200" : { + "description" : "This status code indicates that the list of JMS triggers is successfully retrieved.", + "examples" : { + "application/json" : "{\r\n \"jmsTriggerList\": [\r\n {\r\n \"id\": \"wm.namespace.ws:wseTrigger_AMQP_PROVIDER_ALIAS\",\r\n \"triggerName\": \"wm.namespace.ws:wseTrigger_AMQP_PROVIDER_ALIAS\",\r\n \"aliasName\": \"DEFAULT_IS_JMS_CONNECTION\",\r\n \"destinationName\": \"wseQueue_AMQP_PROVIDER_ALIAS\",\r\n \"enabled\": \"false\",\r\n \"isConcurrent\": \"false\",\r\n \"maxExecutionThreads\": \"1\",\r\n \"connectionCount\": \"1\",\r\n \"currentThreads\": \"-1\",\r\n \"state\": \"Disabled\",\r\n \"destinationType\": \"Queue\",\r\n \"jmsMessageSelector\": \"N/A\",\r\n \"durableSubscribeName\": \"N/A\",\r\n \"ignoreLocalPublished\": \"N/A\",\r\n \"status\": \"Not Running (trigger disabled)\"\r\n }\r\n ]\r\n}" + } + }, + "401" : { + "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." + }, + "404" : { + "description" : "" + } + }, + "security" : [ { + "Basic" : [ ] + } ] + }, + "put" : { + "description" : "This REST service is used to update the JMS trigger", + "operationId" : "updateJMSTrigger", + "consumes" : [ "application/json" ], + "produces" : [ "application/json" ], + "parameters" : [ { + "in" : "body", + "name" : "body", + "description" : "", + "required" : true, + "schema" : { + "$ref" : "#/definitions/JMSTrigger" + }, + "x-examples" : { + "application/json" : "\"jmsTrigger\": {\r\n \"id\": \"wm.namespace.ws:wseTrigger_AMQP_PROVIDER_ALIAS\",\r\n \"triggerName\": \"wm.namespace.ws:wseTrigger_AMQP_PROVIDER_ALIAS\",\r\n \"aliasName\": \"DEFAULT_IS_JMS_CONNECTION\",\r\n \"destinationName\": \"wseQueue_AMQP_PROVIDER_ALIAS\",\r\n \"enabled\": \"false\",\r\n \"isConcurrent\": \"false\",\r\n \"maxExecutionThreads\": \"1\",\r\n \"connectionCount\": \"1\",\r\n \"currentThreads\": \"-1\",\r\n \"state\": \"Disabled\",\r\n \"destinationType\": \"Queue\",\r\n \"jmsMessageSelector\": \"N/A\",\r\n \"durableSubscribeName\": \"N/A\",\r\n \"ignoreLocalPublished\": \"N/A\",\r\n \"status\": \"Not Running (trigger disabled)\"\r\n }" + } + } ], + "responses" : { + "200" : { + "description" : "This status code indicates that API Gateway has successfully updated the specified JMS trigger and the updated JMS trigger details can be found in the response body", + "schema" : { + "$ref" : "#/definitions/JMSTrigger" + }, + "examples" : { + "application/json" : "{\r\n \"jmsTrigger\": {\r\n \"id\": \"wm.namespace.ws:wseTrigger_AMQP_PROVIDER_ALIAS\",\r\n \"triggerName\": \"wm.namespace.ws:wseTrigger_AMQP_PROVIDER_ALIAS\",\r\n \"aliasName\": \"DEFAULT_IS_JMS_CONNECTION\",\r\n \"destinationName\": \"wseQueue_AMQP_PROVIDER_ALIAS\",\r\n \"enabled\": \"false\",\r\n \"isConcurrent\": \"false\",\r\n \"maxExecutionThreads\": \"1\",\r\n \"connectionCount\": \"1\",\r\n \"currentThreads\": \"-1\",\r\n \"state\": \"Disabled\",\r\n \"destinationType\": \"Queue\",\r\n \"jmsMessageSelector\": \"N/A\",\r\n \"durableSubscribeName\": \"N/A\",\r\n \"ignoreLocalPublished\": \"N/A\",\r\n \"status\": \"Not Running (trigger disabled)\"\r\n }\r\n}" + } + }, + "401" : { + "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." + }, + "400" : { + "description" : "Tis status code indicates the request payload is not correct and corresponding error details can be seen in the response body", + "examples" : { + "application/json" : "" + } + } + }, + "security" : [ { + "Basic" : [ ] + } ] + } + }, + "/is/jmsTriggers/{jmsTriggerId}/enable" : { + "put" : { + "description" : "The method enables the specified JMS trigger in API Gateway.", + "operationId" : "enableJMSTrigger", + "consumes" : [ "application/json" ], + "produces" : [ "application/json" ], + "parameters" : [ { + "name" : "jmsTriggerId", + "in" : "path", + "description" : "This path parameter is used to specify the JMS trigger id which JMS trigger needs to be enabled.", + "required" : true, + "type" : "string", + "x-example" : "sampleJMSConn" + } ], + "responses" : { + "200" : { + "description" : "This status code indicates that the specified JMS trigger is successfully enabled.", + "examples" : { + "application/json" : "{\r\n \"status\": \"JMS Trigger(s) enabled.\",\r\n \"result\": true\r\n}" + } + }, + "401" : { + "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." + }, + "500" : { + "description" : "" + } + }, + "security" : [ { + "Basic" : [ ] + } ] + } + }, + "/is/jmsTriggers/{jmsTriggerId}/disable" : { + "put" : { + "description" : "The method disables the specified JMS trigger in API Gateway.", + "operationId" : "disableJMSTrigger", + "consumes" : [ "application/json" ], + "produces" : [ "application/json" ], + "parameters" : [ { + "name" : "jmsTriggerId", + "in" : "path", + "description" : "This path parameter is used to specify the JMS trigger id which JMS trigger needs to be disabled.", + "required" : true, + "type" : "string", + "x-example" : "sampleJMSConn" + } ], + "responses" : { + "200" : { + "description" : "This status code indicates that the specified JMS trigger is successfully disabled.", + "examples" : { + "application/json" : "{\r\n \"status\": \"JMS Trigger(s) disabled.\",\r\n \"result\": true\r\n}" + } + }, + "401" : { + "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." + }, + "500" : { + "description" : "" + } + }, + "security" : [ { + "Basic" : [ ] + } ] + } + }, + "/is/jmsTriggers/{jmsTriggerId}" : { + "get" : { + "description" : "The method retrieves the specified JMS trigger in API Gateway.", + "operationId" : "getJMSTrigger", + "consumes" : [ "application/json" ], + "produces" : [ "application/json" ], + "parameters" : [ { + "name" : "jmsTriggerId", + "in" : "path", + "description" : "This path parameter is used to specify the JMS trigger id which JMS trigger needs to be retrieved.", + "required" : true, + "type" : "string", + "x-example" : "sampleJmsTrigger" + } ], + "responses" : { + "200" : { + "description" : "This status code indicates that the specified JMS trigger is successfully retrieved.", + "schema" : { + "$ref" : "#/definitions/JMSTrigger" + }, + "examples" : { + "application/json" : "{\r\n \"jmsTrigger\": {\r\n \"id\": \"wm.namespace.ws:wseTrigger_AMQP_PROVIDER_ALIAS\",\r\n \"triggerName\": \"wm.namespace.ws:wseTrigger_AMQP_PROVIDER_ALIAS\",\r\n \"aliasName\": \"DEFAULT_IS_JMS_CONNECTION\",\r\n \"destinationName\": \"wseQueue_AMQP_PROVIDER_ALIAS\",\r\n \"enabled\": \"false\",\r\n \"isConcurrent\": \"false\",\r\n \"maxExecutionThreads\": \"1\",\r\n \"connectionCount\": \"1\",\r\n \"currentThreads\": \"-1\",\r\n \"state\": \"Disabled\",\r\n \"destinationType\": \"Queue\",\r\n \"jmsMessageSelector\": \"N/A\",\r\n \"durableSubscribeName\": \"N/A\",\r\n \"ignoreLocalPublished\": \"N/A\",\r\n \"status\": \"Not Running (trigger disabled)\"\r\n }\r\n}" + } + }, + "401" : { + "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." + }, + "404" : { + "description" : "This status code indicates that the JMS trigger id specified is not found in API Gateway", + "examples" : { + "application/json" : "{\r\n \"errorDetails\": \" Exception occured : The JMS trigger object with the given ID: JMSTrigger11 couldn't found\"\r\n}" + } + } + }, + "security" : [ { + "Basic" : [ ] + } ] + } + }, + "/is/jndi" : { + "get" : { + "description" : "The method retrieves list of all JNDI configurations in API Gateway.", + "operationId" : "listAllJNDI", + "consumes" : [ "application/json" ], + "produces" : [ "application/json" ], + "parameters" : [ ], + "responses" : { + "200" : { + "description" : "This status code indicates that the list of JNDI configurations is successfully retrieved.", + "examples" : { + "application/json" : "{\r\n \"jndiList\": [\r\n {\r\n \"id\": \"JNDI_AMQP\",\r\n \"jndiAliasName\": \"JNDI_AMQP\",\r\n \"description\": \"JNDI_AMQP\",\r\n \"initialContextFactory\": \"org.apache.qpid.jms.jndi.JmsInitialContextFactory\",\r\n \"providerURL\": \"C:\\\\APIGateway1\\\\IntegrationServer\\\\lib\\\\jars\\\\AMQP.properties\"\r\n },\r\n {\r\n \"id\": \"JNDI_AMQP2\",\r\n \"jndiAliasName\": \"JNDI_AMQP2\",\r\n \"description\": \"JNDI_AMQP\",\r\n \"initialContextFactory\": \"org.apache.qpid.jms.jndi.JmsInitialContextFactory\",\r\n \"providerURL\": \"C:\\\\APIGateway1\\\\IntegrationServer\\\\lib\\\\jars\\\\AMQP.properties\"\r\n }\r\n ]\r\n}" + } + }, + "401" : { + "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." + } + }, + "security" : [ { + "Basic" : [ ] + } ] + }, + "post" : { + "description" : "The method creates a JNDI configuration in API Gateway. The API request body must contain the payload for the JNDI configuration", + "operationId" : "createJNDI", + "consumes" : [ "application/json" ], + "produces" : [ "application/json" ], + "parameters" : [ { + "in" : "body", + "name" : "body", + "description" : "", + "required" : true, + "schema" : { + "$ref" : "#/definitions/JNDIProviderAlias" + }, + "x-examples" : { + "application/json" : "{\"jndiAliasName\":\"JNDIALIAS22\",\"description\":\"new des\",\"initialContextFactory\":\"org.apache.qpid.jms.jndi.JmsInitialContextFactory\",\"providerURL\": \"C:\\\\APIGateway1\\\\IntegrationServer\\\\lib\\\\jars\\\\AMQP.properties\"}" + } + } ], + "responses" : { + "201" : { + "description" : "This status code indicates that the JNDI configuration has been successfully created in API Gateway, and the newly created JNDI configuration is available in the response body.", + "schema" : { + "$ref" : "#/definitions/JNDIProviderAlias" + }, + "examples" : { + "application/json" : "{\r\n \"jndi\": {\r\n \"id\": \"JNDI_AMQPSample\",\r\n \"jndiAliasName\": \"JNDI_AMQPSample\",\r\n \"description\": \"JNDI_AMQP\",\r\n \"initialContextFactory\": \"org.apache.qpid.jms.jndi.JmsInitialContextFactory\",\r\n \"providerURL\": \"C:\\\\APIGateway1\\\\IntegrationServer\\\\lib\\\\jars\\\\AMQP.properties\"\r\n }\r\n}" + } + }, + "401" : { + "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." + }, + "400" : { + "description" : "This status code indicates that the JNDI configuration with the given name already exists in API Gateway or the request body is not correct.", + "examples" : { + "application/json" : "{}" + } + } + }, + "security" : [ { + "Basic" : [ ] + } ] + }, + "put" : { + "description" : "This REST service is used to update the JNDI configuration", + "operationId" : "updateJNDI", + "consumes" : [ "application/json" ], + "produces" : [ "application/json" ], + "parameters" : [ { + "in" : "body", + "name" : "body", + "description" : "", + "required" : true, + "schema" : { + "$ref" : "#/definitions/JNDIProviderAlias" + }, + "x-examples" : { + "application/json" : "{\r\n \"id\": \"JNDI_AMQP\",\r\n \"jndiAliasName\": \"JNDI_AMQP\",\r\n \"description\": \"JNDI_AMQP\",\r\n \"initialContextFactory\": \"org.apache.qpid.jms.jndi.JmsInitialContextFactory\",\r\n \"providerURL\": \"C:\\\\APIGateway1\\\\IntegrationServer\\\\lib\\\\jars\\\\AMQP.properties\"\r\n }" + } + } ], + "responses" : { + "200" : { + "description" : "This status code indicates that API Gateway has successfully updated the specified JNDI configuration and the updated JNDI configuration details can be found in the response body", + "schema" : { + "$ref" : "#/definitions/JNDIProviderAlias" + }, + "examples" : { + "application/json" : "{\r\n \"jndi\": {\r\n \"id\": \"JNDI_AMQP\",\r\n \"jndiAliasName\": \"JNDI_AMQP\",\r\n \"description\": \"JNDI_AMQP\",\r\n \"initialContextFactory\": \"org.apache.qpid.jms.jndi.JmsInitialContextFactory\",\r\n \"providerURL\": \"C:\\\\APIGateway1\\\\IntegrationServer\\\\lib\\\\jars\\\\AMQP.properties\"\r\n }\r\n}" + } + }, + "401" : { + "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." + }, + "400" : { + "description" : "Tis status code indicates the request payload is not correct and corresponding error details can be seen in the response body", + "examples" : { + "application/json" : "{\r\n \"errorDetails\": \"Unable to create or update JNDI settings. providerURL should not be null\"\r\n}" + } + } + }, + "security" : [ { + "Basic" : [ ] + } ] + } + }, + "/is/jndi/{jndiId}" : { + "get" : { + "description" : "The method retrieves the specified JNDI configuration in API Gateway.", + "operationId" : "listJNDI", + "consumes" : [ "application/json" ], + "produces" : [ "application/json" ], + "parameters" : [ { + "name" : "jndiId", + "in" : "path", + "description" : "This path parameter is used to specify the JNDI configuration id which JNDI configuration needs to be retrived.", + "required" : true, + "type" : "string", + "x-example" : "sampleJNDI" + } ], + "responses" : { + "200" : { + "description" : "This status code indicates that the specified JNDI configuration is successfully retrieved.", + "schema" : { + "$ref" : "#/definitions/JNDIProviderAlias" + }, + "examples" : { + "application/json" : "{\r\n \"jndi\": {\r\n \"id\": \"JNDI_AMQP\",\r\n \"jndiAliasName\": \"JNDI_AMQP\",\r\n \"description\": \"JNDI_AMQP\",\r\n \"initialContextFactory\": \"org.apache.qpid.jms.jndi.JmsInitialContextFactory\",\r\n \"providerURL\": \"C:\\\\APIGateway1\\\\IntegrationServer\\\\lib\\\\jars\\\\AMQP.properties\"\r\n }\r\n}" + } + }, + "401" : { + "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." + } + }, + "security" : [ { + "Basic" : [ ] + } ] + }, + "delete" : { + "description" : "This delete request will delete the JNDI configuration based on the JNDI id which is specified in path", + "operationId" : "deleteJNDI", + "consumes" : [ "application/json" ], + "produces" : [ "application/json" ], + "parameters" : [ { + "name" : "jndiId", + "in" : "path", + "description" : "This path parameter is used to specify the JNDI id for which JNDI configuration needs to deleted.", + "required" : true, + "type" : "string", + "x-example" : "sampleJNDI" + } ], + "responses" : { + "204" : { + "description" : "This status code indicates that the specified JNDI configuration is successfully deleted" + }, + "401" : { + "description" : "This status code indicates either user didn't provide any user credential or user doesn't have API Gateway Administrator or API Gateway provider access to delete the assertion." + }, + "404" : { + "description" : "This status code indicates that the corresponding JNDI id does not exist", + "examples" : { + "application/json" : "{\r\n \"errorDetails\": \" Unable to find the resource: 685e99ee-0e1b-4afa-8ff3-4322cf2965661\"\r\n}" + } + } + }, + "security" : [ { + "Basic" : [ ] + } ] + } + }, + "/is/jndi/{jndiId}/test" : { + "get" : { + "description" : "The method is to test the given JNDI configuration in API Gateway.", + "operationId" : "testJNDI", + "consumes" : [ "application/json" ], + "produces" : [ "application/json" ], + "parameters" : [ { + "name" : "jndiId", + "in" : "path", + "required" : true, + "type" : "string", + "x-example" : "sampleJNDI" + } ], + "responses" : { + "200" : { + "description" : "This status code indicates that test result of the given JNDI configuration is successfully returned.", + "examples" : { + "application/json" : "{\r\n \"jndiTest\": {\r\n \"jndiAliasName\": \"JNDI_AMQP\",\r\n \"messages\": \"Test lookup successful\",\r\n \"test\": \"success\",\r\n \"jndiLookupData\": [\r\n \"dynamicQueues: org.apache.qpid.jms.jndi.JmsInitialContextFactory$1\",\r\n \"dynamicTopics: org.apache.qpid.jms.jndi.JmsInitialContextFactory$2\",\r\n \"qpidConnectionFactory: org.apache.qpid.jms.JmsConnectionFactory\"\r\n ]\r\n }\r\n}" + } + }, + "401" : { + "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." + } + }, + "security" : [ { + "Basic" : [ ] + } ] + } + }, + "/is/jndi/template" : { + "get" : { + "description" : "The method retrieves list of all JNDI templates in API Gateway.", + "operationId" : "fetchJNDITemplates", + "consumes" : [ "application/json" ], + "produces" : [ "application/json" ], + "parameters" : [ { + "name" : "jndiId", + "in" : "path", + "required" : true, + "type" : "string", + "x-example" : "sampleJNDI" + } ], + "responses" : { + "200" : { + "description" : "This status code indicates that the list of JNDI templates is successfully retrieved.", + "examples" : { + "application/json" : "{\r\n \"jndiTemplates\": [\r\n {\r\n \"name\": \"Broker\",\r\n \"context\": \"com.webmethods.jms.naming.WmJmsNamingCtxFactory\",\r\n \"url\": \"wmjmsnaming://@:6849\",\r\n \"otherProps\": \"com.webmethods.jms.naming.clientgroup=admin\"\r\n },\r\n {\r\n \"name\": \"UM\",\r\n \"context\": \"com.pcbsys.nirvana.nSpace.NirvanaContextFactory\",\r\n \"url\": \"nsp://:9000/\",\r\n \"otherProps\": \"\"\r\n },\r\n {\r\n \"name\": \"file system\",\r\n \"context\": \"com.sun.jndi.fscontext.RefFSContextFactory\",\r\n \"url\": \"file:/\",\r\n \"otherProps\": \"\"\r\n },\r\n {\r\n \"name\": \"LDAP\",\r\n \"context\": \"com.sun.jndi.ldap.LdapCtxFactory\",\r\n \"url\": \"ldap://:389\",\r\n \"otherProps\": \"\"\r\n },\r\n {\r\n \"name\": \"JBoss\",\r\n \"context\": \"org.jnp.interfaces.NamingContextFactory\",\r\n \"url\": \"jnp://:1099\",\r\n \"otherProps\": \"java.naming.factory.url.pkgs=org.jboss.naming:org.jnp.interfaces\"\r\n },\r\n {\r\n \"name\": \"WebLogic\",\r\n \"context\": \"weblogic.jndi.WLInitialContextFactory\",\r\n \"url\": \"t3://:7001\",\r\n \"otherProps\": \"\"\r\n }\r\n ]\r\n}" + } + }, + "401" : { + "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." + } + }, + "security" : [ { + "Basic" : [ ] + } ] + } + }, + "/apitransactions" : { + "get" : { + "description" : "The GET method is used to download the api transactions data and data to be downloaded is filtered based on the input parameters. The user should be part of API-Gateway-Administrators group or else should have 'Manage purge and restore runtime events' privilege to perform this operation.", + "operationId" : "downloadAPITransaction", + "consumes" : [ "application/json" ], + "produces" : [ "application/zip" ], + "parameters" : [ { + "name" : "duration", + "in" : "query", + "description" : "All the api transactions that are older than the value specified will be downloaded. Ex: duration='2d'. Possible values are d(days),M(months),y(years), lets say a. 2d means 2days b. 1M means 1 month c. 1y means 1 year. Either one of (startDate&endDate) or duration is a mandatory parameter", + "required" : false, + "type" : "string", + "x-example" : "duration=2d" + }, { + "name" : "startDate", + "in" : "query", + "description" : "This is a date parameter. All the specified api transactions which satiesfies the startDate and endDate criteria will be downloaded. Example value: startDate=2017-12-18 00:00:00 and endDate=2017-12-19 00:00:00. Either one of (startDate and endDate) or duration is a mandatory parameter", + "required" : true, + "type" : "string", + "x-example" : "startDate=2017-10-10 00:00:00" + }, { + "name" : "endDate", + "in" : "query", + "description" : "This is a date parameter. All the specified api transactions which satiesfies the startDate and endDate criteria will be downloaded. Example value: startDate=2017-12-18 00:00:00 and endDate=2017-12-19 00:00:00. Either one of (startDate and endDate) or duration is a mandatory parameter", + "required" : true, + "type" : "string", + "x-example" : "endtDate=2017-10-10 00:00:00" + }, { + "name" : "eventType", + "in" : "query", + "description" : "This parameter is used to specify the event type that needs to be downloaded. specify any specific type to download that particular event type alone. Ex: eventType=transactionalEvents. The available event types are as follows 1.transactionalEvents 2.monitorEvents 3.errorEvents 4.performanceMetrics 5.threatProtectionEvents 6.lifecycleEvents 7.policyViolationEvents 8.auditLogs 9.applicationlogs", + "required" : true, + "type" : "string", + "x-example" : "eventType=policyViolationEvents" + } ], + "responses" : { + "200" : { + "description" : "This response indicates that the api transactions zip file has been downloaded successfully.", + "examples" : { + "application/zip" : "attachment; filename=\"auditlogs.zip\"" + } + }, + "401" : { + "description" : "This response indicates that invalid credentials have been provided for the request." + }, + "400" : { + "description" : "This status code indicates that the request URL is not valid." + }, + "500" : { + "description" : "This response indicates that the server has encountered an error while downloading the api transactions. " + } + }, + "security" : [ { + "Basic" : [ ] + } ] + }, + "delete" : { + "description" : "The DELETE method is used to purge the api transactions data and data to be purged is filtered based on the input parameters. This method returns the job id as response and the job id is used to track the job status. See /apitransactions/jobs/{jobId} for more details. The user should be part of API-Gateway-Administrators group or else should have 'Manage purge and restore runtime events' privilege to perform this operation.", + "operationId" : "purgeAPITransactions", + "consumes" : [ "application/json" ], + "produces" : [ "application/json" ], + "parameters" : [ { + "name" : "action", + "in" : "query", + "description" : "This is an optional query parameter. Sometimes its better to take backup before purging the data . If you specify the action value as \"archiveAndPurge\", API Gateway will perform an archive before purging the data.", + "required" : false, + "type" : "string", + "x-example" : "action=archiveAndPurge" + }, { + "name" : "until", + "in" : "query", + "description" : "This is a date parameter. All the specified api transactions until the given date will be purged. Example value: until=2017-12-18 00:00:00. Either one of until or duration is a mandatory parameter", + "required" : true, + "type" : "string", + "x-example" : "until=2017-10-10 00:00:00" + }, { + "name" : "olderThan", + "in" : "query", + "description" : "All the api transactions that are older than the value specified will be purged. Ex: olderThan='2d'. Possible values are d(days),M(months),y(years), lets say a. 2d means 2days b. 1M means 1 month c. 1y means 1 year", + "required" : false, + "type" : "string", + "x-example" : "olderThan=2d" + }, { + "name" : "eventType", + "in" : "query", + "description" : "This parameter is used to specify the event type that needs to be purged. Specify eventType=ALL to purge all the events and specify any specific type to purge that particular event type alone. Ex: eventType=transactionalEvents. The available event types are as follows 1.transactionalEvents 2.monitorEvents 3.errorEvents 4.performanceMetrics 5.threatProtectionEvents 6.lifecycleEvents 7.policyViolationEvents 8.auditLogs 9.applicationlogs", + "required" : true, + "type" : "string", + "x-example" : "eventType=ALL" + } ], + "responses" : { + "202" : { + "description" : "This response indicates that the purge process has been started and returned the jobId to track it further.", + "examples" : { + "application/json" : "{\r\n \"jobId\": \"1504177213671\"\r\n}" + } + }, + "401" : { + "description" : "This response indicates that invalid credentials have been provided for the request." + }, + "400" : { + "description" : "This status code indicates that the request URL is not valid." + }, + "500" : { + "description" : "This response indicates that the server has encountered an error while purging the api transactions. " + } + }, + "security" : [ { + "Basic" : [ ] + } ] + } + } + }, + "securityDefinitions" : { + "Basic" : { + "description" : "API Gateway Administrator and API Gateway provider", + "type" : "basic" + } + }, + "definitions" : { + "URLAliasSettings" : { + "type" : "object", + "required" : [ "alias", "package" ], + "properties" : { + "id" : { + "type" : "string", + "description" : "URL Aliases ID", + "readOnly" : true + }, + "alias" : { + "type" : "string", + "description" : "The unique alias name given for the URL aliases. When invoked with this alias, the path will be substituted." + }, + "urlPath" : { + "type" : "string", + "description" : "The default path which must be substituted for the URL alias. If port specific mappings are provided, then this default path is considered if none of the ports are matched with the port of the incoming request. Either urlPath or portList must be specified." + }, + "portList" : { + "type" : "array", + "example" : "[5555#gateway/ws/soapapi/v1/getOperation,5556#gateway/ws/soapapi/v2/testOp]", + "description" : "An array of port specific mappings for paths. Each mapping in this array must be specified as port_number#url_path. Either urlPath or portList must be specified.", + "items" : { + "type" : "string" + } + }, + "association" : { + "type" : "string", + "example" : "1", + "description" : "Indicates how the URL Alias is created. This value is always 1." + }, + "package" : { + "type" : "string", + "example" : "WmAPIGateway", + "description" : "The package to which the URL Alias is associated. Any URL Alias created through the API should always be associated with the WmAPIGateway package." + } + }, + "description" : "This model contains URL Aliases details" + }, + "URLAliasesGetResponse" : { + "type" : "object", + "properties" : { + "urlAliases" : { + "type" : "array", + "description" : "Contains the list of available URL aliases or a single URL alias object.", + "items" : { + "$ref" : "#/definitions/URLAliasSettings" + } + } + } + }, + "KeyStore" : { + "type" : "object", + "properties" : { + "keyStoreName" : { + "type" : "string", + "description" : "The name of the keystore. It cannot contain spaces or special characters. The name of the key store must be unique across all the keystores created in API Gateway." + }, + "keyStoreDescription" : { + "type" : "string", + "description" : "The description for the keystore." + }, + "keyStoreType" : { + "type" : "string", + "description" : "The certificate file format of the keystore.", + "enum" : [ "JKS", "PKCS12" ] + }, + "keyStoreProvider" : { + "type" : "string", + "description" : "The provider that is used for the keystore type. The default is SUN for JKS type and SunJSSE for PKCS12 type.", + "enum" : [ "SUN", "SunJSSE" ] + }, + "keyStorePassword" : { + "type" : "string", + "description" : "The keystore password that is defined at the time of keystore creation using a keystore utility." + }, + "uploadFileName" : { + "type" : "string", + "description" : "The name of the keystore file that will be used to save the keystore internally in API Gateway." + }, + "fileContent" : { + "type" : "string", + "description" : "The contents of the keystore file." + }, + "pkAliasesList" : { + "type" : "string", + "description" : "Comma separated list of alias names in the uploaded keystore file." + }, + "pkPasswordsList" : { + "type" : "string", + "description" : "Comma separated list of passwords in the same order as the aliases specified in pkAliasesList. If a particular key alias does not have a password, it is denoted by space." + }, + "nullPKpasswds" : { + "type" : "string", + "description" : "Comma separated list of boolean values (false/true) indicating whether the particular alias has a password or not in the same order as the aliases specified in pkAliasesList. For each key alias, true indicates that the key alias does not have a password and false indicates that it does have a password." + }, + "bitarray" : { + "type" : "string", + "description" : "Comma separated list of bits (1/0) indicating whether the particular key alias has been successfully configured in API Gateway or not. For each key alias, 1 indicates that the key alias was loaded successfully and 0 indicates that the key alias was not loaded/configured." + }, + "message" : { + "type" : "string", + "description" : "The error or warning or success message from persisting the keystore in API Gateway. If there are failures in loading a keystore or a key alias, then the reasons for the failures are indicated by this message." + }, + "isLoaded" : { + "type" : "boolean", + "description" : "Indicates whether the keystore is loaded or not. A keystore may not be loaded if there are errors while reading the keystore file or its key aliases." + }, + "isWarning" : { + "type" : "boolean", + "description" : "Indicates whether a warning is thrown by the API Gateway while persisting the keystore." + } + }, + "description" : "This model contains Keystore details" + }, + "TrustStore" : { + "type" : "object", + "properties" : { + "id" : { + "type" : "string", + "description" : "The unique identifier for the truststore.", + "readOnly" : true + }, + "keyStoreName" : { + "type" : "string", + "description" : "The name of the truststore. It cannot contain spaces or special characters." + }, + "keyStoreDescription" : { + "type" : "string", + "description" : "The description for the truststore." + }, + "keyStoreType" : { + "type" : "string", + "description" : "The certificate file format of the truststore.", + "enum" : [ "JKS" ] + }, + "keyStoreProvider" : { + "type" : "string", + "description" : "The provider that is used for the truststore type.", + "enum" : [ "SUN" ] + }, + "keyStoreLocation" : { + "type" : "string", + "description" : "The location where the truststore is saved in API Gateway." + }, + "keyStorePassword" : { + "type" : "string", + "description" : "The truststore password that is defined at the time of truststore creation using a keystore utility." + }, + "uploadFileName" : { + "type" : "string", + "description" : "The name of the truststore file that will be used to save the truststore internally in API Gateway." + }, + "fileContent" : { + "type" : "string", + "description" : "The contents of the truststore file." + }, + "certificateAliases" : { + "type" : "array", + "description" : "The list of aliases that are available within the truststore.", + "readOnly" : true, + "items" : { + "type" : "string" + } + }, + "message" : { + "type" : "string", + "description" : "The warning message if any. Applies only if isWarning = true" + }, + "isLoaded" : { + "type" : "boolean", + "description" : "Indicates whether the truststore is loaded or not. A truststore may not be loaded if there are errors while reading the truststore file." + }, + "isWarning" : { + "type" : "boolean", + "description" : "Indicates whether there is a warning message from the API Gateway while the truststore was created/modified." + } + }, + "description" : "Model containing the properties of a truststore in API Gateway" + }, + "APIGateway" : { + "type" : "object", + "properties" : { + "Policy Management - Threat Protection" : { + "type" : "string" + }, + "Policy Management - Gateway" : { + "type" : "string" + }, + "Application Management" : { + "type" : "string" + }, + "APIManagement" : { + "type" : "string" + } + } + }, + "IntegrationServer" : { + "type" : "object", + "properties" : { + "Product Code" : { + "type" : "string" + }, + "Product Version" : { + "type" : "string" + }, + "Concurrent Sessions" : { + "type" : "string" + }, + "Clustering" : { + "type" : "string" + }, + "Publish / Subscribe" : { + "type" : "string" + }, + "Adapter Runtime" : { + "type" : "string" + }, + "Remote Invoke" : { + "type" : "string" + }, + "Guaranteed Delivery" : { + "type" : "string" + }, + "Security Auditing" : { + "type" : "string" + }, + "Distributed Cache" : { + "type" : "string" + }, + "Enterprise Gateway" : { + "type" : "string" + } + } + }, + "LicenseDetail" : { + "type" : "object", + "properties" : { + "Sales Information" : { + "description" : "Contains the sales information like customer name,customer id etc.", + "$ref" : "#/definitions/SalesInformation" + }, + "productInformation" : { + "description" : "Contains the product information like expiration date,operating system,product code etc.", + "$ref" : "#/definitions/ProductInformation" + }, + "integrationServer" : { + "description" : "Contains the information related Integration Server like clustering,remoteInvoke etc.", + "$ref" : "#/definitions/IntegrationServer" + }, + "licenseInformation" : { + "description" : "Contains the licensing information like price unit,price quantity etc.", + "$ref" : "#/definitions/LicenseInformation" + }, + "API Gateway" : { + "$ref" : "#/definitions/APIGateway" + } + } + }, + "LicenseInformation" : { + "type" : "object", + "properties" : { + "Price Unit" : { + "type" : "string" + }, + "Price Quantity" : { + "type" : "string" + }, + "TypeOfInstallation" : { + "type" : "string" + }, + "LicenseType" : { + "type" : "string" + }, + "ExtendedRights" : { + "type" : "string" + }, + "LicenseVersion" : { + "type" : "string" + }, + "Metering" : { + "type" : "string" + } + } + }, + "ProductInformation" : { + "type" : "object", + "properties" : { + "Expiration Date" : { + "type" : "string" + }, + "Operating System" : { + "type" : "string" + }, + "Product Code" : { + "type" : "string" + }, + "Product ID" : { + "type" : "string" + }, + "Product Name" : { + "type" : "string" + }, + "Product Version" : { + "type" : "string" + }, + "Usage" : { + "type" : "string" + }, + "RenewalDate" : { + "type" : "string" + }, + "HigherLevPosNr" : { + "type" : "string" + }, + "HigherLevProdCode" : { + "type" : "string" + }, + "HigherLevProdName" : { + "type" : "string" + } + } + }, + "SalesInformation" : { + "type" : "object", + "properties" : { + "Serial Number" : { + "type" : "string" + }, + "License Key" : { + "type" : "string" + }, + "Customer ID" : { + "type" : "string" + }, + "Customer Name" : { + "type" : "string" + }, + "ContractDetails" : { + "type" : "string" + }, + "ContractPosNumber" : { + "type" : "string" + }, + "License Type Details" : { + "type" : "string" + }, + "AutoCallHome" : { + "type" : "string" + } + } + }, + "OutboundProxySettings" : { + "type" : "object", + "required" : [ "host", "port", "proxyAlias" ], + "properties" : { + "proxyAlias" : { + "type" : "string", + "description" : "The outbound proxy server alias name. It must be unique across all outbound proxy server aliases defined in API Gateway. Once a proxy server alias is defined with a given name, it cannot be modified further." + }, + "host" : { + "type" : "string", + "description" : "The host name or IP address of the proxy server." + }, + "port" : { + "type" : "string", + "description" : "The port number of the proxy server." + }, + "username" : { + "type" : "string", + "description" : "The user name required to authenticate against if authentication is enabled for the proxy server." + }, + "password" : { + "type" : "string", + "description" : "The password required to authenticate if authentication is enabled for the proxy server." + }, + "protocol" : { + "type" : "string", + "description" : "The protocol for which the proxy server is created.", + "enum" : [ "HTTP", "HTTPS", "SOCKS", "FTP" ] + }, + "isDefault" : { + "type" : "string", + "description" : "Indicates whether this proxy server alias is the default for the corresponding protocol. There can be only one default proxy server alias for a given protocol. Y denotes Yes and N denotes No.", + "enum" : [ "Y", "N" ] + }, + "status" : { + "type" : "string", + "description" : "Indicates whether the particular proxy server alias is enabled or disabled.", + "readOnly" : true, + "enum" : [ "Enabled", "Disabled" ] + }, + "ftpType" : { + "type" : "string", + "description" : "The type of the FTP proxy server. Applicable only if protocol value is FTP. Indicated by a number in the range 0 to 7. 0 - No proxy, 1 - ftp_user@ftp_host no proxy auth, 2 - ftp_user@ftp_host proxy auth, 3 - site command, 4 - open command, 5 - ftp_user@proxy_user@ftp_host, 6 - proxy_user@ftp_host, 7 - ftp_user@ftp_host proxy_user", + "enum" : [ "0", "1", "2", "3", "4", "5", "6", "7" ] + }, + "socksVersion" : { + "type" : "string", + "description" : "The SOCKS version of the proxy server. Applicable only if protocol value is SOCKS. A value of 4 indicates SOCKS protocol version 4 and a value of 5 indicates SOCKS protocol version 5. SOCKS protocol version 4 does not support authentication and hence username/password cannot be specified if socksVersion = 4.", + "enum" : [ "4", "5" ] + }, + "passwordHandle" : { + "type" : "string", + "description" : "The password handle which is used to store the password (if specified) in a secure manner in API Gateway.", + "readOnly" : true + }, + "entityId" : { + "type" : "string", + "description" : "The proxy server alias used to identify the entity in API Gateway.", + "readOnly" : true + } + } + }, + "OutboundProxyGetResponse" : { + "type" : "object", + "properties" : { + "proxyServerList" : { + "type" : "object", + "description" : "Contains a map of the available outbound proxy server aliases in API Gateway with the key denoting the alias name and the value representing the corresponding outbound proxy server alias configuration.", + "additionalProperties" : { + "$ref" : "#/definitions/OutboundProxySettings" + } + } + } + }, + "NotificationCriteria" : { + "type" : "object", + "properties" : { + "id" : { + "type" : "string" + }, + "user" : { + "type" : "string", + "description" : "User" + }, + "notifyAt" : { + "type" : "integer", + "format" : "int32", + "description" : "When to notify" + }, + "email" : { + "type" : "string", + "description" : "Email address" + }, + "notificationType" : { + "type" : "string", + "description" : "Type of notification" + }, + "creationDate" : { + "type" : "string", + "description" : "Date of creation" + }, + "defaultNotificationCriteria" : { + "type" : "boolean", + "description" : "Default notification criteria" + } + }, + "description" : "This defines the notification criteria required for the transaction based license to generate notifications." + }, + "MasterPasswordExpiryInterval" : { + "type" : "object", + "properties" : { + "expireInterval" : { + "type" : "string", + "description" : "This interval(in days) specifies the time after which the master password would expire" + } + }, + "description" : "The expiration interval is a recommended time between master password changes.The default expiration interval for a master password is 90 days.After the expiration date,API Gateway will continue to operate using the existing password indefinitely." + }, + "MasterPasswordExpiryIntervalResponse" : { + "type" : "object", + "properties" : { + "message" : { + "type" : "string", + "description" : "The response message from the server when the master password expiry interval is updated" + }, + "result" : { + "type" : "string", + "description" : "This is the updated master password expiry interval(in days)" + } + }, + "description" : "The schema of the response from the server when the expiry interval is updated" + }, + "MasterPasswordUpdate" : { + "type" : "object", + "properties" : { + "oldPassword" : { + "type" : "string", + "description" : "This is the base64 encoded value of the old master password" + }, + "newPassword" : { + "type" : "string", + "description" : "This is the base64 encoded value of the new master password" + } + }, + "description" : "Describes the properties required for updating the master password" + }, + "MasterPasswordUpdateResponse" : { + "type" : "object", + "properties" : { + "message" : { + "type" : "string", + "description" : "The response message from the server when the master password is updated" + } + } + }, + "MasterPasswordResetResponse" : { + "type" : "object", + "properties" : { + "message" : { + "type" : "string", + "description" : "The response message from the server when the master password is reset" + }, + "handleCount" : { + "type" : "string", + "description" : "The number of passwords that are updated during master password reset" + } + }, + "description" : "Describes the response when the master password is reset" + }, + "MasterPasswordProperties" : { + "type" : "object", + "properties" : { + "lastChangeDate" : { + "type" : "string", + "description" : "The latest date when the master password was updated.The format for this field would be YYYY-MM-DD HH:mm:ssZ" + }, + "expireDate" : { + "type" : "string", + "description" : "The expiry date of the master password.The format for this field would be YYYY-MM-DD HH:mm:ssZ" + }, + "expireInterval" : { + "type" : "string", + "description" : "The interval(in days) after which the master password would expire" + }, + "daysTilExpire" : { + "type" : "string", + "description" : "The remaining number of days for the master password expiration" + }, + "expireMessage" : { + "type" : "string", + "description" : "The message which will be returned once the master password is expired" + }, + "statusMessage" : { + "type" : "string", + "description" : "The current status of the master password" + } + }, + "description" : "Describes the master password configuration properties in API Gateway" + }, + "ClusterInfo" : { + "type" : "object", + "properties" : { + "clusterAware" : { + "type" : "boolean", + "description" : "The property which is used to find whether APIGateway is cluster aware." + }, + "pendingRestart" : { + "type" : "boolean", + "description" : "The property used to determine whether APIGateway is pending for restart for the cluster settings to take effect." + }, + "currentlyClustered" : { + "type" : "boolean", + "description" : "The current clusterd state of APIGateway." + }, + "clusterSessTimeout" : { + "type" : "string", + "description" : "Number of minutes an inactive session will be retained in the clustered session store. The default is 60." + }, + "clusterName" : { + "type" : "string", + "description" : "Name of the cluster to which this APIGateway belongs." + }, + "actionOnStartupError" : { + "type" : "string", + "description" : "How APIGateway responds when an error at start up prevents APIGateway from joining the cluster." + }, + "tsaURLs" : { + "type" : "string", + "description" : "A comma separated list of the URLs for the Terracotta Server Array to be used with the cluster to which this APIGateway belongs." + }, + "cacheManagerName" : { + "type" : "string", + "description" : "The default cache manager." + }, + "cacheName" : { + "type" : "string", + "description" : "The default cache." + }, + "message" : { + "type" : "string", + "description" : "Message to be displayed to the clients." + } + } + }, + "JMSConsumerAlias" : { + "allOf" : [ { + "$ref" : "#/definitions/WebserviceEndpointAlias" + }, { + "type" : "object", + "properties" : { + "executeACL" : { + "type" : "string", + "description" : "This property specifies the access profile name" + }, + "jmsAliasType" : { + "type" : "string", + "description" : "This property specifies the jmsAliasType. Either it could be JMS or JNDI " + }, + "jndiProvAlias" : { + "type" : "string", + "description" : "This property specifies the name of JNDI" + }, + "connFactoryName" : { + "type" : "string", + "description" : "This property specifies the connection factory name" + }, + "jmsConnAlias" : { + "type" : "string", + "description" : "This property specifies the name of JMS connection" + }, + "user" : { + "type" : "string", + "description" : "This property specifies the name of the user to create the JMS connection" + }, + "password" : { + "type" : "string", + "description" : "This property specifies the password to create the JMS connection" + } + } + } ] + }, + "JMSProviderAlias" : { + "allOf" : [ { + "$ref" : "#/definitions/WebserviceEndpointAlias" + }, { + "type" : "object", + "properties" : { + "jmsTriggerName" : { + "type" : "string", + "description" : "This property specifies the JMS Trigger name" + }, + "deliveryMode" : { + "type" : "string", + "description" : "This property specifies the deliveryMode" + }, + "timeToLive" : { + "type" : "integer", + "format" : "int64", + "description" : "This property specifies the timeToLive value" + }, + "priority" : { + "type" : "integer", + "format" : "int32", + "description" : "This property specifies priority value" + }, + "replyToDestName" : { + "type" : "string", + "description" : "This property specifies the replyToDestName name" + }, + "replyToDestType" : { + "type" : "string", + "description" : "This property specifies the replyToDestType type" + }, + "includeConnFactoryName" : { + "type" : "string", + "description" : "This property enables/disables the includeConnFactoryName parameter" + }, + "includeJNDIParams" : { + "type" : "string", + "description" : "This property enables/disables the includeJNDIParams parameter" + } + } + } ] + }, + "WebserviceEndpointAlias" : { + "type" : "object", + "discriminator" : "aliasType", + "properties" : { + "WebserviceEndpointAliasId" : { + "type" : "string", + "description" : "A unique ID for the WebserviceEndpointAlias", + "readOnly" : true + }, + "alias" : { + "type" : "string", + "description" : "The name of the WebserviceEndpointAlias" + }, + "description" : { + "type" : "string", + "description" : "The description of the WebserviceEndpointAlias" + }, + "aliasType" : { + "type" : "string", + "description" : "The property specifies the aliasType, Either it should be Provider or Consumer" + }, + "transportType" : { + "type" : "string", + "description" : "this defines the transport type. The supported transport type is JMS" + }, + "keyStoreAlias" : { + "type" : "string", + "description" : "this property specifies the keystorealias name" + }, + "keyAlias" : { + "type" : "string", + "description" : "this property specifies the keyalias name" + }, + "trustStoreAlias" : { + "type" : "string", + "description" : "this property specifies the trustStoreAlias name" + }, + "timestampPrecisionInMillis" : { + "type" : "string", + "description" : "this property specifies the timestampPrecisionInMillis" + }, + "timestampTimeToLive" : { + "type" : "string", + "description" : "this property specifies the timestampTimeToLive value" + }, + "timestampMaximumSkew" : { + "type" : "string", + "description" : "this property specifies the timestampMaximumSkew value" + } + } + }, + "LoadBalancer" : { + "type" : "object", + "properties" : { + "httpUrls" : { + "type" : "array", + "description" : "HTTP URLs to be exposed for API invocation.", + "items" : { + "type" : "string" + } + }, + "httpsUrls" : { + "type" : "array", + "description" : "HTTPS URLs to be exposed for API invocation.", + "items" : { + "type" : "string" + } + }, + "websocketUrls" : { + "type" : "array", + "description" : "WebSocket URL to be exposed for Websocket APIs invocation.", + "items" : { + "type" : "string" + } + }, + "webAppUrl" : { + "type" : "string", + "description" : "API Gateway UI access url" + } + }, + "description" : "This defines the Load Balancer URLs configuration in the API Gateway." + }, + "WhiteListedIPs" : { + "type" : "object", + "properties" : { + "privateIPs" : { + "type" : "array", + "description" : "List of private whitelisted IPs to be considered while API is created / updated by importing a url and import an archive", + "items" : { + "type" : "string" + } + } + }, + "description" : "This defines the whitelisting of private IPs configured in the API Gateway." + }, + "APICallbackSettings" : { + "type" : "object", + "properties" : { + "processCallbackRequests" : { + "type" : "boolean", + "description" : "Decider to process the callback URLs" + }, + "allowCallBackRequestsHTTPsAccessOnly" : { + "type" : "boolean", + "description" : "Native Servers can access the callback proxy through HTTPs protocal" + }, + "portType" : { + "type" : "string", + "description" : "Select value from Loadbalancer, HTTP, HTTPS, External, the port used to forward to Native Server" + }, + "allowCallbackRequestAccessToAllowedIPs" : { + "type" : "boolean", + "description" : "Decider to process callback requests based on Allowed IPs" + }, + "allowedIPs" : { + "type" : "array", + "description" : "Configure Allowed IPs.", + "items" : { + "type" : "string" + } + } + } + }, + "CallbackProcessorSettings" : { + "type" : "object", + "required" : [ "configuration" ], + "properties" : { + "configuration" : { + "description" : "Specifies the API callback processor setting properties", + "$ref" : "#/definitions/APICallbackSettings" + } + }, + "description" : "This defines the various extended settings that can be configured in API Gateway." + }, + "ExtendedSettingsInput" : { + "type" : "object", + "properties" : { + "preferredSettings" : { + "description" : "Administrator can choose their preferred extended settings and watt properties and can modify their values using this field. Also, these settings are the ones that are shown in the API Gateway User Interface by default.", + "$ref" : "#/definitions/Settings" + } + } + }, + "Settings" : { + "type" : "object", + "properties" : { + "wattKeys" : { + "type" : "object", + "description" : "A map containing the Integration Server Watt properties key-value pair.", + "additionalProperties" : { + "type" : "string" + } + }, + "extendedKeys" : { + "type" : "object", + "description" : "A map containing the API Gateway Extended Settings key-value pair.", + "additionalProperties" : { + "type" : "string" + } + } + } + }, + "ExtendedSettingsOutput" : { + "type" : "object", + "properties" : { + "preferredSettings" : { + "description" : "Administrator can choose their preferred extended settings and watt properties and can modify their values using this field. Also, these settings are the ones that are shown in the API Gateway User Interface by default.", + "$ref" : "#/definitions/Settings" + }, + "allSettings" : { + "description" : "Contains all the extended settings and watt properties.", + "$ref" : "#/definitions/Settings" + } + } + }, + "ErrorProcessing" : { + "type" : "object", + "properties" : { + "fallbackErrorMessage" : { + "type" : "string" + }, + "defaultErrorMessage" : { + "type" : "string" + }, + "sendNativeProviderFault" : { + "type" : "string" + } + }, + "description" : "Defines the error message configuration. The configured error message will be sent to the invoking client in case API Gateway encounters an exception." + }, + "KeystoreTruststore" : { + "type" : "object", + "properties" : { + "configId" : { + "type" : "string" + }, + "keystoreName" : { + "type" : "string" + }, + "signingAlias" : { + "type" : "string" + }, + "truststoreName" : { + "type" : "string" + } + }, + "description" : "This defines the keystore and truststore requred for the API Gateway." + }, + "Destination" : { + "type" : "object", + "properties" : { + "sendErrorEvent" : { + "type" : "string", + "description" : "Flag to enable publish of the error events. Occurs each time an API invocation results in an error." + }, + "sendLifecycleEvent" : { + "type" : "string", + "description" : "Flag to enable publish of the life cycle events. Occurs each time API Gateway is started or shut down." + }, + "sendPolicyViolationEvent" : { + "type" : "string", + "description" : "Flag to enable publish of the policy violations events. Occurs each time an API invocation violates the policy enforcement that was set for the API." + }, + "sendPerformanceMetrics" : { + "type" : "string", + "description" : "Flag to enable publish of the performance metrics. The performance data provides information on average response time, total request count, fault count, and so on." + }, + "metricsPublishInterval" : { + "type" : "string", + "description" : "The interval at which the metrics will be published to the destination. Enter a value from 1 through 60. The default is 60 minutes." + }, + "sendAuditlogPackageManagementEvent" : { + "type" : "string", + "description" : "Flag to enable publish of the package management audit logs. Occurs each time a package create/update/delete operation performed." + }, + "sendAuditlogPolicyManagementEvent" : { + "type" : "string", + "description" : "Flag to enable publish of the policy management audit logs. Occurs each time a policy create/update/delete operation performed." + }, + "sendAuditlogRuntimeDataManagementEvent" : { + "type" : "string", + "description" : "Flag to enable publish of the analytics management audit logs. Occurs each time an analytics data purge operation performed." + }, + "sendAuditlogPlanManagementEvent" : { + "type" : "string", + "description" : "Flag to enable publish of the plan management audit logs. Occurs each time a plan create/update/delete operation performed." + }, + "sendAuditlogApprovalManagementEvent" : { + "type" : "string", + "description" : "Flag to enable publish of the approval management audit logs. Occurs each time an approval request create/update/delete operation performed." + }, + "sendAuditlogUserManagementEvent" : { + "type" : "string", + "description" : "Flag to enable publish of the user management audit logs. Occurs each time an user create/update/delete operation performed." + }, + "sendAuditlogApplicationManagementEvent" : { + "type" : "string", + "description" : "Flag to enable publish of the application management audit logs. Occurs each time an application create/update/delete operation performed." + }, + "sendAuditlogGroupManagementEvent" : { + "type" : "string", + "description" : "Flag to enable publish of the group management audit logs. Occurs each time a group create/update/delete operation performed." + }, + "sendAuditlogAccessProfileManagementEvent" : { + "type" : "string", + "description" : "Flag to enable publish of the access profile management audit logs. Occurs each time an access profile create/update/delete operation performed." + }, + "sendAuditlogPromotionManagementEvent" : { + "type" : "string", + "description" : "Flag to enable publish of the promotion management audit logs. Occurs each time a promotion create/update/delete operation performed." + }, + "sendAuditlogAPIManagementEvent" : { + "type" : "string", + "description" : "Flag to enable publish of the api management audit logs. Occurs each time an api create/update/delete operation performed." + }, + "sendAuditlogAliasManagementEvent" : { + "type" : "string", + "description" : "Flag to enable publish of the alias management audit logs. Occurs each time an alias create/update/delete operation performed." + } + }, + "description" : "This defines the configurations required for the destination." + }, + "AuditLogDestination" : { + "type" : "object", + "properties" : { + "name" : { + "type" : "string", + "description" : "The default name of the audit log, API Gateway Transaction Logger." + }, + "enable" : { + "type" : "string", + "description" : "Enable activation to enable the logger to start writing the log entries to the database or the file." + }, + "mode" : { + "type" : "string", + "description" : "Specifies whether the logger is to write entries to the destination synchronously or asynchronously." + }, + "guaranteed" : { + "type" : "string", + "description" : "Provides data about guaranteed delivery transactions." + }, + "destination" : { + "type" : "string", + "description" : "Specifies whether the logger is to write entries to a file or database." + }, + "maximumQueueSize" : { + "type" : "string", + "description" : "Specifies the maximum number of entries the queue can hold." + }, + "maximumRetries" : { + "type" : "string", + "description" : "Specifies the maximum times the logger must retry writing the entry to the destination if the first attempt fails because of a transient error." + }, + "waitBetweenRetries" : { + "type" : "string", + "description" : "Specifies the waiting time before the logger can reconnect and rewrite the eateries to the destination in case of failure." + } + }, + "description" : "This defines the configurations required for Audit Log destination." + }, + "CSCommunicationDestination" : { + "type" : "object", + "properties" : { + "protocol" : { + "type" : "string", + "description" : "Specifies the communication protocol used to establish communication between API Gateway and CentraSite." + }, + "hostname" : { + "type" : "string", + "description" : "Specifies the host name or IP address of the machine on which CentraSite Application Server Tier (CAST) is running." + }, + "uddiPort" : { + "type" : "string", + "description" : "Specifies the port on which CAST is listening. The default port number for CAST is 53307." + }, + "username" : { + "type" : "string", + "description" : "Specifies the CentraSite user ID for authenticating CentraSite when API Gateway communicates with CentraSite. This implies the user ID of a user who has the CentraSite Administrator role or the API Gateway Administrator role in CentraSite." + }, + "password" : { + "type" : "string", + "description" : "Specifies the password for authenticating CentraSite when API Gateway communicates with CentraSite." + }, + "gatewayAssetId" : { + "type" : "string", + "description" : "Specifies the registered API Gateway ID." + }, + "targetname" : { + "type" : "string", + "description" : "Specifies the name of the API Gateway asset as defined in CentraSite." + } + }, + "description" : "This defines the configurations required for Centrasite Communication section of CentraSite destination." + }, + "CSSNMPDestination" : { + "type" : "object", + "properties" : { + "sendTRAPsToCentrasite" : { + "type" : "string", + "description" : "Specifies whether the events has to be sent from API Gateway to CentraSite." + }, + "transport" : { + "type" : "string", + "description" : "Specifies the wire transport protocol that is used by the SNMP Listener." + }, + "hostname" : { + "type" : "string", + "description" : "Specifies the CentraSite host name or IP address to which the SNMP listener binds." + }, + "port" : { + "type" : "string", + "description" : "Specifies the port to which the SNMP listener binds. The default port number for CentraSite's SNMP server is 8181." + }, + "username" : { + "type" : "string", + "description" : "Specifies the SecurityName that is used by the SNMP Listener." + }, + "authorizationProtocol" : { + "type" : "string", + "description" : "Specifies the authorization protocol that is used by the SNMP Listener for decoding the incoming trap." + }, + "authorizationPassword" : { + "type" : "string", + "description" : "Specifies the password to be used for authorization protocol." + }, + "privacyProtocol" : { + "type" : "string", + "description" : "Specifies the privacy protocol that is used by the SNMP Listener for decoding the incoming trap." + }, + "privacyPassword" : { + "type" : "string", + "description" : "Specifies the password to be used for privacy protocol." + } + }, + "description" : "This defines the configurations required for CentraSite SNMP section of CentraSite destination." + }, + "ElasticsearchDestination" : { + "type" : "object", + "properties" : { + "protocol" : { + "type" : "string", + "description" : "Specifies the communication protocol used to establish communication between API Gateway and CentraSite." + }, + "hostname" : { + "type" : "string", + "description" : "Specifies the host name or IP address of the machine on which Elasticsearch Server is running." + }, + "port" : { + "type" : "string", + "description" : "Specifies the port on which the Elasticsearch server runs." + }, + "indexName" : { + "type" : "string", + "description" : "Specifies the index name for the Elasticsearch server on which the events will be available." + }, + "username" : { + "type" : "string", + "description" : "The username for the Elasticsearch server instance." + }, + "password" : { + "type" : "string", + "description" : "The password for the Elasticsearch server instance." + }, + "sendErrorEvent" : { + "type" : "string", + "description" : "Flag to enable publish of the error events. Occurs each time an API invocation results in an error." + }, + "sendLifecycleEvent" : { + "type" : "string", + "description" : "Flag to enable publish of the life cycle events. Occurs each time API Gateway is started or shut down." + }, + "sendPolicyViolationEvent" : { + "type" : "string", + "description" : "Flag to enable publish of the policy violations events. Occurs each time an API invocation violates the policy enforcement that was set for the API." + }, + "sendPerformanceMetrics" : { + "type" : "string", + "description" : "Flag to enable publish of the performance metrics. The performance data provides information on average response time, total request count, fault count, and so on." + }, + "metricsPublishInterval" : { + "type" : "string", + "description" : "The interval at which the metrics will be published to the destination. Enter a value from 1 through 60. The default is 60 minutes." + }, + "sendAuditlogPackageManagementEvent" : { + "type" : "string", + "description" : "Flag to enable publish of the package management audit logs. Occurs each time a package create/update/delete operation performed." + }, + "sendAuditlogPolicyManagementEvent" : { + "type" : "string", + "description" : "Flag to enable publish of the policy management audit logs. Occurs each time a policy create/update/delete operation performed." + }, + "sendAuditlogRuntimeDataManagementEvent" : { + "type" : "string", + "description" : "Flag to enable publish of the analytics management audit logs. Occurs each time an analytics data delete operation performed." + }, + "sendAuditlogPlanManagementEvent" : { + "type" : "string", + "description" : "Flag to enable publish of the plan management audit logs. Occurs each time a plan create/update/delete operation performed." + }, + "sendAuditlogApprovalManagementEvent" : { + "type" : "string", + "description" : "Flag to enable publish of the approval management audit logs. Occurs each time an approval request create/update/delete operation performed." + }, + "sendAuditlogUserManagementEvent" : { + "type" : "string", + "description" : "Flag to enable publish of the user management audit logs. Occurs each time an user create/update/delete operation performed." + }, + "sendAuditlogApplicationManagementEvent" : { + "type" : "string", + "description" : "Flag to enable publish of the application management audit logs. Occurs each time an application create/update/delete operation performed." + }, + "sendAuditlogGroupManagementEvent" : { + "type" : "string", + "description" : "Flag to enable publish of the group management audit logs. Occurs each time a group create/update/delete operation performed." + }, + "sendAuditlogAccessProfileManagementEvent" : { + "type" : "string", + "description" : "Flag to enable publish of the access profile management audit logs. Occurs each time an access profile create/update/delete operation performed." + }, + "sendAuditlogPromotionManagementEvent" : { + "type" : "string", + "description" : "Flag to enable publish of the promotion management audit logs. Occurs each time a promotion create/update/delete operation performed." + }, + "sendAuditlogAPIManagementEvent" : { + "type" : "string", + "description" : "Flag to enable publish of the api management audit logs. Occurs each time an api create/update/delete operation performed." + }, + "sendAuditlogAliasManagementEvent" : { + "type" : "string", + "description" : "Flag to enable publish of the alias management audit logs. Occurs each time an alias create/update/delete operation performed." + } + }, + "description" : "This defines the configurations required for Elasticsearch destinations." + }, + "SNMPDestination" : { + "type" : "object", + "properties" : { + "snmpTargetType" : { + "type" : "string", + "description" : "Specifies target type of the SNMP server." + }, + "hostname" : { + "type" : "string", + "description" : "Flag to enable save of the life cycle events." + }, + "port" : { + "type" : "string", + "description" : "The SNMP trap receiver port that is listening for SNMP requests and packets." + }, + "transport" : { + "type" : "string", + "description" : "The protocol used by SNMP to send traps. The available options are: TCP and UDP. By default, TCP is selected." + }, + "username" : { + "type" : "string", + "description" : "If User is selected as the SNMP target type, then the Username field specifies the SNMPv3 user name to use when connecting to the receiver." + }, + "useAuthorization" : { + "type" : "string", + "description" : "Specifies whether an authorization key is required. " + }, + "usePrivacy" : { + "type" : "string", + "description" : "Specifies whether a privacy (encryption) key is required." + }, + "sendErrorEvent" : { + "type" : "string", + "description" : "Flag to enable publish of the error events. Occurs each time an API invocation results in an error." + }, + "sendLifecycleEvent" : { + "type" : "string", + "description" : "Flag to enable publish of the life cycle events. Occurs each time API Gateway is started or shut down." + }, + "sendPolicyViolationEvent" : { + "type" : "string", + "description" : "Flag to enable publish of the policy violations events. Occurs each time an API invocation violates the policy enforcement that was set for the API." + } + }, + "description" : "This defines the configurations required for the SNMP destination." + }, + "EmailDestination" : { + "type" : "object", + "properties" : { + "smtpServer" : { + "type" : "string", + "description" : "The server name or the IP address of the SMTP server that API Gateway uses to send the messages." + }, + "port" : { + "type" : "string", + "description" : "The port that API Gateway uses to connect to the specified SMTP server." + }, + "username" : { + "type" : "string", + "description" : "The username that API Gateway uses to connect to the specified SMTP server." + }, + "password" : { + "type" : "string", + "description" : "The password that API Gateway uses to connect to the specified SMTP server." + }, + "transportLayerSecurity" : { + "type" : "string", + "description" : "The SSL encryption type that API Gateway uses when communicating with an email server. " + }, + "trustStoreAlias" : { + "type" : "string", + "description" : "The truststore that API Gateway uses while sending the request to a native API." + }, + "defaultEmailCharset" : { + "type" : "string", + "description" : "The character set that API Gateway uses to be recognized by the system. " + }, + "fromEmail" : { + "type" : "string", + "description" : "The email address from which you want to send the alerts." + }, + "testRecipient" : { + "type" : "string", + "description" : "The email address to which you want to send the test email." + }, + "logInvocationSubject" : { + "type" : "string", + "description" : "The subject line of the email to be sent for the Log Invocation policy action." + }, + "logInvocationContent" : { + "type" : "string", + "description" : "The content of the email to be sent for the Log Invocation policy action." + }, + "monitorSPSubject" : { + "type" : "string", + "description" : "The subject line of the email to be sent for the Monitor SP policy action." + }, + "monitorSPContent" : { + "type" : "string", + "description" : "The content of the email to be sent for the Monitor SP policy action." + }, + "monitorSLASubject" : { + "type" : "string", + "description" : "The subject line of the email to be sent for the Monitor SLA policy action." + }, + "monitorSLAContent" : { + "type" : "string", + "description" : "The content of the email to be sent for the Monitor SLA policy action." + }, + "throttlingSubject" : { + "type" : "string", + "description" : "The subject line of the email to be sent for the Throttling Traffic Optimization policy action." + }, + "throttlingContent" : { + "type" : "string", + "description" : "The content of the email to be sent for the Throttling Traffic Optimization policy action." + } + }, + "description" : "This defines the configurations required for Email destination." + }, + "CacheableType" : { + "type" : "object", + "properties" : { + "type" : { + "type" : "string" + } + } + }, + "GatewayCacheConfig" : { + "type" : "object", + "properties" : { + "cacheableType" : { + "description" : "Gateway entity object for which the caching needs to configured", + "$ref" : "#/definitions/CacheableType" + }, + "cacheSizeInPercent" : { + "type" : "integer", + "format" : "int32", + "description" : "Specifies the caching size in percentage" + }, + "collectStatistics" : { + "type" : "boolean", + "description" : "Specifies whether to collect statistics for the caching" + }, + "autoScale" : { + "type" : "boolean", + "description" : "Specifies whether to auto scale caching dynamically" + }, + "recordCount" : { + "type" : "integer", + "format" : "int32" + }, + "cacheName" : { + "type" : "string" + } + } + }, + "CustomContentType" : { + "type" : "object" + }, + "LogConfiguration" : { + "type" : "object", + "properties" : { + "apigatewayLogger" : { + "type" : "string", + "description" : "The log setting of APIGateway server.Possible values are off,trace,debug,info,warn,error and fatal" + }, + "elasticSearchLogger" : { + "type" : "string", + "description" : "The log setting of Internal Data Store.Possible values are off,info,debug,warn,error and fatal" + }, + "kibanaLogger" : { + "type" : "string", + "description" : "The log setting of APIGateway dashboard.Possible values are silent,quiet and verbose" + }, + "enableSessionLogger" : { + "type" : "string", + "description" : "The log setting enable APIGateway session logs.Possible values are off,trace,debug,info,warn,error and fatal" + }, + "enableSecurityLogger" : { + "type" : "string", + "description" : "The log setting to enable APIGateway security logs.Possible values are true and false." + }, + "sagOsgiLogger" : { + "type" : "string", + "description" : "The log setting of OSGI platform.Possible values are true and false." + }, + "enableLogAggregation" : { + "type" : "string", + "description" : "Enabling log aggregation will collect logs from the different components and store in Internal Data Store or external Elasticsearch.The value can be true or false." + }, + "logDestination" : { + "type" : "string", + "description" : "Specifies where to store the accumulated logs from different stores. Value can be EXTERNAL_ES or INTERNAL" + }, + "protocol" : { + "type" : "string", + "description" : "Protocol to communicate the external elastic search." + }, + "hostName" : { + "type" : "string", + "description" : "Hostname of external elastic search used to send the logs." + }, + "port" : { + "type" : "string", + "description" : "Port to communicate the external elastic search." + }, + "indexName" : { + "type" : "string", + "description" : "Indexname of external elastic search to store the accumulated logs." + }, + "userName" : { + "type" : "string", + "description" : "Username to communicate the external elastic search." + }, + "password" : { + "type" : "string", + "description" : "Password that is used to communicate the external elastic search." + } + }, + "description" : "This contains log settings of various components used by APIGateway." + }, + "InputLdapConfiguration" : { + "type" : "object", + "properties" : { + "ldapConfig" : { + "description" : "Configure local authentication provider or one or more LDAP authentication providers and their priority.", + "$ref" : "#/definitions/LDAPConfiguration" + } + } + }, + "LDAPConfiguration" : { + "type" : "object", + "properties" : { + "cacheSize" : { + "type" : "string", + "description" : "The maximum number of LDAP users Integration Server can keep in memory in the user cache. The default is 10." + }, + "cacheTTL" : { + "type" : "string", + "description" : "The number of minutes an LDAP user's credentials (userid and password) can remain in the credential cache before being purged. The default is 60 minutes." + }, + "provider" : { + "type" : "string", + "description" : "Choose the authentication provider. Possible values are 'local' and 'LDAP' " + }, + "ldapDirectoryList" : { + "type" : "array", + "description" : "List of LDAP directories. This field is applicable when LDAP provider is chosen.", + "items" : { + "$ref" : "#/definitions/LDAPDirectory" + } + }, + "cdsRunning" : { + "type" : "boolean" + } + } + }, + "LDAPDirectory" : { + "type" : "object", + "properties" : { + "index" : { + "type" : "integer", + "format" : "int32", + "description" : "Index of the current LDAP directory. Priority of the LDAP directory among other directories is calculated using the index. The starting value of index for the LDAP directory with first priority is 0 and is incremented by 1 for subsequent LDAP directories." + }, + "url" : { + "type" : "string", + "description" : "The complete URL of the LDAP server. The URL has the format protocol://hostname:portnumber. Possible values of 'protocol' is 'ldap' for standard connections or 'ldaps' for secure connections. For example, ldaps://ldaphost1:700" + }, + "principal" : { + "type" : "string", + "description" : "The user ID the Integration Server should supply to connect to the LDAP server, for example, o=webm.com or dc=webm,dc=com. This user should not be the Administrator account, but a user that has permission to query groups and group membership. If your LDAP server allows anonymous access, leave this field blank." + }, + "password" : { + "type" : "string", + "description" : "The password the API Gateway should supply to connect to the LDAP server, that is, the Principal's password." + }, + "timeout" : { + "type" : "string", + "description" : "The number of seconds the API Gateway will wait while trying to connect to the LDAP server. After this time has passed, the API Gateway will try the next configured LDAP server on the list. The default is 5 seconds." + }, + "poolMin" : { + "type" : "string", + "description" : "The minimum number of connections allowed in the pool that API Gateway maintains for connecting to the LDAP server. When API Gateway starts, the connection pool initially contains this minimum number of connections. API Gateway adds connections to the pool as needed until it reaches the maximum allowed, which is specified in the Maximum Connection Pool field. The default is 0." + }, + "poolMax" : { + "type" : "string", + "description" : "The maximum number of connections allowed in the pool that API Gateway maintains for connecting to the LDAP server. When API Gateway starts, the connection pool initially contains a minimum number of connections, which are specified in the Minimum Connection Pool field. API Gateway adds connections to the pool as needed until it reaches the maximum allowed. The default is 10." + }, + "Distinguished Name (DN) method" : { + "type" : "boolean", + "description" : "Specifies the DN method used for building the DN. Possible values are 'true' and 'false'.Select 'true' if the DN should be synthesized from the configured prefix and suffix values (Synthesize DN Method). These values are prefixed and suffixed to the username to build the DN. Select 'false' if the DN should be queried from a specified root directory (Query DN Method). The Synthesize DN method can be faster than the Query DN method because it does not perform a query against the LDAP directory. However, if your LDAP system does not contain all users in a single flat structure, use the Query DN method instead." + }, + "dnPrefix" : { + "type" : "string", + "description" : "A string that specifies the beginning of a DN you want to pass to the LDAP server. This field is applicable when 'useaf' is configured as 'true'. i.e, Synthesize DN Method is chosen.For example, if the prefix is 'cn=' and the suffix is ',ou=Users' and a user logs in specifying 'bob', API Gateway builds the DN 'cn=bob,ou=Users' and sends it to the LDAP server for authentication." + }, + "dnSuffix" : { + "type" : "string", + "description" : "A string that specifies the end of a DN you want to pass to the LDAP server. This field is applicable when 'useaf' is configured as 'true'. i.e, Synthesize DN Method is chosen.For example, if the prefix is 'cn=' and the suffix is ',ou=Users' and a user logs in specifying 'bob', API Gateway builds the DN 'cn=bob,ou=Users' and sends it to the LDAP server for authentication." + }, + "uidProp" : { + "type" : "string", + "description" : "A property that identifies an LDAP userid, such as 'cn' or 'uid'. " + }, + "userRootDn" : { + "type" : "string", + "description" : "Enter the full distinguished name. For example, configure this value as 'ou=users,dc=webMethods,dc=com', API Gateway will issue a query that starts searching in the root directory ou=users for a common name that matches the name the user logged in with." + }, + "group" : { + "type" : "string", + "description" : "An API Gateway group with which the user is associated. The user is allowed to access services that members of this API Gateway group can access. This access is controlled by the access profiles with which the group is associated. If you also specify a value in the 'memberAttribute' field, the user has the same access as members of the API Gateway group and members of LDAP groups that have been mapped to an API Gateway access profile." + }, + "memberAttribute" : { + "type" : "string", + "description" : "The name of the attribute in a group's directory entry that identifies each member of the group. This value is usually 'member' or 'uniqueMember', but can vary depending on the schema of the LDAP directory. API Gateway uses this information during access profile checking to see if the user attempting to log in belongs to an LDAP group that has been mapped to an access profile. If no value is specified here, API Gateway does not check for membership in an LDAP group. As a result, the user's access is controlled by the API Gateway group specified in the 'group' field." + }, + "groupIdProperty" : { + "type" : "string", + "description" : "A property that identifies an LDAP group, such as CN. This field is required." + }, + "groupRootDN" : { + "type" : "string", + "description" : "The full distinguished name. For example, if you specify 'ou=groups,webMethods,dc=com', API Gateway will issue a query that will display all the LDAP groups. This field is required." + } + } + }, + "PasswordRestrictions" : { + "type" : "object", + "properties" : { + "enablePasswordChange" : { + "type" : "string", + "description" : "Specifies whether users are allowed to change their passwords. These users must have developer privileges. Possible values are 'true' and 'false'. Default value is 'true'" + }, + "mode" : { + "type" : "string", + "description" : "Specifies whether Administrator users are allowed to choose passwords that are not impacted by the password restriction settings. Possible values are 'strict' and 'lax'. Default value is 'lax'. For Administrator users, when this property is set to 'strict', API Gateway enforces the password restrictions. When set to 'lax', the password restrictions are not enforced. For non-administrators the restrictions are always enforced." + }, + "minLength" : { + "type" : "string", + "description" : "Minimum number of characters (alphabetic characters, digits, and special characters combined) the password must contain.Default value is 8" + }, + "maxLength" : { + "type" : "string", + "description" : "Maximum number of characters (alphabetic characters, digits, and special characters combined) the password can contain. Default value is 64. Maximum value allowed for this field is 128" + }, + "minUpperChars" : { + "type" : "string", + "description" : "Minimum number of uppercase alphabetic characters the password must contain. Default value is 0" + }, + "minLowerChars" : { + "type" : "string", + "description" : "Minimum number of lowercase alphabetic characters the password must contain. Default value is 0" + }, + "minDigits" : { + "type" : "string", + "description" : "Minimum number of digits the password must contain. Default value is 0" + }, + "minSpecialChars" : { + "type" : "string", + "description" : "Minimum number of special characters, such as asterisk (*), period (.), and question mark (?) the password must contain. Default value is 0" + }, + "maxIdenticalCharsInARow" : { + "type" : "string", + "description" : "Maximum number of identical characters\nin a row a password can contain. Default value is 3" + }, + "historyLength" : { + "type" : "string", + "description" : "Maximum number of previously set passwords that API Gateway saves for a user (excluding the current password). You cannot choose a password that matches any of the stored passwords. Maximum value allowed for this field is 12. Default value is 0." + } + } + }, + "PasswordExpirySettings" : { + "type" : "object", + "properties" : { + "isEnabled" : { + "type" : "string", + "description" : "Specifies whether to enable the password expiry settings. Possible values are 'true' (enabled) and 'false' (disabled). Default value is 'false'" + }, + "expirationInterval" : { + "type" : "string", + "description" : "Number of days after which a password will expire, if not changed. The value should be a non-zero integer. Default value is 90." + }, + "expiryEmailBefore" : { + "type" : "string", + "description" : "Specifies the number of days prior to password expiry that API Gateway should start sending the reminder emails for password reset. The emails are sent daily until the user either updates the password or changes the expiration interval. Set the value to 0 to prevent API Gateway from sending the reminder emails for soon to expire passwords. Default value is 3." + }, + "emailIds" : { + "type" : "string", + "description" : "List of email addresses to which API Gateway sends an email notification informing that the user password is about to expire or has already expired. The email addresses are separated by a new line character (\\n). For example, 'u1@abc.com\\nu2@abc.com'" + }, + "applicableUsers" : { + "type" : "string", + "description" : "List of users to whom the expiration interval setting is applicable. The users are separated by semicolon(;). For example, if you want to add user1 and user2 to the list, specify as 'user1;user2'" + } + } + }, + "AccountLockSettings" : { + "type" : "object", + "properties" : { + "isEnabled" : { + "type" : "string", + "description" : "Specifies whether to enable the account locking settings. Possible values are 'true' and 'false'" + }, + "maximumLoginAttempts" : { + "type" : "string", + "description" : "Number of attempts in the specified time interval (specified using timeInterval and timeIntervalUnit fields) to provide the correct password before locking the account" + }, + "timeInterval" : { + "type" : "string", + "description" : "The time interval within which the number of wrong login attempts exceeding the value specified in 'maximumLoginAttempts' will result in locking the account." + }, + "timeIntervalUnit" : { + "type" : "string", + "description" : "The unit for the time interval specified in the 'timeInterval' field. Possible values are 'Minutes', 'Hours', 'Days'." + }, + "blockDuration" : { + "type" : "string", + "description" : "Duration for which the account remains locked." + }, + "blockDurationUnit" : { + "type" : "string", + "description" : "The unit for the duration specified under 'blockDuration' field. Possible values are 'Minutes', 'Hours', 'Days'." + }, + "appliesToUsers" : { + "type" : "string", + "description" : "List of users to whom the account locking settings apply. Possible values are 'allUsersExceptPredefinedUsers' and 'allUsers'. 'allUsersExceptPredefinedUsers' indicates that account locking rules apply to all user accounts except the predefined user accounts. 'allUsers' indicates the account locking rules apply to all user accounts." + } + } + }, + "APIPortal" : { + "allOf" : [ { + "$ref" : "#/definitions/ExternalPortal" + }, { + "type" : "object", + "properties" : { + "type" : { + "type" : "string", + "description" : "API Portal type." + } + }, + "description" : "This defines the API portal configuration." + } ] + }, + "ExternalPortal" : { + "type" : "object", + "discriminator" : "type", + "properties" : { + "endpointTenant" : { + "type" : "string", + "description" : "API Portal tenant name." + }, + "endpointURL" : { + "type" : "string", + "description" : "API Portal endpoint URL." + }, + "endpointUsername" : { + "type" : "string", + "description" : "API Portal username used by API Gateway to communicate." + }, + "endpointPassword" : { + "type" : "string", + "description" : "Password for API Portal user used by API Gateway to access portal." + }, + "type" : { + "type" : "string" + } + }, + "description" : "This defines the API Portal configuration." + }, + "PortalGateway" : { + "type" : "object", + "properties" : { + "id" : { + "type" : "string", + "description" : "API Portal configuration object ID in API Gateway." + }, + "gatewayName" : { + "type" : "string", + "description" : "Name of the API Portal." + }, + "gatewayDescription" : { + "type" : "string", + "description" : "Description of API Portal." + }, + "gatewayUsername" : { + "type" : "string", + "description" : "API Gateway administrative privileged username used by API Portal to access API Gateway." + }, + "gatewayPassword" : { + "type" : "string", + "description" : "API Gateway password for provided username used by API Portal to access API Gateway." + }, + "gatewayURL" : { + "type" : "string", + "description" : "Integration Server URL of the API Gateway." + }, + "refId" : { + "type" : "string", + "description" : "Specifies API Gateway reference ID in API Portal. This is used to identify the API Gateway in API Portal." + }, + "externalPortal" : { + "description" : "API Portal configuration information.", + "$ref" : "#/definitions/ExternalPortal" + }, + "version" : { + "type" : "string", + "description" : "Specifies API Portal configuration version." + }, + "published" : { + "type" : "boolean" + } + }, + "description" : "This defines the Portal Gateway configuration in the API Gateway." + }, + "GatewayEndpoints" : { + "type" : "object", + "properties" : { + "gatewayEndpoint" : { + "type" : "string", + "description" : "API's access endpoint exposed in API Gateway." + }, + "status" : { + "type" : "string", + "description" : "Status of the API endpoint.", + "enum" : [ "NEW", "PUBLISHED", "OBSELETE" ] + } + }, + "description" : "This defines the API Gateway's API endpoint." + }, + "PortalCommunities" : { + "type" : "object", + "properties" : { + "id" : { + "type" : "string", + "description" : "ID of API Portal community." + }, + "name" : { + "type" : "string", + "description" : "API Portal community name." + }, + "description" : { + "type" : "string", + "description" : "Description of API Portal community." + }, + "status" : { + "type" : "string", + "description" : "Staus of the API Portal community.", + "enum" : [ "NEW", "PUBLISHED", "OBSELETE" ] + } + }, + "description" : "This defines the API Portal communities configuration in the API Gateway." + }, + "PortalGatewayCommunitiesData" : { + "type" : "object", + "properties" : { + "provider" : { + "type" : "string", + "description" : "The API Portal destination configuration name" + }, + "communities" : { + "description" : "List of API Portal communities.", + "$ref" : "#/definitions/PortalGatewayData" + } + }, + "description" : "This defines the API Portal provider and communities information." + }, + "PortalGatewayData" : { + "type" : "object", + "properties" : { + "portalCommunities" : { + "type" : "array", + "description" : "List of API Portal communities to which APIs should be published.", + "uniqueItems" : true, + "items" : { + "$ref" : "#/definitions/PortalCommunities" + } + }, + "gatewayEndpointsList" : { + "type" : "array", + "uniqueItems" : true, + "items" : { + "$ref" : "#/definitions/GatewayEndpoints" + } + } + }, + "description" : "This defines the API Portal Gateway data in the API Gateway." + }, + "ApprovalConfiguration" : { + "type" : "object", + "properties" : { + "id" : { + "type" : "string", + "description" : "Unique identifier of a Approval Configuration. Any of 'createApplication', 'updateApplication', 'registerApplication' and 'subscribePackage'" + }, + "eventType" : { + "type" : "string", + "description" : "Event Type: Any of 'createApplication', 'updateApplication', 'registerApplication' and 'subscribePackage' " + }, + "isEnabled" : { + "type" : "boolean", + "description" : "true/false. true value enforces approvals for the mentioned eventtype" + }, + "approversGroupId" : { + "type" : "string", + "description" : "Approvers Accessprofile Identifier. Whoever belongs to the selected access profile will be considered as Approvers" + }, + "approvalMode" : { + "type" : "string", + "description" : "Only possible value is anyone. This implies that, any one user associated with the approvers access profile can approve or reject the requests. The requester need not wait for the approval of each approver in the approvers group." + }, + "approvedEmailConfiguration" : { + "description" : "Configure Approved email template content. Configured Content would be sent to Requester once the approval request has been approved.", + "$ref" : "#/definitions/EmailConfiguration" + }, + "rejectedEmailConfiguration" : { + "description" : "Configure Rejected email template content. Configured Content would be sent to Requester once the approval request has been approved.", + "$ref" : "#/definitions/EmailConfiguration" + }, + "initiateApprovalRequestEmailConfiguration" : { + "description" : "Configure Initiate request email template content. Configured Content would be sent to Approvers when the approval request has been generated.", + "$ref" : "#/definitions/EmailConfiguration" + } + }, + "description" : "This model contains details about an ApprovalConfiguration in API Gateway" + }, + "EmailConfiguration" : { + "type" : "object", + "properties" : { + "emailSubject" : { + "type" : "string", + "description" : "Email Subject" + }, + "emailContent" : { + "type" : "string", + "description" : "Email Content" + }, + "enabled" : { + "type" : "boolean", + "description" : "true/false. Email would be sent to user only when enabled value is true." + }, + "requestType" : { + "type" : "string", + "description" : "Request Type. Value would be any of initiated, approved or rejected." + } + }, + "description" : "This model contains details about an EmailConfiguration configured in Approvals of API Gateway" + }, + "JMSConnectionAlias" : { + "type" : "object", + "properties" : { + "jmsConnectionAliasId" : { + "type" : "string", + "description" : "A unique ID for the jmsConnectionAlias", + "readOnly" : true + }, + "aliasName" : { + "type" : "string", + "description" : "The name of the JMSConnectionAlias configuration" + }, + "enabled" : { + "type" : "string", + "description" : "This property specifies the size of um_consumerIncludedStrings" + }, + "description" : { + "type" : "string", + "description" : "The description of the JMSConnectionAlias configuration" + }, + "transactionType" : { + "type" : "string", + "description" : "This property specifies the type of the transaction.Value 0 refers to NO-trans, 1 refers to Local-tran, 2 refers to XA-trans" + }, + "clientID" : { + "type" : "string", + "description" : "This property specifies the client id of the JMS connection" + }, + "user" : { + "type" : "string", + "description" : "This property specifies the user name to create the JMS connection" + }, + "password" : { + "type" : "string", + "description" : "This property specifies the password to create the JMS connection" + }, + "associationType" : { + "type" : "string", + "description" : "This property specifies whether the JMS connections has been created using JNDI or Native broker API. Value 0 refers to JNDI" + }, + "jndi_jndiAliasName" : { + "type" : "string", + "description" : "Name of the JNDI that the JMS connection refers to" + }, + "jndi_connectionFactoryLookupName" : { + "type" : "string", + "description" : "This property specifies the connection factory lookup name for the JMS connection" + }, + "jndi_automaticallyCreateUMAdminObjects" : { + "type" : "string", + "description" : "This property specifies whether to create UM admin objects automatically" + }, + "jndi_enableFollowTheMaster" : { + "type" : "string", + "description" : "This property is to enable the jndi_enableFollowTheMaster property" + }, + "jndi_connectionFactoryUpdateType" : { + "type" : "string", + "description" : "This property specifies the connection factory update type" + }, + "jndi_connectionFactoryPollingInterval" : { + "type" : "string", + "description" : "This property specifies the connection factory polling interval" + }, + "classLoader" : { + "type" : "string", + "description" : "This property specifies the classloader value" + }, + "csqSize" : { + "type" : "string", + "description" : "This property specifies the csq size. Default value -1." + }, + "csqDrainInOrder" : { + "type" : "string", + "description" : "This property is to enable/disable csqDrainInOrder" + }, + "optTempQueueCreate" : { + "type" : "string", + "description" : "This property is to opt temporary queue creation" + }, + "allowReplyToConsumer" : { + "type" : "string", + "description" : "This property is to enable/disable the allowReplyToConsumer" + }, + "manageDestinations" : { + "type" : "string", + "description" : "This property is to enable/disable the manageDestinations" + }, + "allowNewConnectionPerTrigger" : { + "type" : "string", + "description" : "This property is to enable/disable the allowNewConnectionPerTrigger" + }, + "producerCachingMode" : { + "type" : "string", + "description" : "This property is to enable/disable the producerCachingMode. 0 means disabled, 2 means Enable per destination" + }, + "producerSessionPoolMinSize" : { + "type" : "string", + "description" : "This property specifies the minimum size of producer session pool" + }, + "producerSessionPoolSize" : { + "type" : "string", + "description" : "This property specifies the max size of producer session pool" + }, + "cacheProducersPoolMinSize" : { + "type" : "string", + "description" : "This property specifies the minimum size of producer cache pool" + }, + "cacheProducersPoolSize" : { + "type" : "string", + "description" : "This property specifies the max size of producer cache pool" + }, + "poolTimeout" : { + "type" : "string", + "description" : "This property specifies the poolTimeout value" + }, + "cacheProducersQueueList" : { + "type" : "string", + "description" : "This property specifies the list of queues to cache" + }, + "cacheProducersTopicList" : { + "type" : "string", + "description" : "This property specifies the list of topics to cache" + }, + "producerMaxRetryAttempts" : { + "type" : "string", + "description" : "This property specifies the max retry attempts value for the producer" + }, + "producerRetryInterval" : { + "type" : "string", + "description" : "This property specifies the retry interval" + }, + "um_loggingOutput" : { + "type" : "string", + "description" : "This property specifies the logging output value. 0 refers to server log, 1 refers to audit logging" + }, + "um_producerMessageTracking" : { + "type" : "string", + "description" : "This property is to enable/disable the um_producerMessageTracking" + }, + "um_producerIncludedStrings" : { + "type" : "string", + "description" : "This property specifies the size of um_producerIncludedStrings" + } + }, + "description" : "This model contains JMS connection alias details" + }, + "KerberosSettings" : { + "type" : "object", + "properties" : { + "kerberosRealm" : { + "type" : "string", + "description" : "The domain name of the Kerberos server. If kerberosRealm is set, it overrides the realm specified in the provided configuration file." + }, + "kerberosKDC" : { + "type" : "string", + "description" : "The host name of the machine on which the Key Distribution Center (KDC) resides. If kerberosKDC is set, it overrrides the default KDC specified in the provided configuration file." + }, + "kerberosConfigFileName" : { + "type" : "string", + "description" : "The name of the Kerberos configuration file to be stored and maintained in API Gateway." + }, + "kerberosConfigContents" : { + "type" : "string", + "description" : "The contents of the Kerberos configuration file conforming to the specification. If you do not want the default KDC and realm values from this configuration file to be overridden, then do not set values for the kerberosRealm and kerberosKDC properties. It contains the Kerberos configuration information, including the Kerberos realm, locations of KDCs, defaults for the current realm and for Kerberos applications, and the host names, Kerberos realms mappings and encryption algorithms. The full specification details of the Kerberos configuration file can be found in https://linux.die.net/man/5/krb5.conf." + }, + "useSubjectCreds" : { + "type" : "string", + "description" : "Indicates whether the Kerberos v5 Generic Security Services (GSS) mechanism should be used to obtain credentials from an existing subject." + } + } + }, + "JMSTrigger" : { + "type" : "object", + "properties" : { + "jmsTriggerId" : { + "type" : "string", + "description" : "A unique ID for the jmsTrigger", + "readOnly" : true + }, + "triggerName" : { + "type" : "string", + "description" : "The name of the JMS trigger" + }, + "aliasName" : { + "type" : "string", + "description" : "This property specifies JMS connection name used by the current JMS Trigger" + }, + "destinationName" : { + "type" : "string", + "description" : "This property refers to input Message Queue name" + }, + "enabled" : { + "type" : "string", + "description" : "This property is to enable/disable the JMS Trigger" + }, + "isConcurrent" : { + "type" : "string", + "description" : "This property is to opt for the concurrent or serial execution of the JMS Trigger" + }, + "maxExecutionThreads" : { + "type" : "string", + "description" : "This property is to specify the maximum execution threads in case of concurrent execution" + }, + "connectionCount" : { + "type" : "string", + "description" : "This property is to specify the connectionCount" + }, + "currentThreads" : { + "type" : "string", + "description" : "This property is to specify the currentThreads for the JMS Trigger" + }, + "state" : { + "type" : "string", + "description" : "This property reveals the state (enabled/disable)of the JMS Trigger" + }, + "destinationType" : { + "type" : "string", + "description" : "This property specifies the destination type whether Queue or Topic" + }, + "jmsMessageSelector" : { + "type" : "string", + "description" : "This property specifies the message selector for the Queue or Topic" + }, + "durableSubscribeName" : { + "type" : "string", + "description" : "This property specifies the durableSubscribeName" + }, + "ignoreLocalPublished" : { + "type" : "string", + "description" : "This property specifies the status message of the JMS Trigger" + } + }, + "description" : "This model contains JMS trigger details" + }, + "JNDIProviderAlias" : { + "type" : "object", + "properties" : { + "jndiProviderAliasId" : { + "type" : "string", + "description" : "A unique ID for the jndiProviderAlias", + "readOnly" : true + }, + "jndiAliasName" : { + "type" : "string", + "description" : "The name of the JNDIProviderAlias configuration" + }, + "description" : { + "type" : "string", + "description" : "The description of the JNDIProviderAlias configuration" + }, + "initialContextFactory" : { + "type" : "string", + "description" : "The IntialContextFactoryName for JNDI lookup" + }, + "providerURL" : { + "type" : "string", + "description" : "Message broker details" + }, + "providerURLFailoverList" : { + "type" : "string", + "description" : "Fall backs URL's of providerURL" + }, + "securityPrincipal" : { + "type" : "string", + "description" : "SecurityPrincipal in case of SSL connection" + }, + "securityCredentials" : { + "type" : "string", + "description" : "securityCredentials in case of SSL connection" + }, + "otherProps" : { + "type" : "string", + "description" : "Any other properties you would like to mention, Provide the values as comma separated" + } + }, + "description" : "This model contains JNDI configuration details" + } + } +} \ No newline at end of file diff --git a/apigatewayservices/APIGatewayAlias.json b/apigatewayservices/APIGatewayAlias.json new file mode 100644 index 0000000..0b18014 --- /dev/null +++ b/apigatewayservices/APIGatewayAlias.json @@ -0,0 +1,1044 @@ +{ + "swagger" : "2.0", + "info" : { + "description" : "API Gateway Alias Management Service allows you to manage aliases in the API Gateway. Any user with the 'Manage aliases' functional previlige can manage the aliases in API Gateway. By default, the users who are part of API-Gateway-Administrators group will have this privilege. \n\n An alias in API Gateway holds environment-specific property values that can be used in policy routing configurations. The aliases can be referred to in routing endpoints, routing rules, endpoint connection properties, outbound authentication tokens, and outbound HTTP headers instead of providing an actual value. The corresponding alias value based on the stage is obtained and is substituted in place of an alias name during run-time. Thus the same alias can be referred to in multiple policies and the change in a particular alias would affect all the policy properties in which it is being referred. \n\n There are mainly six types of alias \n 1. Simple alias - Holds a simple value \n 2. Endpoint alias - Holds the endpoint value along with additional properties such as connection timeout, read timeout, whether to pass security headers or not, keystore alias, key alias \n 3. HTTP Transport security alias - Contains the transport level security information required while accessing the native API. Used in the outbound policies \n 4. SOAP message security alias - Contains message level security information that is required to access the native API \n 5. webMethods Integration Server alias - Holds the ESB service value. Can be used in the Invoke webMethods IS policy for request and response processing.\n 6. Transformation alias - Holds a list of XSLT style sheets. Can be used in the XSLT Transformation policies for request and response processing.\n\n In addition to the above alias types, the configurations for \n SAML issuer - which holds the configuration to communicate to STS (Security Token Service) to retrieve the SAML token. Used in the Outbound policies, \n Authorization server - which holds configuration of authorization server(internal/external)for introspection/Dynamic client registration. Used in the token validation and OAuth2 client creation, \n Client metadata mapping - which holds the authorization service provider metadata information. Used in the Dynamic client registration for the authorization server alias and \n Service Registry- which holds registry endpoint and service paths information. Used in the client side and server side discovery \n are internally stored as aliases.", + "version" : "10.3", + "title" : "API Gateway Alias Management Service" + }, + "host" : "localhost:5555", + "basePath" : "/rest/apigateway", + "schemes" : [ "http" ], + "consumes" : [ "plain/text" ], + "produces" : [ "application/json" ], + "paths" : { + "/alias/{aliasId}" : { + "get" : { + "description" : "The method retrieves the details of an alias in API Gateway.", + "operationId" : "getAlias", + "produces" : [ "application/json" ], + "parameters" : [ { + "name" : "aliasId", + "in" : "path", + "description" : "The path parameter specifies the id of an alias whose details are to be retrieved.", + "required" : true, + "type" : "string", + "x-example" : "732c4526-db9a-4ef9-9782-edda1a6aa9bc" + } ], + "responses" : { + "200" : { + "description" : "This status code indicates that the details of the alias are successfully retrieved.", + "schema" : { + "$ref" : "#/definitions/Alias" + }, + "examples" : { + "application/json" : "{\r\n\t\"authType\": \"KERBEROS\",\r\n\t\"signAndEncryptConfig\": {\r\n\t\t\"keyStoreAlias\": \"DEFAULT_IS_KEYSTORE\",\r\n\t\t\"keyAlias\": \"ssos\",\r\n\t\t\"certificateAlias\": \"ssos\",\r\n\t\t\"truststoreAlias\": \"DEFAULT_IS_TRUSTSTORE\"\r\n\t},\r\n\t\"kerberosCredentials\": {\r\n\t\t\"servicePrincipal\": \"vmmachine01.sag.com/adfs\",\r\n\t\t\"servicePrincipalNameForm\": \"username\",\r\n\t\t\"clientPrincipal\": \"Administrator\",\r\n\t\t\"clientPassword\": \"bWFuYWdl\"\r\n\t},\r\n\t\"authMode\": \"DELEGATE_INCOMING\",\r\n\t\"name\": \"KerberosMessageAlias\",\r\n\t\"description\": \"Kerberos outbound message secure alias\",\r\n\t\"type\": \"soapMessageSecurityAlias\"\r\n\t\"id\": \"732c4526-db9a-4ef9-9782-edda1a6aa9bc\"\r\n}" + } + }, + "404" : { + "description" : "This status code indicates that an alias with the given id could not be found in API Gateway.", + "examples" : { + "application/json" : "{\r\n \"errorDetails\": \" Alias with id: 732c4526-db9a-4ef9-9782-edda1a6aa9bc does not exist.\"\r\n}" + } + }, + "401" : { + "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." + } + }, + "security" : [ { + "Basic" : [ ] + } ] + }, + "put" : { + "description" : "The method updates the details of a specified alias in API Gateway. The API request body must contain the payload of the alias that needs to be updated.", + "operationId" : "updateAlias", + "consumes" : [ "application/json" ], + "produces" : [ "application/json" ], + "parameters" : [ { + "name" : "aliasId", + "in" : "path", + "description" : "The path parameter specifies the id of an alias whose detail is to be updated in API Gateway.", + "required" : true, + "type" : "string", + "x-example" : "732c4526-db9a-4ef9-9782-edda1a6aa9bc" + }, { + "in" : "body", + "name" : "body", + "description" : "This parameter describes the request payload of an alias that is to be updated in API Gateway.", + "required" : true, + "schema" : { + "$ref" : "#/definitions/Alias" + }, + "x-examples" : { + "application/json" : "{\r\n\t\"authType\": \"KERBEROS\",\r\n\t\"signAndEncryptConfig\": {\r\n\t\t\"keyStoreAlias\": \"DEFAULT_IS_KEYSTORE\",\r\n\t\t\"keyAlias\": \"ssos\",\r\n\t\t\"certificateAlias\": \"ssos\",\r\n\t\t\"truststoreAlias\": \"DEFAULT_IS_TRUSTSTORE\"\r\n\t},\r\n\t\"kerberosCredentials\": {\r\n\t\t\"servicePrincipal\": \"vmmachine01.sag.com/adfs\",\r\n\t\t\"servicePrincipalNameForm\": \"username\",\r\n\t\t\"clientPrincipal\": \"Administrator\",\r\n\t\t\"clientPassword\": \"bWFuYWdl\"\r\n\t},\r\n\t\"authMode\": \"DELEGATE_INCOMING\",\r\n\t\"name\": \"KerberosMessageAlias\",\r\n\t\"description\": \"Kerberos outbound message secure alias\",\r\n\t\"type\": \"soapMessageSecurityAlias\"\r\n\t\"id\": \"732c4526-db9a-4ef9-9782-edda1a6aa9bc\"\r\n}" + } + } ], + "responses" : { + "200" : { + "description" : "This status code indicates that the alias has been successfully updated in API Gateway, and the updated alias is available in the response body.", + "schema" : { + "$ref" : "#/definitions/Alias" + }, + "examples" : { + "application/json" : "{\r\n\t\"authType\": \"KERBEROS\",\r\n\t\"signAndEncryptConfig\": {\r\n\t\t\"keyStoreAlias\": \"DEFAULT_IS_KEYSTORE\",\r\n\t\t\"keyAlias\": \"ssos\",\r\n\t\t\"certificateAlias\": \"ssos\",\r\n\t\t\"truststoreAlias\": \"DEFAULT_IS_TRUSTSTORE\"\r\n\t},\r\n\t\"kerberosCredentials\": {\r\n\t\t\"servicePrincipal\": \"vmmachine01.sag.com/adfs\",\r\n\t\t\"servicePrincipalNameForm\": \"username\",\r\n\t\t\"clientPrincipal\": \"Administrator\",\r\n\t\t\"clientPassword\": \"bWFuYWdl\"\r\n\t},\r\n\t\"authMode\": \"DELEGATE_INCOMING\",\r\n\t\"name\": \"KerberosMessageAlias\",\r\n\t\"description\": \"Kerberos outbound message secure alias\",\r\n\t\"type\": \"soapMessageSecurityAlias\"\r\n\t\"id\": \"732c4526-db9a-4ef9-9782-edda1a6aa9bc\"\r\n}" + } + }, + "404" : { + "description" : "This status code indicates that an alias with the specified id could not be found in API Gateway.", + "examples" : { + "application/json" : "{\r\n \"errorDetails\": \" Unable to process the PUT request for alias. Error occurred while processing the payload. Error Message:\\n Alias with id: 6a6ea325-4190-411b-8bbd-0a7e94dbc7d1 does not exist.\"\r\n}" + } + }, + "405" : { + "description" : "This status code indicates that the specified HTTP method is not allowed for the requested alias in API Gateway.", + "examples" : { + "application/json" : "{\r\n \"errorDetails\": \" Unable to process the PUT request for alias. Error occurred while processing the payload. Error Message:\\n Method: PUT is not allowed on resource: alias\"\r\n}" + } + }, + "400" : { + "description" : "This status code indicates that the request body is invalid." + }, + "401" : { + "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." + } + }, + "security" : [ { + "Basic" : [ ] + } ] + }, + "delete" : { + "description" : "The method deletes an alias from API Gateway.", + "operationId" : "deleteAlias", + "parameters" : [ { + "name" : "aliasId", + "in" : "path", + "description" : "The path parameter specifies the id of an alias that is to be deleted from API Gateway.", + "required" : true, + "type" : "string", + "x-example" : "732c4526-db9a-4ef9-9782-edda1a6aa9bc" + } ], + "responses" : { + "204" : { + "description" : "This status code indicates that the specified alias has been successfully deleted from API Gateway." + }, + "404" : { + "description" : "This status code indicates that an alias with the given id could not be found in API Gateway.", + "examples" : { + "application/json" : "{\r\n \"errorDetails\": \" Alias with id: 732c4526-db9a-4ef9-9782-edda1a6aa9bc does not exist.\"\r\n}" + } + }, + "405" : { + "description" : "This status code indicates that the specified HTTP method is not allowed for the requested alias in API Gateway." + }, + "401" : { + "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." + } + }, + "security" : [ { + "Basic" : [ ] + } ] + } + }, + "/alias" : { + "get" : { + "description" : "The method retrieves a list of all aliases in API Gateway.", + "operationId" : "getAllAlias", + "produces" : [ "application/json" ], + "parameters" : [ ], + "responses" : { + "200" : { + "description" : "This status code indicates that the list of aliases is successfully retrieved.", + "schema" : { + "type" : "array", + "items" : { + "$ref" : "#/definitions/Alias" + } + }, + "examples" : { + "application/json" : "{\r\n\t\"id\": \"732c4526-db9a-4ef9-9782-edda1a6aa9bc\"\r\n\t\"endPointURI\": \"https://myDevstage:9090\",\r\n\t\"connectionTimeout\": \"23\",\r\n\t\"optimizationTechnique\": \"MTOM\",\r\n\t\"readTimeout\": \"36\",\r\n\t\"passSecurityHeaders\": true,\r\n\t\"keystoreAlias\": \"DEFAULT_IS_KEYSTORE\",\r\n\t\"keyAlias\": \"ssos\",\r\n\t\"name\": \"MystageEndpoint\",\r\n\t\"description\": \"Endpoint alias for myDevstage.\",\r\n\t\"type\": \"endpoint\"\r\n},\r\n{\r\n\t\"id\": \"842c4526-db9a-4ef9-9782-edda1a6ab84c\"\r\n\t\"authType\": \"WSS_USERNAME\",\r\n\t\"signAndEncryptConfig\": {\r\n\t\t\"keyStoreAlias\": \"DEFAULT_IS_KEYSTORE\",\r\n\t\t\"keyAlias\": \"ssos\",\r\n\t\t\"certificateAlias\": \"ssos\",\r\n\t\t\"truststoreAlias\": \"DEFAULT_IS_TRUSTSTORE\"\r\n\t},\r\n\t\"wssCredentials\": {\r\n\t\t\"userName\": \"Administrator\",\r\n\t\t\"password\": \"bWFuYWdl\"\r\n\t},\r\n\t\"authMode\": \"NEW\",\r\n\t\"name\": \"UsernameMessageAlias\",\r\n\t\"description\": \"WSS username message alias\",\r\n\t\"type\": \"soapMessageSecurityAlias\"\r\n},\r\n{\r\n\t\"id\": \"652c4526-db8a-4ef9-9782-edda1a4gf9bc\"\r\n\t\"authType\": \"KERBEROS\",\r\n\t\"kerberosCredentials\": {\r\n\t\t\"servicePrincipal\": \"vmmachineadfs20.sag.com\",\r\n\t\t\"servicePrincipalNameForm\": \"username\",\r\n\t\t\"clientPrincipal\": \"Administrator\",\r\n\t\t\"clientPassword\": \"bWFuYWdl\"\r\n\t},\r\n\t\"authMode\": \"NEW\",\r\n\t\"name\": \"KerberosHttpTransportAlias\",\r\n\t\"description\": \"vmmachineadfs20 kerberos transport alias\",\r\n\t\"type\": \"httpTransportSecurityAlias\"\r\n},\r\n{\r\n\t\"id\": \"422c4526-db9a-4ef9-9872-edda1a6aa9bc\"\r\n\t\"authType\": \"HTTP_BASIC\",\r\n\t\"httpAuthCredentials\": {\r\n\t\t\"domain\": \"localhost\",\r\n\t\t\"userName\": \"Administrator\",\r\n\t\t\"password\": \"bWFuYWdl\"\r\n\t},\r\n\t\"authMode\": \"NEW\",\r\n\t\"name\": \"BasicHttpTransportAlias\",\r\n\t\"description\": \"Basic http transport alias\",\r\n\t\"type\": \"httpTransportSecurityAlias\"\r\n},\r\n{\r\n\t\"id\": \"732c4526-db9a-5t46-9782-edda1a4ac9bc\"\r\n\t\"authType\": \"NTLM\",\r\n\t\"httpAuthCredentials\": {\r\n\t\t\"domain\": \"localhost\",\r\n\t\t\"userName\": \"Administrator\",\r\n\t\t\"password\": \"bWFuYWdl\"\r\n\t},\r\n\t\"authMode\": \"NEW\",\r\n\t\"name\": \"NTLMTransportAlias\",\r\n\t\"description\": \"ntlm http transport alias\",\r\n\t\"type\": \"httpTransportSecurityAlias\"\r\n},\r\n{\r\n\t\"id\": \"652c4526-db9a-4ef9-3265-edda1a6aa9bc\"\r\n\t\"authType\": \"OAUTH2\",\r\n\t\"oauth2Token\": \"T2F1dGgydG9rZW4=\",\r\n\t\"authMode\": \"NEW\",\r\n\t\"name\": \"OAuthTransportAlias\",\r\n\t\"description\": \"OAuth2 alias for outbound transport security\",\r\n\t\"type\": \"httpTransportSecurityAlias\"\r\n},\r\n{\r\n\t\"id\": \"732c3265-db9a-4ef9-9782-edda1a6aa9bc\"\r\n\t\"authType\": \"KERBEROS\",\r\n\t\"signAndEncryptConfig\": {\r\n\t\t\"keyStoreAlias\": \"DEFAULT_IS_KEYSTORE\",\r\n\t\t\"keyAlias\": \"ssos\",\r\n\t\t\"certificateAlias\": \"ssos\",\r\n\t\t\"truststoreAlias\": \"DEFAULT_IS_TRUSTSTORE\"\r\n\t},\r\n\t\"kerberosCredentials\": {\r\n\t\t\"servicePrincipal\": \"vmmachine01.sag.com/adfs\",\r\n\t\t\"servicePrincipalNameForm\": \"username\",\r\n\t\t\"clientPrincipal\": \"Administrator\",\r\n\t\t\"clientPassword\": \"bWFuYWdl\"\r\n\t},\r\n\t\"authMode\": \"DELEGATE_INCOMING\",\r\n\t\"name\": \"KerberosMessageAlias\",\r\n\t\"description\": \"Kerberos outbound message secure alias\",\r\n\t\"type\": \"soapMessageSecurityAlias\"\r\n},\r\n{\r\n\t\"id\": \"12c4526-db9a-5ef9-9845-edda1a7ba9bc\"\r\n\t\"authType\": \"SAML\",\r\n\t\"signAndEncryptConfig\": {\r\n\t\t\"keyStoreAlias\": \"\",\r\n\t\t\"keyAlias\": null,\r\n\t\t\"certificateAlias\": null,\r\n\t\t\"truststoreAlias\": \"\"\r\n\t},\r\n\t\"samlIssuerConfig\": \"${SAMLIssuer1}\",\r\n\t\"name\": \"SAMLAlias\",\r\n\t\"description\": \"SAML secure alias\",\r\n\t\"type\": \"soapMessageSecurityAlias\"\r\n}\r\n" + } + }, + "401" : { + "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." + } + }, + "security" : [ { + "Basic" : [ ] + } ] + }, + "post" : { + "description" : "Use this method to create an alias. There are different types of alias like Endpoint, Simple etc. Refer to the Alias schema for different type of alias that you can create. If you want to create an alias for a specific type (say Endpoint alias), refer to the corresponding schema (EndpointAlias)", + "operationId" : "createAlias", + "consumes" : [ "application/json" ], + "produces" : [ "application/json" ], + "parameters" : [ { + "in" : "body", + "name" : "body", + "description" : "", + "required" : true, + "schema" : { + "$ref" : "#/definitions/Alias" + }, + "x-examples" : { + "application/json" : "{\r\n\t\"authType\": \"KERBEROS\",\r\n\t\"signAndEncryptConfig\": {\r\n\t\t\"keyStoreAlias\": \"DEFAULT_IS_KEYSTORE\",\r\n\t\t\"keyAlias\": \"ssos\",\r\n\t\t\"certificateAlias\": \"ssos\",\r\n\t\t\"truststoreAlias\": \"DEFAULT_IS_TRUSTSTORE\"\r\n\t},\r\n\t\"kerberosCredentials\": {\r\n\t\t\"servicePrincipal\": \"vmmachine01.sag.com/adfs\",\r\n\t\t\"servicePrincipalNameForm\": \"username\",\r\n\t\t\"clientPrincipal\": \"Administrator\",\r\n\t\t\"clientPassword\": \"bWFuYWdl\"\r\n\t},\r\n\t\"authMode\": \"DELEGATE_INCOMING\",\r\n\t\"name\": \"KerberosMessageAlias\",\r\n\t\"description\": \"Kerberos outbound message secure alias\",\r\n\t\"type\": \"soapMessageSecurityAlias\"\r\n\t\"id\": \"732c4526-db9a-4ef9-9782-edda1a6aa9bc\"\r\n}" + } + } ], + "responses" : { + "201" : { + "description" : "This status code indicates that the alias has been successfully created in API Gateway, and the newly created alias is available in the response body.", + "schema" : { + "$ref" : "#/definitions/Alias" + }, + "examples" : { + "application/json" : "{\r\n\t\"authType\": \"KERBEROS\",\r\n\t\"signAndEncryptConfig\": {\r\n\t\t\"keyStoreAlias\": \"DEFAULT_IS_KEYSTORE\",\r\n\t\t\"keyAlias\": \"ssos\",\r\n\t\t\"certificateAlias\": \"ssos\",\r\n\t\t\"truststoreAlias\": \"DEFAULT_IS_TRUSTSTORE\"\r\n\t},\r\n\t\"kerberosCredentials\": {\r\n\t\t\"servicePrincipal\": \"vmmachine01.sag.com/adfs\",\r\n\t\t\"servicePrincipalNameForm\": \"username\",\r\n\t\t\"clientPrincipal\": \"Administrator\",\r\n\t\t\"clientPassword\": \"bWFuYWdl\"\r\n\t},\r\n\t\"authMode\": \"DELEGATE_INCOMING\",\r\n\t\"name\": \"KerberosMessageAlias\",\r\n\t\"description\": \"Kerberos outbound message secure alias\",\r\n\t\"type\": \"soapMessageSecurityAlias\"\r\n\t\"id\": \"732c4526-db9a-4ef9-9782-edda1a6aa9bc\"\r\n}" + } + }, + "400" : { + "description" : "This status code indicates that an alias with the given name already exists in API Gateway or the request body is not correct.", + "examples" : { + "application/json" : "{}" + } + }, + "401" : { + "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." + } + }, + "security" : [ { + "Basic" : [ ] + } ] + } + } + }, + "securityDefinitions" : { + "Basic" : { + "description" : "API Gateway Administrator", + "type" : "basic" + } + }, + "definitions" : { + "Alias" : { + "type" : "object", + "discriminator" : "type", + "properties" : { + "id" : { + "type" : "string", + "description" : "A unique ID for the alias", + "readOnly" : true + }, + "name" : { + "type" : "string", + "description" : "A unique name for the assertion" + }, + "description" : { + "type" : "string", + "description" : "A description about the alias" + }, + "type" : { + "type" : "string", + "description" : "Type of the alias", + "enum" : [ "simple", "endpoint", "httpTransportSecurityAlias", "soapMessageSecurityAlias", "samlIssuerAlias", "authServerAlias", "webmethodsAlias", "transformationAlias", "serviceRegistryAlias", "clientMetadataMapping" ] + }, + "stage" : { + "type" : "string", + "description" : "Stage for which this alias needs to be used" + }, + "owner" : { + "type" : "string", + "description" : "Owner of the alias" + } + } + }, + "AuthInfo" : { + "type" : "object", + "discriminator" : "type" + }, + "AuthServerAlias" : { + "allOf" : [ { + "$ref" : "#/definitions/Alias" + }, { + "type" : "object", + "properties" : { + "localIntrospectionConfig" : { + "description" : "Configuration to do the local introspection", + "$ref" : "#/definitions/LocalIntrospectionConfig" + }, + "remoteIntrospectionConfig" : { + "description" : "Configuration to do the remote introspection.", + "$ref" : "#/definitions/RemoteIntrospectionConfig" + }, + "dcrEndpoint" : { + "description" : "configuration for the dynamic client registration", + "$ref" : "#/definitions/DynamicClientRegistrationEndpoint" + }, + "tokenGeneratorConfig" : { + "description" : "Configuration that is required to generate the token by the API Gateway", + "$ref" : "#/definitions/TokenGeneratorConfig" + }, + "sslConfig" : { + "description" : "SSL Configuration used for two ssl for the authorization server communications", + "$ref" : "#/definitions/SSLConfig" + }, + "metadata" : { + "description" : "Metadata information used by the API Portal", + "$ref" : "#/definitions/Metadata" + }, + "authServerScopes" : { + "type" : "array", + "description" : "List of scopes available in the authorization server", + "items" : { + "type" : "string" + } + }, + "supportedGrantTypes" : { + "type" : "array", + "description" : "List of grant types supported by the authorization server", + "items" : { + "type" : "string" + } + }, + "providerName" : { + "type" : "string", + "description" : "Name of the provider which was created using ClientMetadataMapping alias, used in the Dynamic client registration" + }, + "authServerType" : { + "type" : "string", + "description" : "Type of the authorization server", + "enum" : [ "LOCAL_IS", "REMOTE_IS", "EXTERNAL" ] + } + } + } ] + }, + "BasicAuth" : { + "allOf" : [ { + "$ref" : "#/definitions/AuthInfo" + }, { + "type" : "object", + "properties" : { + "username" : { + "type" : "string", + "description" : "Username for the basic authentication" + }, + "password" : { + "type" : "string", + "description" : "password of the corresponding username" + } + } + } ] + }, + "ClientMetadataMapping" : { + "allOf" : [ { + "$ref" : "#/definitions/Alias" + }, { + "type" : "object", + "properties" : { + "providerName" : { + "type" : "string", + "description" : "Name of the provider" + }, + "implNames" : { + "type" : "object", + "description" : "Map of specification names to the implementation names of the service provider", + "additionalProperties" : { + "type" : "string" + } + }, + "extendedValuesV2" : { + "type" : "array", + "description" : "List of headers that needs to be sent along with the client management request", + "items" : { + "$ref" : "#/definitions/ExtendedValue" + } + } + } + } ] + }, + "Credentials" : { + "type" : "object", + "properties" : { + "userName" : { + "type" : "string", + "description" : "Specify a username to access the native API" + }, + "password" : { + "type" : "string", + "description" : "Specify a password to access the native API" + }, + "domain" : { + "type" : "string", + "description" : "Specify a domain to access the native API" + } + } + }, + "DynamicClientRegistrationEndpoint" : { + "type" : "object", + "properties" : { + "authInfo" : { + "description" : "Authorization configuration to manage the clients in the authorization server", + "$ref" : "#/definitions/AuthInfo" + }, + "clientRegistrationEndpoint" : { + "description" : "Client registration endpoint configuration", + "$ref" : "#/definitions/OAuth2Endpoint" + } + } + }, + "EndpointAlias" : { + "allOf" : [ { + "$ref" : "#/definitions/Alias" + }, { + "type" : "object", + "properties" : { + "endPointURI" : { + "type" : "string", + "description" : "the default URI or components of the URI such as service name" + }, + "connectionTimeout" : { + "type" : "integer", + "format" : "int32", + "description" : "time interval (in seconds) after which a connection attempt times out" + }, + "readTimeout" : { + "type" : "integer", + "format" : "int32", + "description" : "time interval (in seconds) after which a socket read attempt times out" + }, + "optimizationTechnique" : { + "type" : "string", + "description" : "Type of optimization technique used for SOAP messages", + "enum" : [ "NONE", "MTOM", "SWA" ] + }, + "passSecurityHeaders" : { + "type" : "boolean", + "description" : "Boolean value whether to pass security headers or not" + }, + "keystoreAlias" : { + "type" : "string", + "description" : "Keystore alias name that is used for the signing/encryption" + }, + "keyAlias" : { + "type" : "string", + "description" : "Key alias in the particular keyStore" + } + } + } ] + }, + "ExtendedValue" : { + "type" : "object", + "properties" : { + "endpointType" : { + "type" : "string", + "description" : "Type of endpoint for which the additional header needs to sent", + "enum" : [ "CLIENT_REGISTRATION", "CLIENT_UPDATE", "CLIENT_DELETE", "CLIENT_READ", "SCOPE_CREATE", "SCOPE_READ", "SCOPE_DELETE", "SCOPE_UPDATE" ] + }, + "key" : { + "type" : "string", + "description" : "Header name" + }, + "value" : { + "type" : "string", + "description" : "Header value" + } + } + }, + "HTTPTransportSecurityAlias" : { + "allOf" : [ { + "$ref" : "#/definitions/Alias" + }, { + "type" : "object", + "properties" : { + "authType" : { + "type" : "string", + "description" : "type of authentication you want to use while communicating with the native API", + "enum" : [ "HTTP_BASIC", "NTLM", "OAUTH2", "KERBEROS", "JWT", "ALIAS", "REMOVE_INCOMING_HTTP_HEADERS" ] + }, + "authMode" : { + "type" : "string", + "description" : "Mode of authentication that needs to be used", + "enum" : [ "NEW", "INCOMING_HTTP_BASIC_AUTH", "INCOMING_WSS_USER", "INCOMING_X509", "DELEGATE_INCOMING", "INCOMING_OAUTH_TOKEN", "INCOMING_JWT", "TRANSPARENT", "INCOMING_KERBEROS" ] + }, + "httpAuthCredentials" : { + "description" : "Credentials that are used for HTTP authentication", + "$ref" : "#/definitions/Credentials" + }, + "kerberosCredentials" : { + "description" : "Credentials that are used for Kerberos authentication", + "$ref" : "#/definitions/KerberosCredentials" + }, + "oauth2Token" : { + "type" : "string", + "description" : "OAuth2 token that is used for authentication" + } + } + } ] + }, + "KerberosCredentials" : { + "type" : "object", + "properties" : { + "clientPrincipal" : { + "type" : "string", + "description" : "a unique identity to which Kerberos can assign tickets" + }, + "clientPassword" : { + "type" : "string", + "description" : "password for the client principal" + }, + "servicePrincipal" : { + "type" : "string", + "description" : "a unique identifier of a service instance" + }, + "servicePrincipalNameForm" : { + "type" : "string", + "description" : "the format in which you want to specify the principal name of the service that is registered with the principal database", + "enum" : [ "HOST_BASED", "USERNAME_BASED" ] + }, + "requestDelegateToken" : { + "type" : "boolean", + "description" : "Boolean value whether the token needs to be delegated or not" + } + } + }, + "LocalIntrospectionConfig" : { + "type" : "object", + "properties" : { + "issuer" : { + "type" : "string", + "description" : "Third party issuer name" + }, + "trustStoreAlias" : { + "type" : "string", + "description" : "The truststore to be used by API Gateway when validating the token issued by the authorization server. Truststore is a repository that holds all the trusted public certificates" + }, + "certificateAlias" : { + "type" : "string", + "description" : "Select the certificate from the truststore that is used to validate the token." + }, + "jwksuri" : { + "type" : "string", + "description" : "JSON Web Key URI" + }, + "description" : { + "type" : "string", + "description" : "Third party issuer description" + } + } + }, + "Metadata" : { + "type" : "object", + "properties" : { + "authorizeURL" : { + "type" : "string", + "description" : "URL to get the approval from the resource owner" + }, + "accessTokenURL" : { + "type" : "string", + "description" : "URL to get the access token from the authorization server" + }, + "refreshTokenURL" : { + "type" : "string", + "description" : "URL to get the new access token from the refresh token" + } + } + }, + "OAuth2Endpoint" : { + "type" : "object", + "properties" : { + "endpoint" : { + "type" : "string", + "description" : "Client registration endpoint in the authorization server" + }, + "keyStoreAlias" : { + "type" : "string", + "description" : "Specify the keystore that needs to be used by API Gateway while sending the request to the authorization server. A keystore is a repository of private key and its corresponding public certificate" + }, + "keyAlias" : { + "type" : "string", + "description" : "The key alias is the private key that is used sign the request sent to the authorization server" + }, + "headers" : { + "type" : "object", + "additionalProperties" : { + "type" : "string" + } + }, + "https" : { + "type" : "boolean" + } + } + }, + "OAuth2Endpoints" : { + "type" : "object", + "properties" : { + "endpoints" : { + "type" : "object", + "additionalProperties" : { + "$ref" : "#/definitions/OAuth2Endpoint" + } + }, + "keyStoreAlias" : { + "type" : "string" + }, + "keyAlias" : { + "type" : "string" + } + } + }, + "OpenIDProviderAlias" : { + "allOf" : [ { + "$ref" : "#/definitions/Alias" + }, { + "type" : "object", + "properties" : { + "issuer" : { + "type" : "string" + }, + "authorizationEndpoint" : { + "type" : "string" + }, + "tokenEndpoint" : { + "type" : "string" + }, + "userinfoEndpoint" : { + "type" : "string" + }, + "jwksUri" : { + "type" : "string" + }, + "openIDScopes" : { + "type" : "array", + "items" : { + "type" : "string" + } + }, + "openIDResponseType" : { + "type" : "string", + "enum" : [ "code", "id_token", "token_id_token", "id_token_token" ] + }, + "clientId" : { + "type" : "string" + }, + "clientSecret" : { + "type" : "string" + }, + "prompt" : { + "type" : "string", + "enum" : [ "none", "login", "consent", "select_account" ] + }, + "openIDGrantType" : { + "type" : "string", + "enum" : [ "authorization_code" ] + }, + "openIDDisplayValue" : { + "type" : "string", + "enum" : [ "none", "page", "popup", "touch", "wap" ] + }, + "openIDTokenEndpointAuthMode" : { + "type" : "string", + "enum" : [ "client_secret_basic", "client_secret_post", "none" ] + }, + "maxAge" : { + "type" : "string" + }, + "redirectionEndpointHost" : { + "type" : "string" + }, + "redirectionEndpointPort" : { + "type" : "string" + }, + "uiLocales" : { + "type" : "string" + }, + "includeUserinfoClaims" : { + "type" : "boolean" + }, + "trustStoreAlias" : { + "type" : "string" + } + } + } ] + }, + "RemoteIntrospectionConfig" : { + "type" : "object", + "properties" : { + "introspectionEndpoint" : { + "type" : "string", + "description" : "Endpoint of the authorization server to do the introspection" + }, + "clientId" : { + "type" : "string", + "description" : "ClientId of a client in the authorization server" + }, + "clientSecret" : { + "type" : "string", + "description" : "Client Secret of the corresponding clientId in the authorization server" + }, + "user" : { + "type" : "string", + "description" : "A user in the API Gateway under whom the introspection endpoint is invoked" + } + } + }, + "SAMLIssuerAlias" : { + "allOf" : [ { + "$ref" : "#/definitions/Alias" + }, { + "type" : "object", + "properties" : { + "issuerCommunicationMode" : { + "type" : "string", + "description" : "Mode of communication to the STS", + "enum" : [ "NORMAL_CLIENT", "ACT_AS_DELEGATION" ] + }, + "issuerPolicy" : { + "type" : "string", + "description" : "The webMethods Integration Server service name" + }, + "issuerAuthScheme" : { + "type" : "string", + "description" : "The authentication type used for communicating to STS", + "enum" : [ "BASIC_AUTH", "WSS_USERNAME", "KERBEROS", "X509" ] + }, + "issuerAuthMode" : { + "type" : "string", + "description" : "Mode of communication", + "enum" : [ "NEW", "INCOMING_HTTP_BASIC_AUTH", "INCOMING_WSS_USER", "INCOMING_X509", "DELEGATE_INCOMING", "INCOMING_OAUTH_TOKEN", "INCOMING_JWT", "TRANSPARENT", "INCOMING_KERBEROS" ] + }, + "wssCredentials" : { + "description" : "Credentials required for the WSS Username token", + "$ref" : "#/definitions/WssCredentials" + }, + "kerberosCredentials" : { + "description" : "Credentials for the kerberos token", + "$ref" : "#/definitions/KerberosCredentials" + }, + "endpoint" : { + "type" : "string", + "description" : "The endpoint URI of the STS" + }, + "samlVersion" : { + "type" : "string", + "description" : "SAML version to be used for authentication", + "enum" : [ "SAML1_1", "SAML_2_0" ] + }, + "wsTrustVersion" : { + "type" : "string", + "description" : "WS-Trust version that API Gateway must use to send the RST to the SAML issuer", + "enum" : [ "WS_TRUST_1_0", "WS_TRUST_1_3" ] + }, + "appliesTo" : { + "type" : "string", + "description" : "Specify the scope for which this security token is required" + }, + "extendedParameters" : { + "type" : "object", + "description" : "Extensions to the element for requesting specific types of keys, algorithms, or key and algorithms, as specified by a given policy in the return token(s)", + "additionalProperties" : { + "type" : "string" + } + }, + "signAndEncryptConfig" : { + "description" : "Private and public keys used for signature and encryption", + "$ref" : "#/definitions/SignAndEncryptConfig" + }, + "assertionId" : { + "type" : "string" + } + } + } ] + }, + "SOAPMessageSecurityAlias" : { + "allOf" : [ { + "$ref" : "#/definitions/Alias" + }, { + "type" : "object", + "properties" : { + "authType" : { + "type" : "string", + "description" : "Type of authentication that needs to be used", + "enum" : [ "WSS_USERNAME", "SAML", "KERBEROS", "ALIAS", "REMOVE_WSS_HEADERS", "NONE" ] + }, + "authMode" : { + "type" : "string", + "description" : "Mode of authentication", + "enum" : [ "NEW", "INCOMING_HTTP_BASIC_AUTH", "INCOMING_WSS_USER", "INCOMING_X509", "DELEGATE_INCOMING", "INCOMING_OAUTH_TOKEN", "INCOMING_JWT", "TRANSPARENT", "INCOMING_KERBEROS" ] + }, + "wssCredentials" : { + "description" : "Credentials required for the WSS Username token", + "$ref" : "#/definitions/WssCredentials" + }, + "kerberosCredentials" : { + "description" : "Credentials for the kerberos token", + "$ref" : "#/definitions/KerberosCredentials" + }, + "samlIssuerConfig" : { + "type" : "string", + "description" : "Saml issuer configuration name" + }, + "signAndEncryptConfig" : { + "description" : "private and public keys used for signature and encryption", + "$ref" : "#/definitions/SignAndEncryptConfig" + } + } + } ] + }, + "SSLConfig" : { + "type" : "object", + "properties" : { + "keyStoreAlias" : { + "type" : "string", + "description" : "Specify the keystore that needs to be used by API Gateway while sending the request to the authorization server. A keystore is a repository of private key and its corresponding public certificate" + }, + "keyAlias" : { + "type" : "string", + "description" : "The key alias is the private key that is used sign the request sent to the authorization server" + }, + "trustStoreAlias" : { + "type" : "string", + "description" : "The truststore to be used by API Gateway when validating the incoming response from the authorization server. Truststore is a repository that holds all the trusted public certificates" + } + } + }, + "ServiceRegistryCommunication" : { + "type" : "object", + "properties" : { + "path" : { + "type" : "string", + "description" : "Resource path that will be appened with base endpoint while communicating with service registry" + }, + "httpMethod" : { + "type" : "string", + "description" : "HttpMethod that is used while communicating with the service registry", + "enum" : [ "GET", "POST", "PUT", "DELETE", "HEAD", "PATCH", "OPTIONS", "TRACE", "CUSTOM" ] + } + } + }, + "ServiceRegistryModel" : { + "allOf" : [ { + "$ref" : "#/definitions/Alias" + }, { + "type" : "object", + "properties" : { + "endpointURI" : { + "type" : "string", + "description" : "Endpoint that is used to communicate with the service registry" + }, + "heartBeatInterval" : { + "type" : "integer", + "format" : "int32", + "description" : "APIGateway will ping the service registry on the configured interval for every API" + }, + "username" : { + "type" : "string", + "description" : "Username that is used in the Basic authentication when communicating with the service registry" + }, + "password" : { + "type" : "string", + "description" : "Password that is used in the Basic authentication when communicating with the service registry" + }, + "keystoreAlias" : { + "type" : "string", + "description" : "A keystore is a repository of private key. This keystore contains the private key used for the SSL communication with the Service Registry. For information on how to configure the keystore aliases, refer API Gateway Administration swagger" + }, + "keyAlias" : { + "type" : "string", + "description" : "The key alias is the private key that is used for signing when using SSL communication with the Service Registry." + }, + "trustStoreAlias" : { + "type" : "string", + "description" : "A truststore is a repository of public keys. This truststore contains the public key of the Service Registry used for the SSL communication with the Service Registry. For information on how to configure the truststore aliases, refer API Gateway Administration swagger" + }, + "customHeaders" : { + "type" : "object", + "description" : "Custom headers that needs be sent while communicating with the service registry", + "additionalProperties" : { + "type" : "string" + } + }, + "discoveryInfo" : { + "description" : "Contains information like resource path and HTTP method to use while discovering a service in service registry", + "$ref" : "#/definitions/ServiceRegistryCommunication" + }, + "registrationInfo" : { + "description" : "Contains information like resource path and HTTP method to use while registering a service in service registry", + "$ref" : "#/definitions/ServiceRegistryCommunication" + }, + "deRegistrationInfo" : { + "description" : "Contains information like resource path and HTTP method to use while de-registering a service from service registry", + "$ref" : "#/definitions/ServiceRegistryCommunication" + }, + "serviceRegistryType" : { + "type" : "string", + "description" : "It contains the information about the type of service registry", + "enum" : [ "SERVICE_CONSUL", "EUREKA" ] + }, + "ConnectionTimeout" : { + "type" : "integer", + "format" : "int32", + "description" : "The time interval (in seconds) after which a connection attempt times out while communicating with service registry" + }, + "readTimeout" : { + "type" : "integer", + "format" : "int32", + "description" : "The time interval (in seconds) after which a socket read attempt times out while communicating with service registry" + } + } + } ] + }, + "SignAndEncryptConfig" : { + "type" : "object", + "properties" : { + "keyStoreAlias" : { + "type" : "string", + "description" : "Specify the keystore that needs to be used by API Gateway while sending the request to the native API. A keystore is a repository of private key and its corresponding public certificate" + }, + "keyAlias" : { + "type" : "string", + "description" : "The key alias is the private key that is used sign the request sent to the native API" + }, + "truststoreAlias" : { + "type" : "string", + "description" : "The truststore to be used by API Gateway when sending the request to the native API. Truststore is a repository that holds all the trusted public certificates" + }, + "certificateAlias" : { + "type" : "string", + "description" : "Select the certificate from the truststore that is used to validate the request that is sent to the native API." + } + } + }, + "SimpleAlias" : { + "allOf" : [ { + "$ref" : "#/definitions/Alias" + }, { + "type" : "object", + "properties" : { + "value" : { + "type" : "string", + "description" : "value of the simple alias" + } + } + } ] + }, + "ThirdPartyOAuth2Alias" : { + "allOf" : [ { + "$ref" : "#/definitions/Alias" + }, { + "type" : "object", + "properties" : { + "providerName" : { + "type" : "string" + }, + "endpointDetails" : { + "$ref" : "#/definitions/OAuth2Endpoints" + }, + "authInfo" : { + "$ref" : "#/definitions/AuthInfo" + }, + "metadata" : { + "$ref" : "#/definitions/Metadata" + } + } + } ] + }, + "TokenAuth" : { + "allOf" : [ { + "$ref" : "#/definitions/AuthInfo" + }, { + "type" : "object", + "properties" : { + "tokenType" : { + "type" : "string", + "example" : "SSWS/Bearer", + "description" : "Type of token" + }, + "token" : { + "type" : "string", + "description" : "Corresponding token value" + } + } + } ] + }, + "TokenGeneratorConfig" : { + "type" : "object", + "properties" : { + "audience" : { + "type" : "string", + "description" : "Default audience value that needs to be added in the generated JWT" + }, + "expiry" : { + "type" : "integer", + "format" : "int64", + "description" : "Expiry interval of the JWT in minutes" + }, + "algorithm" : { + "type" : "string", + "description" : "Type of algorithm that needs to be used for signing the JWT", + "enum" : [ "RS256", "RS384", "RS512" ] + }, + "accessTokenExpInterval" : { + "type" : "integer", + "format" : "int32", + "description" : "Expiry interval in seconds for the generated access token " + }, + "authCodeExpInterval" : { + "type" : "integer", + "format" : "int32", + "description" : "Expiry interval in seconds for the generated authorization code in Authorization code grant type" + } + } + }, + "TransformationAlias" : { + "allOf" : [ { + "$ref" : "#/definitions/Alias" + }, { + "type" : "object", + "properties" : { + "fileName" : { + "type" : "string", + "description" : "the name of the file" + }, + "content" : { + "type" : "string", + "description" : "content of the file" + } + } + } ] + }, + "WebmethodsAlias" : { + "allOf" : [ { + "$ref" : "#/definitions/Alias" + }, { + "type" : "object", + "properties" : { + "serviceName" : { + "type" : "string", + "description" : "the webMethods Integration Server service name" + }, + "runAsUser" : { + "type" : "string", + "description" : "User in gateway under whom you want to invoke this service" + }, + "complyToISSpec" : { + "type" : "boolean", + "description" : "A boolean value wheather the given service complies to the IS sepcification" + } + } + } ] + }, + "WssCredentials" : { + "type" : "object", + "properties" : { + "userName" : { + "type" : "string", + "description" : "a username used to generate the WSS username token" + }, + "password" : { + "type" : "string", + "description" : "password for the username" + }, + "passwordType" : { + "type" : "string", + "description" : "type of password", + "enum" : [ "NONE", "TEXT", "DIGEST" ] + } + } + } + } +} \ No newline at end of file diff --git a/apigatewayservices/APIGatewayApplication.json b/apigatewayservices/APIGatewayApplication.json new file mode 100644 index 0000000..1752239 --- /dev/null +++ b/apigatewayservices/APIGatewayApplication.json @@ -0,0 +1,1464 @@ +{ + "swagger": "2.0", + "info": { + "description": "API Gateway Application Management Service allows you to manage the Applications in API Gateway. Any user with the 'Manage applications' functional privilege can manage the APIs in the API Gateway. By default, the users who are part of either API-Gateway-Providers or API-Gateway-Administrators groups will have this privilege.\n\n An application defines the precise identifiers by which messages from a particular consumer application is recognized at run time. The identifiers can be, for example, user name in HTTP headers, a range of IP addresses, such that API Gateway can identify or authenticate the consumers that are requesting an API.\n\n. The ability of API Gateway to relate a request to a specific consumer application enables it to:\n\n 1. Control access to an API at run time (that is, allow only authorized consumer applications to invoke an API).\n\n 2. Monitor an API for violations of a Service-Level Agreement (SLA) for a specified application.\n\n 3. Indicate the consumer application to which a logged transaction event belongs.\n\n\n\n An application has the following attributes for specifying the identifiers:\n\n 1. IP address, which specifies one or more IP addresses that identify requests from a particular consumer application. Example: 192.168.0.10\n\n This attribute is queried when the Identify and Authorize Application policy is configured to identify consumer applications by IP address.\n\n 2. JWT claims set, which specifies one or more claims that identify requests from a particular consumer application. The claims are a set of name-value pairs that provide sufficient information about the application. Example: sub = Administrator.\n\n This attribute is queried when the Identify and Authorize Application policy is configured to identify consumer applications by JSON Web Token (JWT).\n\n 3. Consumer certificate, which specifies the X.509 certificates that identify requests from a particular consumer.\n\n This attribute is queried when the Identify and authenticate consumer policy is configured to identify the consumer applications by a consumer certificate.\n\n 4. Identification token, which specifies the host names, user names or other distinguishing strings that identify requests from a particular consumer application.\n\n This attribute is queried when the Identify and authenticate consumer policy action is configured to identify consumer applications by host name, HTTP user name, and WSS user name.\n\n \n\n As an API provider or an API Gateway Administrator you can create and manage applications, and register applications with the APIs.\n\n These are the high level stages of managing and using an application:\n\n 1. API developers request the API Gateway administrators to create an application for access as per the required identification criteria.\n\n 2. API Gateway provider or administrator validates the request and creates a new application, there by provisioning the application specific access tokens (API access key and OAuth credentials).\n\n 3. API Developer, upon finding a suitable API, sends a request to API Gateway for consumption by providing the application details.\n\n 4. After validating the request, API Gateway provider or administrator associates the application with the API. Keys are generated for applications and not for every API that the application consumes. \n\n Note: The approval process, if any, is handled by the requesting application and not handled by API Gateway.\n\n 5. The API developer can then use the application with the proper identifier (such as the access key or identifier) to access the API. \n\n Strategies: \n\n A strategy is a way to authenticate the incoming request and provides multiple authentication mechanisms or multiple authorization servers for a single authentication scheme. API Gateway identifies the application and validates the token submitted through the strategy configured in the application. You can create multiple strategies authorized by an API for an application. For example, in case of OAuth authentication scheme, you want the application to support both OKTA and PINGFederate or OKTA with multiple tenants. This can be configured as OAuth strategy for the application.", + "version": "10.3", + "title": "API Gateway Application Management Service" + }, + "host": "localhost:5555", + "basePath": "/rest/apigateway", + "schemes": [ + "http" + ], + "consumes": [ + "plain/text" + ], + "produces": [ + "application/json" + ], + "paths": { + "/applications": { + "get": { + "description": "The method retrieves a list of available applications in API Gateway.", + "operationId": "getApplications", + "produces": [ + "application/json" + ], + "parameters": [], + "responses": { + "200": { + "description": "This status code indicates that a list of the available applications is retrieved successfully.", + "schema": { + "$ref": "#/definitions/Application" + }, + "examples": { + "application/json": "{\n \"applications\": [\n {\n \"name\": \"TestSampleApp\",\n \"description\": null,\n \"contactEmails\": [],\n \"identifiers\": [\n {\n \"id\": \"3ce6f4df-e773-4fdb-bed3-3d63b5cb520c\",\n \"name\": \"Username\",\n \"key\": \"httpBasicAuth\",\n \"value\": [\n \"Administrator\"\n ]\n }\n ],\n \"siteURLs\": [],\n \"jsOrigins\": [],\n \"authStrategyIds\": [\n \"81df9682-6a28-4ebc-92fd-2c486d3f75c2\"\n ],\n \"version\": \"1.0\",\n \"id\": \"803b7f16-45c6-4b1c-be26-4da053d40640\",\n \"created\": \"2018-12-04 05:27:56 GMT\",\n \"lastupdated\": null,\n \"owner\": \"Administrator\",\n \"consumingAPIs\": [],\n \"accessTokens\": {\n \"apiAccessKey_credentials\": {\n \"apiAccessKey\": \"f293cbb5cb0f1367ecc55b4c5b1717dad4073f77d2bde869cf8ee0162cc08f38\",\n \"expirationInterval\": null,\n \"expirationDate\": null,\n \"expired\": false\n },\n \"oauth_credentials\": {\n \"clientID\": null,\n \"clientSecret\": null,\n \"clientName\": null,\n \"scopes\": null,\n \"token_lifetime\": null,\n \"token_refresh_limit\": null,\n \"redirect_uris\": [],\n \"Type\": \"confidential\"\n }\n }\n }\n ]\n}" + } + }, + "401": { + "description": "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." + } + }, + "security": [ + { + "Basic": [] + } + ] + }, + "post": { + "description": "The method creates an application in API Gateway.", + "operationId": "createApplication", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "parameters": [ + { + "in": "body", + "name": "body", + "description": "This parameter describes the request payload of an application that is to be created in API Gateway.", + "required": true, + "schema": { + "$ref": "#/definitions/Application" + }, + "x-examples": { + "application/json": "{\"id\":\"\",\"name\":\"TestApp\",\"description\":null,\"version\":\"1.0\",\"contactEmails\":[],\"siteURLs\":[],\"identifiers\":[{\"value\":[\"admin\"],\"name\":\"Username\",\"key\":\"httpBasicAuth\"}],\"consumingAPIs\":[],\"owner\":null}" + } + } + ], + "responses": { + "200": { + "description": "This status code indicates that the application has been successfully created in API Gateway.", + "schema": { + "$ref": "#/definitions/Application" + }, + "examples": { + "application/json": "{\n \"name\": \"TestApp\",\n \"description\": null,\n \"contactEmails\": [],\n \"identifiers\": [\n {\n \"id\": \"820332c8-7467-4340-bef8-dae595c69f7b\",\n \"name\": \"Username\",\n \"key\": \"httpBasicAuth\",\n \"value\": [\n \"admin\"\n ]\n }\n ],\n \"siteURLs\": [],\n \"jsOrigins\": [],\n \"authStrategyIds\": [],\n \"version\": \"1.0\",\n \"id\": \"79251257-1ea5-4df7-a8bf-a345ea835592\",\n \"created\": \"2018-12-04 05:33:20 GMT\",\n \"lastupdated\": null,\n \"owner\": \"Administrator\",\n \"consumingAPIs\": [],\n \"accessTokens\": {\n \"apiAccessKey_credentials\": {\n \"apiAccessKey\": \"dad584e3b45f90db5baab4d52a24c2ff9201e5a5e48eaea0740bb4acf19fa937\",\n \"expirationInterval\": null,\n \"expirationDate\": null,\n \"expired\": false\n },\n \"oauth_credentials\": {\n \"clientID\": null,\n \"clientSecret\": null,\n \"clientName\": null,\n \"scopes\": null,\n \"token_lifetime\": null,\n \"token_refresh_limit\": null,\n \"redirect_uris\": [],\n \"Type\": \"confidential\"\n }\n }\n}" + } + }, + "400": { + "description": "This status code indicates that an application with the given ID already exists in API Gateway" + }, + "401": { + "description": "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." + } + }, + "security": [ + { + "Basic": [] + } + ] + }, + "delete": { + "description": "The method deletes the specified application in API Gateway.", + "operationId": "deleteApplications", + "produces": [ + "application/json" + ], + "parameters": [ + { + "name": "ids", + "in": "query", + "description": "This parameter specifies the ID of an application that is to be deleted in API Gateway.", + "required": false, + "type": "string" + } + ], + "responses": { + "204": { + "description": "This status code indicates that the specified application has been successfully deleted from API Gateway." + }, + "401": { + "description": "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." + }, + "404": { + "description": "This status code indicates that an application with the given ID could not be found in API Gateway." + } + }, + "security": [ + { + "Basic": [] + } + ] + } + }, + "/applications/{applicationId}": { + "get": { + "description": "The method retrieves the details of a specified application in API Gateway", + "operationId": "getApplication", + "produces": [ + "application/json" + ], + "parameters": [ + { + "name": "applicationId", + "in": "path", + "description": "This parameter specifies the ID of an application whose details are to be retrieved in API Gateway.", + "required": true, + "type": "string" + } + ], + "responses": { + "200": { + "description": "This status code indicates that the details of the specified application are retrieved successfully.", + "schema": { + "$ref": "#/definitions/Application" + }, + "examples": { + "application/json": "{\n \"applications\": [\n {\n \"name\": \"TestApp\",\n \"description\": null,\n \"contactEmails\": [],\n \"identifiers\": [\n {\n \"id\": \"820332c8-7467-4340-bef8-dae595c69f7b\",\n \"name\": \"Username\",\n \"key\": \"httpBasicAuth\",\n \"value\": [\n \"admin\"\n ]\n }\n ],\n \"siteURLs\": [],\n \"jsOrigins\": [],\n \"authStrategyIds\": [],\n \"version\": \"1.0\",\n \"id\": \"79251257-1ea5-4df7-a8bf-a345ea835592\",\n \"created\": \"2018-12-04 05:33:20 GMT\",\n \"lastupdated\": null,\n \"owner\": \"Administrator\",\n \"consumingAPIs\": [],\n \"accessTokens\": {\n \"apiAccessKey_credentials\": {\n \"apiAccessKey\": \"eb3fcb16-89bd-4d0b-b45b-c1257686e4d6\",\n \"expirationInterval\": null,\n \"expirationDate\": null,\n \"expired\": false\n },\n \"oauth_credentials\": {\n \"clientID\": null,\n \"clientSecret\": null,\n \"clientName\": null,\n \"scopes\": null,\n \"token_lifetime\": null,\n \"token_refresh_limit\": null,\n \"redirect_uris\": [],\n \"Type\": \"confidential\"\n }\n }\n }\n ]\n}" + } + }, + "401": { + "description": "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." + }, + "404": { + "description": "This status code indicates that an application with the given ID could not be found in API Gateway." + } + }, + "security": [ + { + "Basic": [] + } + ] + }, + "put": { + "description": "This HTTP request updates a specified application in API Gateway.", + "operationId": "updateApplication", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "parameters": [ + { + "in": "body", + "name": "body", + "description": "This parameter describes the request payload of an application that is to be updated in API Gateway.", + "required": true, + "schema": { + "$ref": "#/definitions/Application" + }, + "x-examples": { + "application/json": "{\"id\":\"221aa46e-501d-4ae8-911f-34458e062e63\",\"name\":\"TestApp\",\"description\":null,\"version\":\"1.0\",\"contactEmails\":[],\"siteURLs\":[],\"identifiers\":[{\"value\":[\"admin\"],\"name\":\"Username\",\"key\":\"httpBasicAuth\"}],\"consumingAPIs\":[],\"owner\":null,\"accessTokens\":{\"apiAccessKey_credentials\":{\"apiAccessKey\":\"a6e43495-f981-43da-8f6a-ff8cb5689864\",\"expirationInterval\":null},\"oauth_credentials\":{\"Type\":\"confidential\",\"clientID\":\"a8271b2d-d903-4869-b571-c21088ac4b8d\",\"clientSecret\":\"13e2b1ca-befb-4fe3-909e-ed9fdb0a6748\",\"clientName\":\"TestApp-a1f3b232-4018-44c9-a086-77804fd55dd9\",\"scopes\":[\"dd5b733f-b31e-4f1d-86be-97364865c70b\",\"3de85431-d45b-418d-b5aa-0be5c3b5714d\"],\"redirect_uris\":[\"https://placeholder_redirect_uri\"],\"token_lifetime\":\"3600\",\"token_refresh_limit\":\"100\",\"accessTokenRequestURI\":null}}}" + } + }, + { + "name": "applicationId", + "in": "path", + "description": "This parameter specifies the ID of an application that is to be updated in API Gateway.", + "required": true, + "type": "string" + } + ], + "responses": { + "200": { + "description": "This status code indicates that the specified application has been successfully updated in API Gateway.", + "schema": { + "$ref": "#/definitions/Application" + } + }, + "400": { + "description": "This status code indicates that the specified application could not be updated" + }, + "401": { + "description": "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." + } + }, + "security": [ + { + "Basic": [] + } + ] + }, + "patch": { + "description": "This HTTP PATCH request suspends the specified application in API Gateway.", + "operationId": "patchApplication", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "parameters": [ + { + "in": "body", + "name": "body", + "description": "This parameter describes the request payload of an application that is to be updated in API Gateway.", + "required": true, + "schema": { + "$ref": "#/definitions/Application" + }, + "x-examples": { + "application/json": "{\"isSuspended\":\"true\"}" + } + }, + { + "name": "applicationId", + "in": "path", + "description": "This parameter specifies the ID of an application that is to be updated in API Gateway.", + "required": true, + "type": "string" + } + ], + "responses": { + "200": { + "description": "This status code indicates that the specified application has been successfully updated in API Gateway.", + "schema": { + "$ref": "#/definitions/Application" + } + }, + "400": { + "description": "This status code indicates that the specified application could not be updated" + }, + "401": { + "description": "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." + } + }, + "security": [ + { + "Basic": [] + } + ] + } + }, + "/applications/{applicationId}/apis": { + "get": { + "description": "The method retrieves a list of registered APIs for the specified application in API Gateway.", + "operationId": "getRegisteredApis", + "produces": [ + "application/json" + ], + "parameters": [ + { + "name": "applicationId", + "in": "path", + "description": "This parameter specifies the ID of an application whose registered APIs are to be retrieved in API Gateway.", + "required": true, + "type": "string" + } + ], + "responses": { + "200": { + "description": "This status code indicates that a list of registered APIs for the application is retrieved successfully.", + "examples": { + "application/json": "{\n \"apiIDs\": [\n \"2aa651f4-2696-425b-96c4-440ad78b0305\"\n ]\n}" + } + }, + "401": { + "description": "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." + }, + "404": { + "description": "This status code indicates that an application with the given ID could not be found in API Gateway." + } + }, + "security": [ + { + "Basic": [] + } + ] + }, + "post": { + "description": "This HTTP request registers the APIs with the specified application in API Gateway.", + "operationId": "registerApis", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "parameters": [ + { + "in": "body", + "name": "body", + "description": "This parameter specifies the IDs of the APIs for registering in an application in API Gateway.", + "required": true, + "schema": { + "type": "array", + "items": { + "type": "string" + } + }, + "x-examples": { + "application/json": "{\"apiIDs\":[\"3de85431-d45b-418d-b5aa-0be5c3b5714d\"]}" + } + }, + { + "name": "applicationId", + "in": "path", + "description": "This parameter specifies the ID of an application for registering APIs in API Gateway.", + "required": true, + "type": "string" + } + ], + "responses": { + "200": { + "description": "This status code indicates that the given APIs have been successfully registered with the specified application in API Gateway.", + "examples": { + "application/json": "{}" + } + }, + "400": { + "description": "This status code indicates that an application with the given ID could not be found in API Gateway" + }, + "401": { + "description": "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." + } + }, + "security": [ + { + "Basic": [] + } + ] + }, + "put": { + "description": "This HTTP request updates the registered APIs of the specified application.", + "operationId": "updateRegisteredApis", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "parameters": [ + { + "in": "body", + "name": "body", + "description": "This parameter specifies the ID of a registered API that is to be updated in API Gateway.", + "required": true, + "schema": { + "type": "array", + "items": { + "type": "string" + } + }, + "x-examples": { + "application/json": "{\"apiIDs\":[\"3de85431-d45b-418d-b5aa-0be5c3b5714d\"]}" + } + }, + { + "name": "applicationId", + "in": "path", + "description": "This parameter specifies the ID of an application for updating the details of the registered APIs in API Gateway.", + "required": true, + "type": "string" + } + ], + "responses": { + "200": { + "description": "This status code indicates that the registered API has been successfully updated in API Gateway." + }, + "400": { + "description": "This status code indicates that an application with the given ID could not be found in API Gateway." + }, + "401": { + "description": "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." + } + }, + "security": [ + { + "Basic": [] + } + ] + }, + "delete": { + "description": "The method unregisters the APIs from the specified application in API Gateway.", + "operationId": "unregisterApis", + "produces": [ + "application/json" + ], + "parameters": [ + { + "name": "apiIDs", + "in": "query", + "description": "This parameter specifies the IDs of APIs that are to be unregistered from the specified application in API Gateway.", + "required": true, + "type": "string" + }, + { + "name": "applicationId", + "in": "path", + "description": "This parameter specifies the ID of an application for unregistering the associated APIs in API Gateway.", + "required": true, + "type": "string" + } + ], + "responses": { + "204": { + "description": "This status code indicates that APIs are successfully unregistered from the specified application in API Gateway." + }, + "401": { + "description": "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." + }, + "404": { + "description": "This status code indicates that an application with the given ID could not be found in API Gateway." + } + }, + "security": [ + { + "Basic": [] + } + ] + } + }, + "/applications/{applicationId}/accessTokens": { + "get": { + "description": "The method retrieves a map of access token endpoints for all the authorization servers configured", + "operationId": "getAccessTokenEndpoints", + "produces": [ + "application/json" + ], + "parameters": [ + { + "name": "applicationId", + "in": "path", + "description": "This parameter specifies the ID of an application whose access token endpoints are to be retrieved from API Gateway.", + "required": true, + "type": "string" + } + ], + "responses": { + "200": { + "description": "This status code indicates that a list of access token endpoints for the application are retrieved successfully.", + "examples": { + "application/json": "{\n \"local\": {\n \"uris\": {\n \"authorizeUrl\": \"http://vm:5555/invoke/pub.apigateway.oauth2/authorize\",\n \"accessTokenUrl\": \"http://vm:5555/invoke/pub.apigateway.oauth2/getAccessToken\",\n \"refreshTokenUrl\": \"http://vm:5555/invoke/pub.oauth/refreshAccessToken\"\n }\n }\n}" + } + }, + "401": { + "description": "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." + }, + "404": { + "description": "This status code indicates that an application with the given ID could not be found in API Gateway." + } + }, + "security": [ + { + "Basic": [] + } + ] + }, + "post": { + "description": "The method regenerates the access tokens (only API Key) of an application. In the payload, you either specify type = apiAccessKeyCredentials or type = all. For OAuth, you cannot regenerate the application credentials using this API. You will have to delete the strategy and create a new one.", + "operationId": "regenerateAccessTokens", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "parameters": [ + { + "name": "applicationId", + "in": "path", + "description": "This parameter specifies the ID of an application for generating the access Tokens in API Gateway.", + "required": true, + "type": "string" + }, + { + "in": "body", + "name": "body", + "description": "This parameter specifies the type of token to be regenerated.", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "This status code indicates that the access tokens are successfully regenerated for the application in API Gateway." + }, + "400": { + "description": "This status code indicates that an application with the given ID could not be found in API Gateway" + }, + "401": { + "description": "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." + } + }, + "security": [ + { + "Basic": [] + } + ] + }, + "delete": { + "description": "The method clears the access tokens from the specified application in API Gateway.", + "operationId": "clearAccessTokens", + "produces": [ + "application/json" + ], + "parameters": [ + { + "name": "applicationId", + "in": "path", + "description": "This parameter specifies the ID of an application for which the access tokesn needs to cleared", + "required": true, + "type": "string" + } + ], + "responses": { + "204": { + "description": "This status code indicates that APIs are successfully unregistered from the specified application in API Gateway." + }, + "401": { + "description": "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." + }, + "404": { + "description": "This status code indicates that an application with the given ID could not be found in API Gateway." + } + }, + "security": [ + { + "Basic": [] + } + ] + } + }, + "/applications/_search": { + "get": { + "description": "The method retrieves a list of available applications in API Gateway based on the search query parameters.", + "operationId": "searchApplications", + "produces": [ + "application/json" + ], + "parameters": [ + { + "name": "ids", + "in": "query", + "description": "This parameter specifies the IDs of applications whose details are to be retrieved in API Gateway.", + "required": false, + "type": "string" + }, + { + "name": "idsToExclude", + "in": "query", + "description": "This parameter specifies the IDs of applications whose details are to be removed while retrieving other applications in API Gateway.", + "required": false, + "type": "string" + }, + { + "name": "from", + "in": "query", + "description": "This parameter specifies the last updated date in milliseconds. The applications whose last updated date greater than or equal to this are to be retrieved in API Gateway.", + "required": false, + "type": "number" + } + ], + "responses": { + "200": { + "description": "This status code indicates that the details of the specified applications are retrieved successfully.", + "schema": { + "$ref": "#/definitions/Application" + } + }, + "401": { + "description": "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." + }, + "404": { + "description": "This status code indicates that an application with the given search parameters could not be found in API Gateway." + } + }, + "security": [ + { + "Basic": [] + } + ] + } + }, + "/strategies": { + "get": { + "description": "The method retrieves a list of all strategies in API Gateway.", + "operationId": "getStrategies", + "produces": [ + "application/json" + ], + "parameters": [], + "responses": { + "200": { + "description": "This status code indicates that the list of strategies is successfully retrieved.", + "schema": { + "$ref": "#/definitions/OneOfStrategyModel" + }, + "examples": { + "application/json": "{\n \"strategies\": [\n {\n \"id\": \"e1f151e1-3210-4283-992b-b3f1d1cf6a92\",\n \"type\": \"OAUTH2\",\n \"authServerAlias\": \"local\",\n \"name\": \"test-oauth2-strategy\",\n \"description\": \"\",\n \"clientId\": \"e65b0fe2-d73d-4ea7-a92a-20c949e08235\",\n \"dcrConfig\": {\n \"allowedGrantTypes\": [\n \"authorization_code\",\n \"password\"\n ],\n \"applicationType\": \"WEB\",\n \"clientType\": \"PUBLIC\",\n \"clientName\": \"test-oauth2-strategy\",\n \"clientVersion\": \"1.0\",\n \"expirationInterval\": \"3600\",\n \"refreshCount\": \"0\",\n \"redirectUris\": [\n \"https://redirect.uri\"\n ]\n },\n \"clientRegistration\": {\n \"clientId\": \"e65b0fe2-d73d-4ea7-a92a-20c949e08235\",\n \"name\": \"test-oauth2-strategy\",\n \"version\": \"1.0\",\n \"type\": \"public\",\n \"tokenLifetime\": 3600,\n \"tokenRefreshLimit\": 0,\n \"clientSecret\": \"f3d2edb1-0bf4-47a8-9e34-775c1a943e70\",\n \"enabled\": true,\n \"redirectUris\": [\n \"https://redirect.uri\"\n ],\n \"clScopes\": [],\n \"authCodeAllowed\": true,\n \"implicitAllowed\": false,\n \"clientCredentialsAllowed\": false,\n \"resourceOwnerAllowed\": true\n }\n }\n ]\n}" + } + }, + "401": { + "description": "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." + } + }, + "security": [ + { + "Basic": [] + } + ] + }, + "post": { + "description": "The method creates a strategy in API Gateway. The API request body must contain the payload for the strategy", + "operationId": "createStrategy", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "parameters": [ + { + "in": "body", + "name": "body", + "description": "This parameter describes the request payload of a strategy that is to be created in API Gateway.", + "required": true, + "schema": { + "$ref": "#/definitions/OneOfStrategyModel" + }, + "x-examples": { + "application/json": "{\n\"name\": \"Test\",\n\"description\": \"\",\n\"authServerAlias\": \"local\",\n\"type\": \"OAUTH2\",\n\"dcrConfig\": {\n\"allowedGrantTypes\": [\"authorization_code\",\n\"password\",\n\"implicit\"],\n\"scopes\": [],\n\"redirectUris\": [\"http://vm:5555/redirect\"],\n\"authServer\": \"local\",\n\"applicationType\": \"WEB\",\n\"clientType\": \"PUBLIC\",\n\"expirationInterval\": 3600,\n\"refreshCount\": \"0\"\n}\n} " + } + } + ], + "responses": { + "200": { + "description": "The method creates a strategy in API Gateway. The API request body must contain the payload for the strategy", + "schema": { + "$ref": "#/definitions/OneOfStrategyModel" + }, + "examples": { + "application/json": "{\n \"strategy\": {\n \"id\": \"370f88ca-205e-45df-8e16-998088f32dc2\",\n \"type\": \"OAUTH2\",\n \"authServerAlias\": \"local\",\n \"name\": \"Test\",\n \"description\": \"\",\n \"clientId\": \"2b54de1c-a8fa-4965-a832-cacf6b656012\",\n \"dcrConfig\": {\n \"allowedGrantTypes\": [\n \"authorization_code\",\n \"password\",\n \"implicit\"\n ],\n \"applicationType\": \"WEB\",\n \"clientType\": \"PUBLIC\",\n \"clientName\": \"Test\",\n \"clientVersion\": \"1.0\",\n \"expirationInterval\": \"3600\",\n \"refreshCount\": \"0\",\n \"redirectUris\": [\n \"http://vm:5555/redirect\"\n ]\n },\n \"clientRegistration\": {\n \"clientId\": \"2b54de1c-a8fa-4965-a832-cacf6b656012\",\n \"name\": \"Test\",\n \"version\": \"1.0\",\n \"type\": \"public\",\n \"tokenLifetime\": 3600,\n \"tokenRefreshLimit\": 0,\n \"clientSecret\": \"6a3d98c3-e5b0-47fc-9acf-b454401cd87d\",\n \"enabled\": true,\n \"redirectUris\": [\n \"http://vm:5555/redirect\"\n ],\n \"clScopes\": [],\n \"authCodeAllowed\": true,\n \"implicitAllowed\": true,\n \"clientCredentialsAllowed\": false,\n \"resourceOwnerAllowed\": true\n }\n }\n}" + } + }, + "400": { + "description": "This status code indicates that a strategy with the given ID already exists in API Gateway" + }, + "401": { + "description": "This status code indicates that either the user didn't provide right credentials or the user doesn't have required privileges to access this API." + } + }, + "security": [ + { + "Basic": [] + } + ] + }, + "delete": { + "description": "The method deletes the specified strategy in API Gateway.", + "operationId": "deleteStrategy", + "produces": [ + "application/json" + ], + "parameters": [ + { + "name": "ids", + "in": "query", + "description": "This parameter specifies the ID of a strategy that is to be deleted in API Gateway.", + "required": false, + "type": "string" + } + ], + "responses": { + "204": { + "description": "This status code indicates that the specified strategy has been successfully deleted from API Gateway." + }, + "401": { + "description": "This status code indicates that either the user didn't provide right credentials or the user doesn't have required privileges to access this API." + }, + "404": { + "description": "This status code indicates that a strategy with the given ID could not be found in API Gateway." + } + }, + "security": [ + { + "Basic": [] + } + ] + } + }, + "/strategies/{strategyId}": { + "get": { + "description": "The method retrieves the details of a specified strategy in API Gateway", + "operationId": "getStrategy", + "produces": [ + "application/json" + ], + "parameters": [ + { + "name": "strategyId", + "in": "path", + "description": "This parameter specifies the ID of a strategy whose details are to be retrieved in API Gateway.", + "required": true, + "type": "string" + } + ], + "responses": { + "200": { + "description": "This status code indicates that the details of the specified strategy are retrieved successfully.", + "schema": { + "$ref": "#/definitions/OneOfStrategyModel" + } + }, + "401": { + "description": "This status code indicates that either the user didn't provide right credentials or the user doesn't have required privileges to access this API." + }, + "404": { + "description": "This status code indicates that a strategy with the given ID could not be found in API Gateway." + } + }, + "security": [ + { + "Basic": [] + } + ] + }, + "put": { + "description": "The method updates the property details of the specified strategy in API Gateway.", + "operationId": "updateStrategy", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "parameters": [ + { + "in": "body", + "name": "body", + "description": "This parameter describes the request payload of a strategy that is to be updated in API Gateway.", + "required": true, + "schema": { + "$ref": "#/definitions/OneOfStrategyModel" + } + }, + { + "name": "strategyId", + "in": "path", + "description": "This parameter specifies the ID of a strategy that is to be updated in API Gateway.", + "required": true, + "type": "string" + } + ], + "responses": { + "200": { + "description": "This status code indicates that the specified strategy has been successfully updated in API Gateway.", + "schema": { + "$ref": "#/definitions/OneOfStrategyModel" + } + }, + "400": { + "description": "This status code indicates that the specified strategy could not be updated" + }, + "401": { + "description": "This status code indicates that either the user didn't provide right credentials or the user doesn't have required privileges to access this API." + } + }, + "security": [ + { + "Basic": [] + } + ] + } + } + }, + "securityDefinitions": { + "Basic": { + "description": "API Gateway Administrator and API Gateway provider", + "type": "basic" + } + }, + "definitions": { + "APIAccessKey": { + "type": "object", + "properties": { + "apiAccessKey": { + "type": "string", + "description": "API access key" + }, + "expirationInterval": { + "type": "string", + "description": "expiration interval of the api key" + }, + "expirationDate": { + "type": "string", + "description": "expiration date of the api key" + } + } + }, + "Application": { + "type": "object", + "properties": { + "applicationID": { + "type": "string", + "description": "unique identifier of an application" + }, + "name": { + "type": "string", + "description": "name of the application" + }, + "description": { + "type": "string", + "description": "description of the application" + }, + "owner": { + "type": "string", + "description": "owner of the application" + }, + "identifiers": { + "type": "array", + "description": "list of all application identifiers", + "items": { + "$ref": "#/definitions/ApplicationIdentifier" + } + }, + "contactEmails": { + "type": "array", + "description": "list of email contacts", + "items": { + "type": "string" + } + }, + "iconbyteArray": { + "type": "string", + "description": "application icon byte array" + }, + "accessTokens": { + "description": "access tokens associated with the application", + "$ref": "#/definitions/ApplicationToken" + }, + "creationDate": { + "type": "string", + "description": "application creation time" + }, + "lastModified": { + "type": "string", + "description": "last modified time of the application" + }, + "lastUpdated": { + "type": "integer", + "format": "int64", + "description": "last modified time of the application in milliseconds" + }, + "siteURLs": { + "type": "array", + "description": "list of all site URLs", + "items": { + "type": "string" + } + }, + "jsOrigins": { + "type": "array", + "description": "list of all javascript origins", + "items": { + "type": "string" + } + }, + "version": { + "type": "string" + }, + "isSuspended": { + "type": "boolean", + "description": "holds the suspended state of an application" + }, + "authStrategyIds": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "subscription": { + "type": "boolean" + } + } + }, + "ApplicationIdentifier": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "unique identifier of the application identifier" + }, + "key": { + "type": "string", + "description": "identifier type, one of [apiKey, httpBasicAuth, token,kerberosToken,oAuth2Token,openIdClaims,jwtClaims,wssecX509Token,wssecUsernameToken, httpsCertificate,payloadElement,hostNameAddress, ipAddressRange, XPathExpression,partnerId]" + }, + "name": { + "type": "string", + "description": "name of the identifier" + }, + "value": { + "type": "array", + "description": "list of identifier values", + "items": { + "type": "string" + } + } + } + }, + "ApplicationToken": { + "type": "object", + "properties": { + "apiAccessKey": { + "description": "the API KEY access credentials", + "$ref": "#/definitions/APIAccessKey" + }, + "oauth2Token": { + "$ref": "#/definitions/OAuth2Token" + } + } + }, + "OAuth2Token": { + "type": "object", + "properties": { + "type": { + "type": "string", + "description": "type of the oauth2 client" + }, + "clientId": { + "type": "string", + "description": "unique identifier of the oauth2 client" + }, + "clientSecret": { + "type": "string", + "description": "the client secret" + }, + "clientName": { + "type": "string", + "description": "the name of the client" + }, + "scopes": { + "type": "array", + "description": "the scopes associated with the client", + "items": { + "type": "string" + } + }, + "expirationInterval": { + "type": "string", + "description": "the expiration interval" + }, + "refreshCount": { + "type": "string", + "description": "number of times an access token can be refreshed" + }, + "redirectUris": { + "type": "array", + "description": "list of redirect uris", + "items": { + "type": "string" + } + } + } + }, + "ClientRegistration": { + "type": "object", + "properties": { + "clientId": { + "type": "string" + }, + "name": { + "type": "string" + }, + "version": { + "type": "string" + }, + "type": { + "type": "string" + }, + "tokenLifetime": { + "type": "integer", + "format": "int32" + }, + "tokenRefreshLimit": { + "type": "integer", + "format": "int32" + }, + "clientSecret": { + "type": "string" + }, + "enabled": { + "type": "boolean" + }, + "notes": { + "type": "string" + }, + "redirectUris": { + "type": "array", + "items": { + "type": "string" + } + }, + "clScopes": { + "type": "array", + "items": { + "type": "string" + } + }, + "authCodeAllowed": { + "type": "boolean" + }, + "implicitAllowed": { + "type": "boolean" + }, + "clientCredentialsAllowed": { + "type": "boolean" + }, + "resourceOwnerAllowed": { + "type": "boolean" + }, + "approvalpgTitle": { + "type": "string" + }, + "approvalpgHeading": { + "type": "string" + }, + "approvalpgLogoFilename": { + "type": "string" + }, + "approvalpgFooter": { + "type": "string" + }, + "approvalpgFilename": { + "type": "string" + } + } + }, + "DynamicClientRegistrationConfig": { + "type": "object", + "properties": { + "allowedGrantTypes": { + "type": "array", + "description": "grant types to be allowed for this client", + "items": { + "type": "string", + "enum": [ + "authorization_code", + "password", + "client_credentials", + "refresh_token", + "implicit" + ] + } + }, + "applicationType": { + "type": "string", + "description": "type of the application", + "enum": [ + "WEB", + "NATIVE", + "USER_AGENT_BASED" + ] + }, + "clientType": { + "type": "string", + "description": "specifies whether the client is either public or confidential client", + "enum": [ + "PUBLIC", + "CONFIDENTIAL" + ] + }, + "clientId": { + "type": "string", + "description": "The client id" + }, + "clientSecret": { + "type": "string", + "description": "The client secret" + }, + "clientName": { + "type": "string", + "description": "The client name" + }, + "clientVersion": { + "type": "string", + "description": "The client version" + }, + "expirationInterval": { + "type": "string", + "description": "Token expiry time" + }, + "refreshCount": { + "type": "string", + "description": "The number of times token can be refreshed" + }, + "redirectUris": { + "type": "array", + "description": "The redirect uris", + "items": { + "type": "string" + } + } + } + }, + "JWTHSAuthStrategy": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "A unique ID for the strategy", + "readOnly": true + }, + "type": { + "type": "string", + "description": "The type of the strategy", + "enum": [ + "JWT_RSA", + "JWT_HSA", + "OPENID_CONNECT_RSA", + "OPENID_CONNECT_HSA", + "OAUTH2", + "OAUTH2_LOCAL_RSA", + "OAUTH2_LOCAL_HSA", + "COMPOSITE" + ] + }, + "authServerAlias": { + "type": "string", + "description": "The name of the authorization server alias" + }, + "name": { + "type": "string", + "description": "The name of the strategy" + }, + "description": { + "type": "string" + }, + "audience": { + "type": "string" + }, + "secret": { + "type": "string" + } + } + }, + "JWTRSAuthStrategy": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "A unique ID for the strategy", + "readOnly": true + }, + "type": { + "type": "string", + "description": "The type of the strategy", + "enum": [ + "JWT_RSA", + "JWT_HSA", + "OPENID_CONNECT_RSA", + "OPENID_CONNECT_HSA", + "OAUTH2", + "OAUTH2_LOCAL_RSA", + "OAUTH2_LOCAL_HSA", + "COMPOSITE" + ] + }, + "authServerAlias": { + "type": "string", + "description": "The name of the authorization server alias" + }, + "name": { + "type": "string", + "description": "The name of the strategy" + }, + "description": { + "type": "string" + }, + "audience": { + "type": "string" + } + } + }, + "OAuth2LocalHSIntrospectionStrategy": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "A unique ID for the strategy", + "readOnly": true + }, + "type": { + "type": "string", + "description": "The type of the strategy", + "enum": [ + "JWT_RSA", + "JWT_HSA", + "OPENID_CONNECT_RSA", + "OPENID_CONNECT_HSA", + "OAUTH2", + "OAUTH2_LOCAL_RSA", + "OAUTH2_LOCAL_HSA", + "COMPOSITE" + ] + }, + "authServerAlias": { + "type": "string", + "description": "The name of the authorization server alias" + }, + "name": { + "type": "string", + "description": "The name of the strategy" + }, + "description": { + "type": "string" + }, + "clientId": { + "type": "string" + }, + "dcrConfig": { + "$ref": "#/definitions/DynamicClientRegistrationConfig" + }, + "clientRegistration": { + "$ref": "#/definitions/ClientRegistration" + }, + "secret": { + "type": "string" + } + } + }, + "OAuth2LocalRSIntrospectionStrategy": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "A unique ID for the strategy", + "readOnly": true + }, + "type": { + "type": "string", + "description": "The type of the strategy", + "enum": [ + "JWT_RSA", + "JWT_HSA", + "OPENID_CONNECT_RSA", + "OPENID_CONNECT_HSA", + "OAUTH2", + "OAUTH2_LOCAL_RSA", + "OAUTH2_LOCAL_HSA", + "COMPOSITE" + ] + }, + "authServerAlias": { + "type": "string", + "description": "The name of the authorization server alias" + }, + "name": { + "type": "string", + "description": "The name of the strategy" + }, + "description": { + "type": "string" + }, + "clientId": { + "type": "string" + }, + "dcrConfig": { + "$ref": "#/definitions/DynamicClientRegistrationConfig" + }, + "clientRegistration": { + "$ref": "#/definitions/ClientRegistration" + } + } + }, + "OAuth2RemoteIntrospectionAuthStrategy": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "A unique ID for the strategy", + "readOnly": true + }, + "type": { + "type": "string", + "description": "The type of the strategy", + "enum": [ + "JWT_RSA", + "JWT_HSA", + "OPENID_CONNECT_RSA", + "OPENID_CONNECT_HSA", + "OAUTH2", + "OAUTH2_LOCAL_RSA", + "OAUTH2_LOCAL_HSA", + "COMPOSITE" + ] + }, + "authServerAlias": { + "type": "string", + "description": "The name of the authorization server alias" + }, + "name": { + "type": "string", + "description": "The name of the strategy" + }, + "description": { + "type": "string" + }, + "clientId": { + "type": "string" + }, + "dcrConfig": { + "$ref": "#/definitions/DynamicClientRegistrationConfig" + }, + "clientRegistration": { + "$ref": "#/definitions/ClientRegistration" + } + } + }, + "OneOfStrategyModel": { + "type": "object", + "properties": { + "JWT_HSA": { + "$ref": "#/definitions/JWTHSAuthStrategy" + }, + "JWT_RSA": { + "$ref": "#/definitions/JWTRSAuthStrategy" + }, + "OPENID_CONNECT_HSA": { + "$ref": "#/definitions/OAuth2LocalHSIntrospectionStrategy" + }, + "OPENID_CONNECT_RSA": { + "$ref": "#/definitions/OAuth2LocalRSIntrospectionStrategy" + }, + "OAUTH2": { + "$ref": "#/definitions/OAuth2RemoteIntrospectionAuthStrategy" + }, + "OAUTH2_LOCAL_RSA": { + "$ref": "#/definitions/OpenIDConnectRSAuthStrategy" + }, + "OAUTH2_LOCAL_HSA": { + "$ref": "#/definitions/OpenIDConnectHSAuthStrategy" + } + } + }, + "OpenIDConnectHSAuthStrategy": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "A unique ID for the strategy", + "readOnly": true + }, + "type": { + "type": "string", + "description": "The type of the strategy", + "enum": [ + "JWT_RSA", + "JWT_HSA", + "OPENID_CONNECT_RSA", + "OPENID_CONNECT_HSA", + "OAUTH2", + "OAUTH2_LOCAL_RSA", + "OAUTH2_LOCAL_HSA", + "COMPOSITE" + ] + }, + "authServerAlias": { + "type": "string", + "description": "The name of the authorization server alias" + }, + "name": { + "type": "string", + "description": "The name of the strategy" + }, + "description": { + "type": "string" + }, + "clientId": { + "type": "string" + }, + "dcrConfig": { + "$ref": "#/definitions/DynamicClientRegistrationConfig" + }, + "clientRegistration": { + "$ref": "#/definitions/ClientRegistration" + }, + "clientSecret": { + "type": "string" + } + } + }, + "OpenIDConnectRSAuthStrategy": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "A unique ID for the strategy", + "readOnly": true + }, + "type": { + "type": "string", + "description": "The type of the strategy", + "enum": [ + "JWT_RSA", + "JWT_HSA", + "OPENID_CONNECT_RSA", + "OPENID_CONNECT_HSA", + "OAUTH2", + "OAUTH2_LOCAL_RSA", + "OAUTH2_LOCAL_HSA", + "COMPOSITE" + ] + }, + "authServerAlias": { + "type": "string", + "description": "The name of the authorization server alias" + }, + "name": { + "type": "string", + "description": "The name of the strategy" + }, + "description": { + "type": "string" + }, + "clientId": { + "type": "string" + }, + "dcrConfig": { + "$ref": "#/definitions/DynamicClientRegistrationConfig" + }, + "clientRegistration": { + "$ref": "#/definitions/ClientRegistration" + } + } + } + } +} \ No newline at end of file diff --git a/apigatewayservices/APIGatewayArchive.json b/apigatewayservices/APIGatewayArchive.json new file mode 100644 index 0000000..74aa436 --- /dev/null +++ b/apigatewayservices/APIGatewayArchive.json @@ -0,0 +1,289 @@ +{ + "swagger" : "2.0", + "info" : { + "description" : "The API Gateway archive service exposes the interface to the API Gateway export archives. An API Gateway export archive is a ZIP file that contains APIs, policies, global policies and all the other assets in API Gateway. You can use this service to export/import all type of assets into API Gateway. \n\n In general, for any asset being exported, all the dependent assets are automatically exported. For example, when exporting APIs, the export archive contains the APIs, the API level policies, the policy actions associated with the API level policies, and the aliases referenced by the policy actions. Additionally, the archive may also contain the applications registered to the exported APIs.\n When exporting global policy the archive contains the global policies, the policy actions associated with the global policies, and the aliases referenced to the policy actions.\n\nEach artifact in an archive is associated with a universally unique identifier (UUID) across all API Gateway installations. When importing an archive, the UUID helps in determining whether the corresponding artifact is already available in API Gateway. In such a situation, you can specify whether to overwrite an already existing artifact during the import process. \n\n Any user with the 'Export assets' functional privilege can export archives in API Gateway and any user with the 'Import assets' privilege can import the archives. By default, the users who are part of API-Gateway-Administrators group will have these privileges.", + "version" : "10.3", + "title" : "API Gateway Archive Service" + }, + "host" : "localhost:5555", + "basePath" : "/rest/apigateway", + "schemes" : [ "http" ], + "consumes" : [ "application/json", "application/zip" ], + "produces" : [ "application/json", "application/zip" ], + "paths" : { + "/archive" : { + "get" : { + "description" : "The GET method exports an archive. The result of the GET request is an archive in a ZIP format. This Method supports exporting API, Application, Alias and Global Policy ONLY. \n\n Use the POST /archive method to export all the assets in API Gateway.", + "operationId" : "exportApiGatewayAssets", + "consumes" : [ "application/json" ], + "produces" : [ "multipart/form-data" ], + "parameters" : [ { + "name" : "include-applications", + "in" : "query", + "description" : "This parameter indicates whether you want to export the applications associated with the\nAPIs", + "required" : false, + "type" : "string", + "x-example" : "include-applications=true" + }, { + "name" : "policies", + "in" : "query", + "description" : "This parameter identifies the policies to be exported. \nThe wildcard \"*\" selects all policies.\nFor example, a single policy can be exported using the following request:\nGET /rest/apigateway/archive?policies=07b8d7b7-20b7-422e-8464-4b19d405c41a\nWhereas, global policies can be exported using the following request:\nGET /rest/apigateway/archive?policies=*\n", + "required" : false, + "type" : "array", + "items" : { + "type" : "string" + }, + "collectionFormat" : "multi", + "x-example" : "policies=07b8d7b7-20b7-422e-8464-4b19d405c41a" + }, { + "name" : "apis", + "in" : "query", + "description" : "This parameter identifies the APIs to be exported. The wildcard \"*\" selects all the APIs. \nFor example a single API can be exported using the following request:\nGET /rest/apigateway/archive?apis=e2996867-af49-4ac6-98e7-cba48837c13e\n\nWhereas, all the APIs can be exported using the following request:\nGET /rest/apigateway/archive?apis=*", + "required" : false, + "type" : "array", + "items" : { + "type" : "string" + }, + "collectionFormat" : "multi", + "x-example" : "apis=e2996867-af49-4ac6-98e7-cba48837c13e" + }, { + "name" : "aliases", + "in" : "query", + "description" : "This parameter identifies the aliases to be exported. \nThe wildcard \"*\" selects all aliases.\n For example, a single alias can be exported using the following requrest:\n GET /rest/apigateway/archive?aliases=d1885756-9e38-39b5-87d6-ba937726b02d\nWhereas, all the APIs can be exported using the following request:\n GET /rest/apigateway/archive?alias=*", + "required" : false, + "type" : "array", + "items" : { + "type" : "string" + }, + "collectionFormat" : "multi", + "x-example" : "aliases=d1885756-9e38-39b5-87d6-ba937726b02d" + }, { + "name" : "applications", + "in" : "query", + "description" : "This parameter identifies the applications to be exported. \nThe wildcard \"*\" selects all applications.\n For example, a single application can be exported using the following requrest:\n GET /rest/apigateway/archive?applications=d1885756-9e38-39b5-87d6-ba937726b02d\nWhereas, all the APIs can be exported using the following request:\n GET /rest/apigateway/archive?alias=*", + "required" : false, + "type" : "array", + "items" : { + "type" : "string" + }, + "collectionFormat" : "multi", + "x-example" : "applications=d1885756-9e38-39b5-87d6-ba937726b02d" + } ], + "responses" : { + "200" : { + "description" : "This response indicates that the archive is created successfully. The response body is the zipped archive." + }, + "401" : { + "description" : "This response indicates that invalid credentials have been provided for the request." + }, + "400" : { + "description" : "This response indicates that a request is incorrect. This can be due to the API or Policy identifiers that cannot be resolved." + }, + "500" : { + "description" : "This response indicates that the server has encountered an error while exporting API Gateway Asset" + } + }, + "security" : [ { + "Basic" : [ ] + } ] + }, + "post" : { + "description" : "This method can be used for importing the API Gateway archive as well as exporting the assets as an archive. If the request is made with x-HTTP-Method-Override HTTP header with value as GET, then this method will export asset. It will require the body param using which you can specify the filtering criteria and include options for the API Gateway assets that need to be exported. \n\n If the HTTP header is not specified, then this method can be used to import the API Gateway archive. You can control the import settings with overwrite and preserveAssetState query parameters.\n\n Here are some sample payloads for different export scenarios. \n\n 1. Export all API Gateway assets. \n Payload: {} \n\n 2. Export all APIs \n Payload: { \"types\": [\"api\"] } \n\n 3. Export all APIs with registered Application \n Payload: {\r\n\"types\" : [\"api\"],\r\n\"includeOptions\" :{\r\n\"includeApplications\" :false\r\n}\r\n} \n\n 4. Export only APIs with name contains \"API Gateway\" \n Payload: {\r\n\"types\" : [\"api\"],\r\n\"scope\" : [\r\n{\"attributeName\" : \"apiName\",\r\n\"keyword\" : \".*API Gateway.*\"\r\n}],\r\n\"includeOptions\" :{\r\n\"includeApplications\" :false\r\n}\r\n} \n\n 5. Export API with specific ids only \n Payload: {\r\n\"types\" : [\"api\"],\r\n\"scope\" : [\r\n{\"attributeName\" : \"id\",\r\n\"keyword\" : \"1c36033a-ecb6-41ce-ad66-bada5cebe85e|8d505388-5524-4df5-bd3c-62c4bb5f41d0\"\r\n}],\r\n\"includeOptions\" :{\r\n\"includeApplications\" :true\r\n}\r\n} \n\n 6. Export API with name starts with API Gateway and description contains search \n Payload: {\r\n\"types\" : [\"api\"],\r\n\"scope\" : [\r\n{\"attributeName\" : \"apiName\",\r\n\"keyword\" : \"API Gateway.*\"\r\n},\r\n{\r\n\"attributeName\" : \"apiDescription\",\r\n\"keyword\" : \".*search.*\"\r\n}],\r\n\"condition\" : \"and\",\r\n\"includeOptions\" :{\r\n\"includeApplications\" :false\r\n}\r\n} \n\n 7. Export all Policy \n Payload: {\r\n\"types\" : [\"policy\"]\r\n} \n\n 8. Global Policy Alone \n Payload: {\r\n\"types\" : [\"policy\"],\r\n\"scope\":[\r\n{\r\n\"attributeName\" : \"policyScope\",\r\n\"keyword\" : \"GLOBAL\"\r\n}]\r\n} \n\n 9. Export Threat Protection Rule \n Payload: {\r\n\"types\" : [\"policy\"],\r\n\"scope\":[\r\n{\r\n\"attributeName\" : \"policyEnforcements.stageKey\",\r\n\"keyword\" : \"threatProtection\"\r\n}]\r\n} \n\n 10. Export All Policy Actions \n Payload: {\r\n\"types\" : [\"policy_action\"]\r\n} \n\n 11. Export All Threat Protection rules and policy \n Payload: {\r\n\"types\" : [\"policy_action\", \"policy\"],\r\n\"scope\":[\r\n{\r\n\"attributeName\" : \"policyEnforcements.stageKey\",\r\n\"keyword\" : \"threatProtection\"\r\n}, {\r\n\"attributeName\" : \"id\",\r\n\"keyword\" : \"globalipdos|ipdos\"\r\n}],\r\n\"condition\" : \"or\"\r\n} \n\n 12. Export all aliases \n Payload: {\r\n\"types\" : [\"alias\"]\r\n} \n\n 13. Export all applications \n Payload: {\r\n\"types\" : [\"application\"]\r\n} \n\n 14. Export all application with out including associated APIs \n Payload: {\r\n\"types\" : [\"application\"],\r\n\"includeOptions\" : {\r\n\"includeApis\": false\r\n}\r\n} \n\n 15. Export All Assertions \n Payload: {\r\n\"types\" : [\"assertion\"]\r\n} \n\n 16. Export all API Plans \n Payload: {\r\n\"types\" : [\"plan\"]\r\n} \n\n 17. Export all API Packages \n Payload: {\r\n\"types\" : [\"package\"]\r\n} \n\n 18. Export all packages along with subscription but with out the registered Applications for the associated APIs. \n Payload: {\r\n\"types\" : [\"package\"],\r\n\"includeOptions\":{\r\n\"includeApis\" : false,\r\n\"includeApplications\" : false,\r\n\"includeSubscriptions\" : true\r\n}\r\n} \n\n 19. Export all subscriptions \n Payload: {\r\n\"types\" : [\"subscription\"]\r\n} \n\n 20. Export all Administrator Settings \n Payload: {\r\n\"types\" : [\"administrator_setting\"]\r\n}", + "operationId" : "importExportAPIGatewayAssets", + "consumes" : [ "multipart/form-data", "application/json" ], + "produces" : [ "application/json", "multipart/form-data" ], + "parameters" : [ { + "name" : "overwrite", + "in" : "query", + "description" : "This parameter specifies the import option to define the artifact types that can be overwritten during import. The parameter enables you to specify overwriting of APIs, policies, policy actions, aliases, and applications. \nThe wildcard \"*\" enables you to specify all types.\nFor example, the following request enables you to overwrite APIs during import:\nPOST /rest/apigateway/archive?overwrite=apis\nWhereas, overwriting all asset types during import can be specified as follows:\nPOST /rest/apigateway/archive?overwrite=*", + "required" : false, + "type" : "string", + "enum" : [ "apis", "policies", "policyactions", "applications", "aliases", "plans", "packages", "subscriptions", "administrator_settings", "portal_gateway", "assertions", "*" ] + }, { + "name" : "preserveAssetState", + "in" : "query", + "description" : "This parameter is used to specify whether the asset state needs to be preserved after importing the assets in to API Gateway. By default this value will be true. If false specified the assets will be imported and wont preserve asset state after importing asset.", + "required" : false, + "type" : "string", + "enum" : [ "true", "false" ] + }, { + "name" : "x-HTTP-Method-Override", + "in" : "header", + "description" : "This parameter is used to specify that this REST call is an export operation. The value for this field is GET. If this is specified then you need to provide the filtering criteria in body to specify the asset. If empty payload specified then all assets will be exported. ", + "required" : false, + "type" : "string", + "enum" : [ "GET" ] + }, { + "in" : "body", + "name" : "body", + "description" : "", + "required" : false, + "schema" : { + "$ref" : "#/definitions/ExportContext" + } + }, { + "name" : "zipFile", + "in" : "formData", + "description" : "Zip file that contains the API Gateway asset needs to be imported", + "required" : false, + "type" : "file" + } ], + "responses" : { + "201" : { + "description" : "This response indicates that the archive import was successful. The response body holds a detailed import log in application/json format.", + "schema" : { + "type" : "array", + "items" : { + "$ref" : "#/definitions/ArchiveResult" + } + }, + "examples" : { + "application/json" : "{\n \"ArchiveResult\": [\n {\n \"PolicyAction\": {\n \"name\": \"Straight Through Routing\",\n \"id\": \"bc7c75ba-ad5e-4dd7-adb7-a62bcd60593d\",\n \"status\": \"Failed\",\n \"explanation\": \"Asset already exists.\",\n \"overwritten\": false\n }\n },\n {\n \"PolicyAction\": {\n \"name\": \"Require HTTP / HTTPS\",\n \"id\": \"c3852da1-4e6e-440b-8fe9-7e5c1523d7f1\",\n \"status\": \"Failed\",\n \"explanation\": \"Asset already exists.\",\n \"overwritten\": false\n }\n },\n {\n \"API\": {\n \"name\": \"BayernRest\",\n \"id\": \"70062a02-e7f9-4ead-a66e-313752a9b111\",\n \"status\": \"Failed\",\n \"explanation\": \"Asset already exists.\",\n \"overwritten\": false\n }\n },\n {\n \"Policy\": {\n \"name\": \"Default Policy for API BayernRest\",\n \"id\": \"9a0d17c1-8bf1-4282-a53e-2b2ca634ba39\",\n \"status\": \"Failed\",\n \"explanation\": \"Asset already exists.\",\n \"overwritten\": false\n }\n }\n ]\n}" + } + }, + "200" : { + "description" : "This response indicates that the archive is created successfully. The response body is the zipped archive." + }, + "401" : { + "description" : "This response indicates that invalid credentials have been provided for the request." + }, + "500" : { + "description" : "This response indicates that the server has encountered an error while exporting or importing API Gateway Asset" + }, + "400" : { + "description" : "This response indicates that the request is invalid or faulty, for example, the request body may contain an invalid archive." + } + }, + "security" : [ { + "Basic" : [ ] + } ] + } + } + }, + "securityDefinitions" : { + "Basic" : { + "description" : "API Gateway Administrator and API Gateway provider", + "type" : "basic" + } + }, + "definitions" : { + "ExportContext" : { + "type" : "object", + "required" : [ "types" ], + "properties" : { + "types" : { + "type" : "string", + "description" : "List of allowed types that can be searched across API Gateway.", + "enum" : [ "USER", "GROUP", "USERS", "GROUPS", "ACCESSPROFILES", "LDAPGROUPS", "CDSGROUPS", "ASSERTION", "APPLICATION", "API", "ALIAS", "POLICY", "POLICY_ACTION", "PLAN", "PACKAGE", "ADMINISTRATOR_SETTING", "PORTAL_GATEWAY", "OAUTH2_SCOPE_DATA", "SUBSCRIPTION", "API_DOCUMENT" ] + }, + "scope" : { + "$ref" : "#/definitions/SearchField" + }, + "condition" : { + "type" : "string", + "description" : "Condition between scope specified. The value can be either 'and' or 'or'", + "enum" : [ "and", "or" ] + }, + "responseFields" : { + "type" : "array", + "description" : "List of fields to be fetched for the specified types.", + "items" : { + "type" : "string" + } + }, + "from" : { + "type" : "integer", + "format" : "int32", + "description" : "The starting index of the record to be fetched. Default value is 0 which fetches from the start. The index is applied to each type separately. For each type the first n records are skipped as specified in from field. If the value specified is less than zero then the default value is taken for fetching records" + }, + "size" : { + "type" : "integer", + "format" : "int32", + "description" : "Number of records to be fetched. Default value is -1, which fetches all the records. The size is applied to each type separately. Each type has the records less than or equal to the size specified. If the value specified is less than zero then the default value is taken for fetching records" + }, + "sortByField" : { + "type" : "string", + "description" : "Field name on which the sorting needs to be applied." + }, + "sortOrder" : { + "type" : "string", + "description" : "Sort order for the records", + "enum" : [ "ASC", "DESC" ] + }, + "includeOptions" : { + "$ref" : "#/definitions/IncludeOptions" + } + }, + "description" : "This defines the request structure to export the specific assets across API Gateway" + }, + "IncludeOptions" : { + "type" : "object", + "properties" : { + "includeAll" : { + "type" : "boolean", + "description" : "Include all dependent assets for all asset type specified" + }, + "includeApplications" : { + "type" : "boolean", + "description" : "Include application as dependent asset for asset type specified if applicable" + }, + "includeApis" : { + "type" : "boolean", + "description" : "Include API as dependent asset for asset type specified if applicable" + }, + "includeDocuments" : { + "type" : "boolean", + "description" : "Include documents as dependent asset for asset type specified if applicable" + }, + "includeSubscriptions" : { + "type" : "boolean", + "description" : "Include subscriptions for the asset type specified if applicable" + }, + "promotion" : { + "type" : "boolean" + } + }, + "description" : "It is used to specify the inclusion of dependent assets" + }, + "SearchField" : { + "type" : "object", + "properties" : { + "attributeName" : { + "type" : "string", + "description" : "Field name to be searched for the list of types specified" + }, + "keyword" : { + "type" : "string", + "description" : "Value of the corresponding field to be matched. User can use regular expression to specify the multiple values for single attributeName. For example to find \n 1. apiDescription contains \"weather\" or equals \"country\" , we can use {\"attributeName\" : \"apiDescription\", \"keyword\" : \".*weather.*|country\"}. \n 2. apiName starts with weather - {\"attributeName\" : \"apiName\", \"keyword\" : \"weather.*\"}. \n 3. api type is REST or SOAP - {\"attributeName\" : \"type\", \"keyword\" : \"REST|SOAP\"}." + }, + "orTokenKey" : { + "type" : "boolean" + }, + "rawFieldKey" : { + "type" : "string" + } + }, + "description" : "A scope is filtering criteria for the list of types specified in search.It is a key/value pair. key is the field name on which the search is being done and value contains the search string to be searched on the field specified.To get the field name for a type, user needs to access the corresponding API Gateway REST service to know about the fields available for a particular type. " + }, + "ArchiveResult" : { + "type" : "object", + "properties" : { + "name" : { + "type" : "string" + }, + "importedOK" : { + "type" : "boolean" + }, + "explanation" : { + "type" : "string" + }, + "overwritten" : { + "type" : "boolean" + }, + "dependencyFailed" : { + "type" : "boolean" + } + } + } + } +} \ No newline at end of file diff --git a/apigatewayservices/APIGatewayDocumentManagement.json b/apigatewayservices/APIGatewayDocumentManagement.json new file mode 100644 index 0000000..849b3dd --- /dev/null +++ b/apigatewayservices/APIGatewayDocumentManagement.json @@ -0,0 +1,285 @@ +{ + "swagger" : "2.0", + "info" : { + "description" : "API Gateway Document Management Service allows you to store/manage the Documents associated to API in the API Gateway. Any user with the 'Manage APIs' functional privilege can manage the documents in the API Gateway. By default, the users who are part of either API-Gateway-Providers or API-Gateway-Administrators groups will have this privilege.\n\nAny document can be stored and attached to any of these APIs types - REST APIs, SOAP APIs, WebSocket APIs and OData APIs. ", + "version" : "10.3", + "title" : "API Gateway Document Management Service" + }, + "host" : "localhost:5555", + "basePath" : "/rest/apigateway", + "schemes" : [ "http" ], + "consumes" : [ "application/json" ], + "produces" : [ "application/json" ], + "paths" : { + "/documents/{documentId}" : { + "get" : { + "description" : "Retrieves the requested document from API Gateway", + "operationId" : "getDocument", + "produces" : [ "application/json" ], + "parameters" : [ { + "name" : "documentId", + "in" : "path", + "description" : "The unique identifier of the document for retrieving from API Gateway.", + "required" : true, + "type" : "string", + "x-example" : "353bd366-47d4-4703-aecf-9cb40cdcc864" + } ], + "responses" : { + "200" : { + "description" : "This status code indicates that the given document has been retrieved successfully from API Gateway.", + "schema" : { + "$ref" : "#/definitions/Document" + }, + "examples" : { + "application/json" : "{\r\n\t\"documents\": [{\r\n\t\t\"id\": \"c98c7290-bc68-4da3-a39e-545c714e75bc\",\r\n\t\t\"fileName\": \"SamplePowerpoint.pptx\",\r\n\t\t\"displayName\": \"How to upload documents to the store?\",\r\n\t\t\"fileContent\": \"data:application/vnd.openxmlformats-officedocument.presentationml.presentation;base64,UEsDBBQABgAIAAAAIQD93q/s6gEAAFIPAAATAAgCW0NvbnRlbnRfVHlwZXNdLnhtbCCiBAIooAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADMl990JrRLqv6+ONgR6nB3mzU7T/S6zeFFiF7yGWlYgyJtgnR813PvL8QsEZ/QW5+BJw0oMXXv4aH5oxlxCPLnIolA8a5hyjt9KsZloQZYhki/OENKCucg0qojmgSOpU1V9qrRlQLtjiqvVkK62BtGvsTT/zw7D4Aydg3ku5PObCsWzs3TDNTxzwWIaKWuQcnvnrahleR9U26jd3PYPAAD//wMAUEsDBBQABgAIAAAAIQBL9T3svwAAADcBAAAgAAAAcHB0L3NsaWRlcy9fcmVscy9zbGlkZTIueG1sLnJlbHOEj8EKwjAQRO+C/xD2blI9iEhTLyIInkQ/YEm2bbBNQjaK/XtzrCB4nB3mzU59eI+DeFFiF7yGtaxAkDfBOt9puN9Oqx0IzugtDsGThokYDs1yUV9pwFxC3LvIolA8a+hzjnul2PQ0IssQyRenDWnEXGTqVETzwI7Upqq2Ks0Z0HwxxdlqSGe7BnGbYmn+zw5t6wwdg3mO5POPCsWDs3TBKTxzwWLqKGuQcn7nudjI8j6oplZfc5sPAAAA//8DAFBLAwQUAAYACAAAACEAS/U97L8AAAA3AQAAIAAAAHBwdC9zbGlkZXMvX3JlbHMvc2xpZGUzLnhtbC5yZWxzhI/BCsIwEETvgv8Q9m5SPYhIUy8iCJ5EP2BJtm2wTUI2iv17c6wgeJwd5s1OfXiPg3hRYhe8hrWsQJA3wTrfabjfTqsdCM7oLQ7Bk4aJGA7NclFfacBcQty7yKJQPGvoc457pdj0NCLLEMkXpw1pxFxk6lRE88CO1KaqtirNGdB8McXZakhnuwZxm2Jp/s8ObesMHYN5juTzjwrFg7N0wSk8c8Fi6ihrkHJ+57nYyPI+qKZWX3ObDwAAAP//AwBQSwMEFAAGAAgAAAAhAEv1Pey/AAAANwEAACAAAABwcHQvc2xpZGVzL19yZWxzL3NsaWRlNS54bWwucmVsc4SPwQrCMBBE74L/EPZuUj2ISFMvIgieRDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALyVz06EMBDG7ya+A+ldCuw/NVv2Ykz2YGJ0fYAKAzSWtmnrKm9vw67Ibjb10nAhmaH95pePmWG9+W55tAdtmBQEpXGCIhCFLJmoCXrbPd7coshYKkrKpQKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooo\"\r\n\t}]\r\n}" + } + }, + "400" : { + "description" : "This status code indicates invalid request or bad input." + }, + "401" : { + "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." + }, + "404" : { + "description" : "This status code indicates that the requested resource is not found." + }, + "405" : { + "description" : "This status code indicates that the requested HTTP method is not supported for the resource." + }, + "500" : { + "description" : "This status code indicates an error occurred while retrieving the given document from API Gateway." + } + }, + "security" : [ { + "Basic" : [ ] + } ] + }, + "put" : { + "operationId" : "updateDocumentContent", + "consumes" : [ "application/json" ], + "produces" : [ "application/json" ], + "parameters" : [ { + "name" : "documentId", + "in" : "path", + "description" : "The unique identifier of the document to update", + "required" : true, + "type" : "string", + "x-example" : "353bd366-47d4-4703-aecf-9cb40cdcc864" + }, { + "in" : "body", + "name" : "body", + "description" : "The request payload to update the document in API Gateway.", + "required" : true, + "schema" : { + "$ref" : "#/definitions/Document" + }, + "x-examples" : { + "application/json" : "{\r\n\t\"displayName\": \"APIGatewayPortsInfoDocumentUpdated\",\r\n\t\"fileName\": \"APIGatewayPorts.json\",\r\n\t\"fileContent\": \"data:;base64,ew0KICAic3dhZ2dlciIgOiAiMi4wIiwNCiAgImluZm8iIDogew0KICAgICJkZXNjcmlwdGlvbiIgOiAiVGhpcyBzd2FnZ2VyIGRvYyBjb250YWlucyBBUEkgRGVmaW5pdGlvbiBvZiB0aGUgcG9ydHMgQ1JVRCBvcGVyYXRpb25zLiIsDQogICAgInZlcnNpb24iIDogIjEwLjEiLA0KICAgICJ0aXRsZSIgOiAiUG9ydHMgY29uZmlndXJhdGlvbnMuIg0KICB9LA0KICAiaG9zdCIgOiAibG9jYWxob3N0OjU1NTUiLA0KICAiYmFzZVBhdGgiIDogIi9yZXN0L2FwaWdhdGV3YXkiLA0KICAic2NoZW1lcyIgOiBbICJodHRwIiBdLA0KICAiY29uc3VtZXMiIDogWyAicGxhaW4vdGV4dCIgXSwNCiAgInByb2R1Y2VzIiA6IFsgImFwcGxpY2F0aW9uL2pzb24iIF0sDQogICJwYXRocyIgOiB7DQogICAgIi9wb3J0cyIgOiB7DQogICAgICAicG9zdCIgOiB7DQogICAgICAgICJvcGVyYXRpb25JZCIgOiAiY3JlYXRlUG9ydCIsDQogICAgICAgICJjb25zdW1lcyIgOiBbICJhcHBsaWNhdGlvbi9qc29uIiBdLA0KICAgICAgICAicHJvZHVjZXMiIDogWyAiYXBwbGljYXRpb24vanNvbiIgXSwNCiAgICAgICAgInBhcmFtZXRlcnMiIDogWyB7DQogICAgICAgICAgImluIiA6ICJib2R5IiwNCiAgICAgICAgICAibmFtZSIgOiAiYm9keSIsDQogICAgICAgICAgImRlc2NyaXB0aW9uIiA6ICJwb3J0IHBheWxvYWQiLA0KICAgICAgICAgICJyZXF1aXJlZCIgOiB0cnVlLA0KICAgICAgICAgICJzY2hlbWEiIDogew0KICAgICAgICAgICAgIiRyZWYiIDogIiMvZGVmaW5pdGlvbnMvUG9ydCINCiAgICAgICAgICB9DQogICAgICAgIH0gXSwNCiAgICAgICAgInJlc3BvbnNlcyIgOiB7DQogICAgICAgICAgIjIwMSIgOiB7DQogICAgICAgICAgICAiZGVzY3JpcHRpb24iIDogIkNyZWF0ZWQiLA0KICAgICAgICAgICAgInNjaGVtYSIgOiB7DQogICAgICAgICAgICAgICIkcmVmIiA6ICIjL2RlZmluaXRpb25zL1BvcnQiDQogICAgICAgICAgICB9DQogICAgICAgICAgfSwNCiAgICAgICAgICAiNDAwIiA6IHsNCiAgICAgICAgICAgICJkZXNjcmlwdGlvbiIgOiAiQmFkIHJlcXVlc3QiDQogICAgICAgICAgfSwNCiAgICAgICAgICAiNDAxIiA6IHsNCiAgICAgICAgICAgICJkZXNjcmlwdGlvbiIgOiAiQWNjZXNzIERlbmllZCINCiAgICAgICAgICB9DQogICAgICAgIH0sDQogICAgICAgICJzZWN1cml0eSIgOiBbIHsNCiAgICAgICAgICAiQmFzaWMiIDogWyBdDQogICAgICAgIH0gXQ0KICAgICAgfSwNCiAgICAgICJwdXQiIDogew0KICAgICAgICAib3BlcmF0aW9uSWQiIDogInVwZGF0ZVBvcnQiLA0KICAgICAgICAiY29uc3VtZXMiIDogWyAiYXBwbGljYXRpb24vanNvbiIgXSwNCiAgICAgICAgInByb2R1Y2VzIiA6IFsgImFwcGxpY2F0aW9uL2pzb24iIF0sDQogICAgICAgICJwYXJhbWV0ZXJzIiA6IFsgew0KICAgICAgICAgICJpbiIgOiAiYm9keSIsDQogICAgICAgICAgIm5hbWUiIDogImJvZHkiLA0KICAgICAgICAgICJkZXNjcmlwdGlvbiIgOiAiIiwNCiAgICAgICAgICAicmVxdWlyZWQiIDogdHJ1ZSwNCiAgICAgICAgICAic2NoZW1hIiA6IHsNCiAgICAgICAgICAgICIkcmVmIiA6ICIjL2RlZmluaXRpb25zL1BvcnQiDQogICAgICAgICAgfQ0KICAgICAgICB9IF0sDQogICAgICAgICJyZXNwb25zZXMiIDogew0KICAgICAgICAgICIyMDAiIDogew0KICAgICAgICAgICAgImRlc2NyaXB0aW9uIiA6ICIiLA0KICAgICAgICAgICAgInNjaGVtYSIgOiB7DQogICAgICAgICAgICAgICIkcmVmIiA6ICIjL2RlZmluaXRpb25zL1BvcnQiDQogICAgICAgICAgICB9DQogICAgICAgICAgfSwNCiAgICAgICAgICAiNTAwIiA6IHsNCiAgICAgICAgICAgICJkZXNjcmlwdGlvbiIgOiAiIg0KICAgICAgICAgIH0sDQogICAgICAgICAgIjQwMSIgOiB7DQogICAgICAgICAgICAiZGVzY3JpcHRpb24iIDogIiINCiAgICAgICAgICB9LA0KICAgICAgICAgICI0MDAiIDogew0KICAgICAgICAgICAgImRlc2NyaXB0aW9uIiA6ICIiDQogICAgICAgICAgfQ0KICAgICAgICB9LA0KICAgICAgICAic2VjdXJpdHkiIDogWyB7DQogICAgICAgICAgIkJhc2ljIiA6IFsgXQ0KICAgICAgICB9IF0NCiAgICAgIH0sDQogICAgICAiZGVsZXRlIiA6IHsNCiAgICAgICAgIm9wZXJhdGlvbklkIiA6ICJkZWxldGVQb3J0IiwNCiAgICAgICAgImNvbnN1bWVzIiA6IFsgImFwcGxpY2F0aW9uL2pzb24iIF0sDQogICAgICAgICJwcm9kdWNlcyIgOiBbICJhcHBsaWNhdGlvbi9qc29uIiBdLA0KICAgICAgICAicGFyYW1ldGVycyIgOiBbIHsNCiAgICAgICAgICAibmFtZSIgOiAibGlzdGVuZXJLZXkiLA0KICAgICAgICAgICJpbiIgOiAicXVlcnkiLA0KICAgICAgICAgICJyZXF1aXJlZCIgOiB0cnVlLA0KICAgICAgICAgICJ0eXBlIiA6ICJzdHJpbmciLA0KICAgICAgICAgICJ4LWV4YW1wbGUiIDogIkhUVFBMaXN0ZW5lckA1NTU1Ig0KICAgICAgICB9LCB7DQogICAgICAgICAgIm5hbWUiIDogInBrZyIsDQogICAgICAgICAgImluIiA6ICJxdWVyeSIsDQogICAgICAgICAgInJlcXVpcmVkIiA6IHRydWUsDQogICAgICAgICAgInR5cGUiIDogInN0cmluZyIsDQogICAgICAgICAgIngtZXhhbXBsZSIgOiAiV21Sb290Ig0KICAgICAgICB9IF0sDQogICAgICAgICJyZXNwb25zZXMiIDogew0KICAgICAgICAgICI0MDEiIDogew0KICAgICAgICAgICAgImRlc2NyaXB0aW9uIiA6ICIiDQogICAgICAgICAgfSwNCiAgICAgICAgICAiMjA0IiA6IHsNCiAgICAgICAgICAgICJkZXNjcmlwdGlvbiIgOiAiIg0KICAgICAgICAgIH0sDQogICAgICAgICAgIjQwNCIgOiB7DQogICAgICAgICAgICAiZGVzY3JpcHRpb24iIDogIiINCiAgICAgICAgICB9DQogICAgICAgIH0sDQogICAgICAgICJzZWN1cml0eSIgOiBbIHsNCiAgICAgICAgICAiQmFzaWMiIDogWyBdDQogICAgICAgIH0gXQ0KICAgICAgfQ0KICAgIH0sDQogICAgIi9wb3J0cy9lbmFibGUiIDogew0KICAgICAgInB1dCIgOiB7DQogICAgICAgICJvcGVyYXRpb25JZCIgOiAiZW5hYmxlUG9ydCIsDQogICAgICAgICJjb25zdW1lcyIgOiBbICJhcHBsaWNhdGlvbi9qc29uIiBdLA0KICAgICAgICAicHJvZHVjZXMiIDogWyAiYXBwbGljYXRpb24vanNvbiIgXSwNCiAgICAgICAgInBhcmFtZXRlcnMiIDogWyB7DQogICAgICAgICAgImluIiA6ICJib2R5IiwNCiAgICAgICAgICAibmFtZSIgOiAiYm9keSIsDQogICAgICAgICAgImRlc2NyaXB0aW9uIiA6ICIiLA0KICAgICAgICAgICJyZXF1aXJlZCIgOiB0cnVlLA0KICAgICAgICAgICJzY2hlbWEiIDogew0KICAgICAgICAgICAgIiRyZWYiIDogIiMvZGVmaW5pdGlvbnMvUG9ydEVuYWJsZURpc2FibGUiDQogICAgICAgICAgfQ0KICAgICAgICB9IF0sDQogICAgICAgICJyZXNwb25zZXMiIDogew0KICAgICAgICAgICIyMDAiIDogew0KICAgICAgICAgICAgImRlc2NyaXB0aW9uIiA6ICIiLA0KICAgICAgICAgICAgInNjaGVtYSIgOiB7DQogICAgICAgICAgICAgICIkcmVmIiA6ICIjL2RlZmluaXRpb25zL1BvcnRFbmFibGVEaXNhYmxlIg0KICAgICAgICAgICAgfQ0KICAgICAgICAgIH0sDQogICAgICAgICAgIjUwMCIgOiB7DQogICAgICAgICAgICAiZGVzY3JpcHRpb24iIDogIiINCiAgICAgICAgICB9LA0KICAgICAgICAgICI0MDEiIDogew0KICAgICAgICAgICAgImRlc2NyaXB0aW9uIiA6ICIiDQogICAgICAgICAgfSwNCiAgICAgICAgICAiNDAwIiA6IHsNCiAgICAgICAgICAgICJkZXNjcmlwdGlvbiIgOiAiIg0KICAgICAgICAgIH0NCiAgICAgICAgfSwNCiAgICAgICAgInNlY3VyaXR5IiA6IFsgew0KICAgICAgICAgICJCYXNpYyIgOiBbIF0NCiAgICAgICAgfSBdDQogICAgICB9DQogICAgfSwNCiAgICAiL3BvcnRzL2Rpc2FibGUiIDogew0KICAgICAgInB1dCIgOiB7DQogICAgICAgICJvcGVyYXRpb25JZCIgOiAiZGRpc2FibGVQb3J0IiwNCiAgICAgICAgImNvbnN1bWVzIiA6IFsgImFwcGxpY2F0aW9uL2pzb24iIF0sDQogICAgICAgICJwcm9kdWNlcyIgOiBbICJhcHBsaWNhdGlvbi9qc29uIiBdLA0KICAgICAgICAicGFyYW1ldGVycyIgOiBbIHsNCiAgICAgICAgICAiaW4iIDogImJvZHkiLA0KICAgICAgICAgICJuYW1lIiA6ICJib2R5IiwNCiAgICAgICAgICAiZGVzY3JpcHRpb24iIDogIiIsDQogICAgICAgICAgInJlcXVpcmVkIiA6IHRydWUsDQogICAgICAgICAgInNjaGVtYSIgOiB7DQogICAgICAgICAgICAiJHJlZiIgOiAiIy9kZWZpbml0aW9ucy9Qb3J0RW5hYmxlRGlzYWJsZSINCiAgICAgICAgICB9DQogICAgICAgIH0gXSwNCiAgICAgICAgInJlc3BvbnNlcyIgOiB7DQogICAgICAgICAgIjIwMCIgOiB7DQogICAgICAgICAgICAiZGVzY3JpcHRpb24iIDogIiIsDQogICAgICAgICAgICAic2NoZW1hIiA6IHsNCiAgICAgICAgICAgICAgIiRyZWYiIDogIiMvZGVmaW5pdGlvbnMvUG9ydEVuYWJsZURpc2FibGUiDQogICAgICAgICAgICB9DQogICAgICAgICAgfSwNCiAgICAgICAgICAiNTAwIiA6IHsNCiAgICAgICAgICAgICJkZXNjcmlwdGlvbiIgOiAiIg0KICAgICAgICAgIH0sDQogICAgICAgICAgIjQwMSIgOiB7DQogICAgICAgICAgICAiZGVzY3JpcHRpb24iIDogIiINCiAgICAgICAgICB9LA0KICAgICAgICAgICI0MDAiIDogew0KICAgICAgICAgICAgImRlc2NyaXB0aW9uIiA6ICIiDQogICAgICAgICAgfQ0KICAgICAgICB9LA0KICAgICAgICAic2VjdXJpdHkiIDogWyB7DQogICAgICAgICAgIkJhc2ljIiA6IFsgXQ0KICAgICAgICB9IF0NCiAgICAgIH0NCiAgICB9DQogIH0sDQogICJzZWN1cml0eURlZmluaXRpb25zIiA6IHsNCiAgICAiQmFzaWMiIDogew0KICAgICAgImRlc2NyaXB0aW9uIiA6ICJBUEkgR2F0ZXdheSBBZG1pbmlzdHJhdG9yIGFuZCBBUEkgR2F0ZXdheSBwcm92aWRlciIsDQogICAgICAidHlwZSIgOiAiYmFzaWMiDQogICAgfQ0KICB9LA0KICAiZGVmaW5pdGlvbnMiIDogew0KICAgICJQb3J0IiA6IHsNCiAgICAgICJ0eXBlIiA6ICJvYmplY3QiLA0KICAgICAgInByb3BlcnRpZXMiIDogew0KICAgICAgICAicG9ydCIgOiB7DQogICAgICAgICAgInR5cGUiIDogImludGVnZXIiLA0KICAgICAgICAgICJmb3JtYXQiIDogImludDMyIg0KICAgICAgICB9LA0KICAgICAgICAicHJvdG9jb2wiIDogew0KICAgICAgICAgICJ0eXBlIiA6ICJzdHJpbmciDQogICAgICAgIH0sDQogICAgICAgICJwa2ciIDogew0KICAgICAgICAgICJ0eXBlIiA6ICJzdHJpbmciDQogICAgICAgIH0sDQogICAgICAgICJlbmFibGVkIiA6IHsNCiAgICAgICAgICAidHlwZSIgOiAic3RyaW5nIg0KICAgICAgICB9LA0KICAgICAgICAia2V5IiA6IHsNCiAgICAgICAgICAidHlwZSIgOiAic3RyaW5nIg0KICAgICAgICB9LA0KICAgICAgICAidW5pcXVlSUQiIDogew0KICAgICAgICAgICJ0eXBlIiA6ICJzdHJpbmciDQogICAgICAgIH0sDQogICAgICAgICJwb3J0QWxpYXMiIDogew0KICAgICAgICAgICJ0eXBlIiA6ICJzdHJpbmciDQogICAgICAgIH0sDQogICAgICAgICJwb3J0RGVzY3JpcHRpb24iIDogew0KICAgICAgICAgICJ0eXBlIiA6ICJzdHJpbmciDQogICAgICAgIH0sDQogICAgICAgICJmYWN0b3J5S2V5IiA6IHsNCiAgICAgICAgICAidHlwZSIgOiAic3RyaW5nIg0KICAgICAgICB9LA0KICAgICAgICAiY29uZmlnVVJMIiA6IHsNCiAgICAgICAgICAidHlwZSIgOiAic3RyaW5nIg0KICAgICAgICB9LA0KICAgICAgICAicHJvdmlkZXIiIDogew0KICAgICAgICAgICJ0eXBlIiA6ICJzdHJpbmciDQogICAgICAgIH0sDQogICAgICAgICJsaXN0ZW5lclR5cGUiIDogew0KICAgICAgICAgICJ0eXBlIiA6ICJzdHJpbmciDQogICAgICAgIH0sDQogICAgICAgICJjbGllbnRBdXRoIiA6IHsNCiAgICAgICAgICAidHlwZSIgOiAic3RyaW5nIg0KICAgICAgICB9LA0KICAgICAgICAiaWRQcm92aWRlciIgOiB7DQogICAgICAgICAgInR5cGUiIDogIm9iamVjdCINCiAgICAgICAgfSwNCiAgICAgICAgInNzbCIgOiB7DQogICAgICAgICAgInR5cGUiIDogInN0cmluZyINCiAgICAgICAgfSwNCiAgICAgICAgIm1heFF1ZXVlIiA6IHsNCiAgICAgICAgICAidHlwZSIgOiAic3RyaW5nIg0KICAgICAgICB9LA0KICAgICAgICAia2VlcEFsaXZlVGltZW91dCIgOiB7DQogICAgICAgICAgInR5cGUiIDogInN0cmluZyINCiAgICAgICAgfSwNCiAgICAgICAgInRocmVhZFBvb2wiIDogew0KICAgICAgICAgICJ0eXBlIiA6ICJzdHJpbmciDQogICAgICAgIH0sDQogICAgICAgICJtaW5UaHJlYWQiIDogew0KICAgICAgICAgICJ0eXBlIiA6ICJzdHJpbmciDQogICAgICAgIH0sDQogICAgICAgICJtYXhUaHJlYWQiIDogew0KICAgICAgICAgICJ0eXBlIiA6ICJzdHJpbmciDQogICAgICAgIH0sDQogICAgICAgICJ0aHJlYWRQcmlvcml0eSIgOiB7DQogICAgICAgICAgInR5cGUiIDogInN0cmluZyINCiAgICAgICAgfSwNCiAgICAgICAgInVzZWRUaHJlYWRDb3VudCIgOiB7DQogICAgICAgICAgInR5cGUiIDogInN0cmluZyINCiAgICAgICAgfSwNCiAgICAgICAgImludGVybmFsUG9ydCIgOiB7DQogICAgICAgICAgInR5cGUiIDogInN0cmluZyINCiAgICAgICAgfSwNCiAgICAgICAgImN1ckRlbGF5IiA6IHsNCiAgICAgICAgICAidHlwZSIgOiAic3RyaW5nIg0KICAgICAgICB9LA0KICAgICAgICAic3RlcHNpemUiIDogew0KICAgICAgICAgICJ0eXBlIiA6ICJzdHJpbmciDQogICAgICAgIH0sDQogICAgICAgICJzdXNwZW5kZWQiIDogew0KICAgICAgICAgICJ0eXBlIiA6ICJzdHJpbmciDQogICAgICAgIH0sDQogICAgICAgICJqc3NlRW5hYmxlZFByb3RvY29scyIgOiB7DQogICAgICAgICAgInR5cGUiIDogIm9iamVjdCINCiAgICAgICAgfSwNCiAgICAgICAgInN0YXR1cyIgOiB7DQogICAgICAgICAgInR5cGUiIDogInN0cmluZyINCiAgICAgICAgfSwNCiAgICAgICAgImxpc3RlbmluZyIgOiB7DQogICAgICAgICAgInR5cGUiIDogInN0cmluZyINCiAgICAgICAgfSwNCiAgICAgICAgImFjY2Vzc01vZGUiIDogew0KICAgICAgICAgICJ0eXBlIiA6ICJzdHJpbmciDQogICAgICAgIH0sDQogICAgICAgICJoYXNBY2Nlc3NMaXN0IiA6IHsNCiAgICAgICAgICAidHlwZSIgOiAic3RyaW5nIg0KICAgICAgICB9LA0KICAgICAgICAiaXBBY2Nlc3NNb2RlIiA6IHsNCiAgICAgICAgICAidHlwZSIgOiAic3RyaW5nIg0KICAgICAgICB9LA0KICAgICAgICAiaGFzSVBBY2Nlc3NMaXN0IiA6IHsNCiAgICAgICAgICAidHlwZSIgOiAic3RyaW5nIg0KICAgICAgICB9DQogICAgICB9LA0KICAgICAgImRlc2NyaXB0aW9uIiA6ICJUaGlzIGRlZmluZXMgdGhlIHZhcmlvdXMgZmllbGRzIHRoYXQgcmVsYXRlZCB0byBhIHBhcnRpY3VsYXIgcG9ydC4iDQogICAgfSwNCiAgICAiUG9ydEVuYWJsZURpc2FibGUiIDogew0KICAgICAgInR5cGUiIDogIm9iamVjdCIsDQogICAgICAicHJvcGVydGllcyIgOiB7DQogICAgICAgICJsaXN0ZW5lcktleSIgOiB7DQogICAgICAgICAgInR5cGUiIDogInN0cmluZyINCiAgICAgICAgfSwNCiAgICAgICAgInBrZyIgOiB7DQogICAgICAgICAgInR5cGUiIDogInN0cmluZyINCiAgICAgICAgfSwNCiAgICAgICAgInJlcXVlc3RTZXJ2aWNlU3RhdHVzIiA6IHsNCiAgICAgICAgICAidHlwZSIgOiAic3RyaW5nIg0KICAgICAgICB9LA0KICAgICAgICAiZ2V0JHJlc291cmNlSUQiIDogew0KICAgICAgICAgICJ0eXBlIiA6ICJzdHJpbmciDQogICAgICAgIH0sDQogICAgICAgICJtZXNzYWdlIiA6IHsNCiAgICAgICAgICAidHlwZSIgOiAic3RyaW5nIg0KICAgICAgICB9DQogICAgICB9DQogICAgfQ0KICB9DQp9\"\r\n}" + } + } ], + "responses" : { + "200" : { + "description" : "This status code indicates that the given document has been updated successfully in API Gateway.", + "schema" : { + "$ref" : "#/definitions/DocumentResponse" + }, + "examples" : { + "application/json" : "{\r\n\t\"id\": \"be9147a8-6e53-4472-b1bd-16337a84d314\"\r\n}" + } + }, + "400" : { + "description" : "This status code indicates invalid request or bad input." + }, + "401" : { + "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." + }, + "404" : { + "description" : "This status code indicates that the requested resource is not found." + }, + "405" : { + "description" : "This status code indicates that the requested HTTP method is not supported for the resource." + }, + "500" : { + "description" : "This status code indicates an error occurred while updating the given document in API Gateway." + } + }, + "security" : [ { + "Basic" : [ ] + } ] + }, + "delete" : { + "description" : "Deletes the stored document from API Gateway", + "operationId" : "deleteDocument", + "consumes" : [ "application/json" ], + "produces" : [ "application/json" ], + "parameters" : [ { + "name" : "documentId", + "in" : "path", + "description" : "Id of the document for deletion", + "required" : true, + "type" : "string", + "x-example" : "353bd366-47d4-4703-aecf-9cb40cdcc864" + } ], + "responses" : { + "200" : { + "description" : "This status code indicates that the given document has been deleted successfully from API Gateway." + }, + "400" : { + "description" : "This status code indicates invalid request or bad input." + }, + "401" : { + "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." + }, + "404" : { + "description" : "This status code indicates that the requested resource is not found." + }, + "405" : { + "description" : "This status code indicates that the requested HTTP method is not supported for the resource." + }, + "500" : { + "description" : "This status code indicates an error occurred while deleting the given document from API Gateway." + } + }, + "security" : [ { + "Basic" : [ ] + } ] + }, + "patch" : { + "operationId" : "patchDocument", + "consumes" : [ "application/json" ], + "produces" : [ "application/json" ], + "parameters" : [ { + "in" : "body", + "name" : "body", + "description" : "The request payload to patch the document in API Gateway.", + "required" : true, + "schema" : { + "$ref" : "#/definitions/Document" + }, + "x-examples" : { + "application/json" : "{\r\n\t\"displayName\": \"APIGatewayPortsInfoDocument Updated\"\r\n}" + } + } ], + "responses" : { + "200" : { + "description" : "This status code indicates that the given document has been patched successfully in API Gateway.", + "schema" : { + "$ref" : "#/definitions/DocumentResponse" + }, + "examples" : { + "application/json" : "{\r\n\t\"id\": \"be9147a8-6e53-4472-b1bd-16337a84d314\"\r\n}" + } + }, + "400" : { + "description" : "This status code indicates invalid request or bad input." + }, + "401" : { + "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." + }, + "404" : { + "description" : "This status code indicates that the requested resource is not found." + }, + "405" : { + "description" : "This status code indicates that the requested HTTP method is not supported for the resource." + }, + "500" : { + "description" : "This status code indicates an error occurred while patching the given document in API Gateway." + } + }, + "security" : [ { + "Basic" : [ ] + } ] + } + }, + "/documents" : { + "post" : { + "operationId" : "storeDocument", + "consumes" : [ "application/json" ], + "produces" : [ "application/json" ], + "parameters" : [ { + "in" : "body", + "name" : "body", + "description" : "The request payload to store the document in API Gateway.", + "required" : true, + "schema" : { + "$ref" : "#/definitions/Document" + }, + "x-examples" : { + "application/json" : "{\r\n\t\"displayName\": \"APIGatewayPortsInfoDocument\",\r\n\t\"fileName\": \"APIGatewayPorts.json\",\r\n\t\"fileContent\": \"data:;base64,ew0KICAic3dhZ2dlciIgOiAiMi4wIiwNCiAgImluZm8iIDogew0KICAgICJkZXNjcmlwdGlvbiIgOiAiVGhpcyBzd2FnZ2VyIGRvYyBjb250YWlucyBBUEkgRGVmaW5pdGlvbiBvZiB0aGUgcG9ydHMgQ1JVRCBvcGVyYXRpb25zLiIsDQogICAgInZlcnNpb24iIDogIjEwLjEiLA0KICAgICJ0aXRsZSIgOiAiUG9ydHMgY29uZmlndXJhdGlvbnMuIg0KICB9LA0KICAiaG9zdCIgOiAibG9jYWxob3N0OjU1NTUiLA0KICAiYmFzZVBhdGgiIDogIi9yZXN0L2FwaWdhdGV3YXkiLA0KICAic2NoZW1lcyIgOiBbICJodHRwIiBdLA0KICAiY29uc3VtZXMiIDogWyAicGxhaW4vdGV4dCIgXSwNCiAgInByb2R1Y2VzIiA6IFsgImFwcGxpY2F0aW9uL2pzb24iIF0sDQogICJwYXRocyIgOiB7DQogICAgIi9wb3J0cyIgOiB7DQogICAgICAicG9zdCIgOiB7DQogICAgICAgICJvcGVyYXRpb25JZCIgOiAiY3JlYXRlUG9ydCIsDQogICAgICAgICJjb25zdW1lcyIgOiBbICJhcHBsaWNhdGlvbi9qc29uIiBdLA0KICAgICAgICAicHJvZHVjZXMiIDogWyAiYXBwbGljYXRpb24vanNvbiIgXSwNCiAgICAgICAgInBhcmFtZXRlcnMiIDogWyB7DQogICAgICAgICAgImluIiA6ICJib2R5IiwNCiAgICAgICAgICAibmFtZSIgOiAiYm9keSIsDQogICAgICAgICAgImRlc2NyaXB0aW9uIiA6ICJwb3J0IHBheWxvYWQiLA0KICAgICAgICAgICJyZXF1aXJlZCIgOiB0cnVlLA0KICAgICAgICAgICJzY2hlbWEiIDogew0KICAgICAgICAgICAgIiRyZWYiIDogIiMvZGVmaW5pdGlvbnMvUG9ydCINCiAgICAgICAgICB9DQogICAgICAgIH0gXSwNCiAgICAgICAgInJlc3BvbnNlcyIgOiB7DQogICAgICAgICAgIjIwMSIgOiB7DQogICAgICAgICAgICAiZGVzY3JpcHRpb24iIDogIkNyZWF0ZWQiLA0KICAgICAgICAgICAgInNjaGVtYSIgOiB7DQogICAgICAgICAgICAgICIkcmVmIiA6ICIjL2RlZmluaXRpb25zL1BvcnQiDQogICAgICAgICAgICB9DQogICAgICAgICAgfSwNCiAgICAgICAgICAiNDAwIiA6IHsNCiAgICAgICAgICAgICJkZXNjcmlwdGlvbiIgOiAiQmFkIHJlcXVlc3QiDQogICAgICAgICAgfSwNCiAgICAgICAgICAiNDAxIiA6IHsNCiAgICAgICAgICAgICJkZXNjcmlwdGlvbiIgOiAiQWNjZXNzIERlbmllZCINCiAgICAgICAgICB9DQogICAgICAgIH0sDQogICAgICAgICJzZWN1cml0eSIgOiBbIHsNCiAgICAgICAgICAiQmFzaWMiIDogWyBdDQogICAgICAgIH0gXQ0KICAgICAgfSwNCiAgICAgICJwdXQiIDogew0KICAgICAgICAib3BlcmF0aW9uSWQiIDogInVwZGF0ZVBvcnQiLA0KICAgICAgICAiY29uc3VtZXMiIDogWyAiYXBwbGljYXRpb24vanNvbiIgXSwNCiAgICAgICAgInByb2R1Y2VzIiA6IFsgImFwcGxpY2F0aW9uL2pzb24iIF0sDQogICAgICAgICJwYXJhbWV0ZXJzIiA6IFsgew0KICAgICAgICAgICJpbiIgOiAiYm9keSIsDQogICAgICAgICAgIm5hbWUiIDogImJvZHkiLA0KICAgICAgICAgICJkZXNjcmlwdGlvbiIgOiAiIiwNCiAgICAgICAgICAicmVxdWlyZWQiIDogdHJ1ZSwNCiAgICAgICAgICAic2NoZW1hIiA6IHsNCiAgICAgICAgICAgICIkcmVmIiA6ICIjL2RlZmluaXRpb25zL1BvcnQiDQogICAgICAgICAgfQ0KICAgICAgICB9IF0sDQogICAgICAgICJyZXNwb25zZXMiIDogew0KICAgICAgICAgICIyMDAiIDogew0KICAgICAgICAgICAgImRlc2NyaXB0aW9uIiA6ICIiLA0KICAgICAgICAgICAgInNjaGVtYSIgOiB7DQogICAgICAgICAgICAgICIkcmVmIiA6ICIjL2RlZmluaXRpb25zL1BvcnQiDQogICAgICAgICAgICB9DQogICAgICAgICAgfSwNCiAgICAgICAgICAiNTAwIiA6IHsNCiAgICAgICAgICAgICJkZXNjcmlwdGlvbiIgOiAiIg0KICAgICAgICAgIH0sDQogICAgICAgICAgIjQwMSIgOiB7DQogICAgICAgICAgICAiZGVzY3JpcHRpb24iIDogIiINCiAgICAgICAgICB9LA0KICAgICAgICAgICI0MDAiIDogew0KICAgICAgICAgICAgImRlc2NyaXB0aW9uIiA6ICIiDQogICAgICAgICAgfQ0KICAgICAgICB9LA0KICAgICAgICAic2VjdXJpdHkiIDogWyB7DQogICAgICAgICAgIkJhc2ljIiA6IFsgXQ0KICAgICAgICB9IF0NCiAgICAgIH0sDQogICAgICAiZGVsZXRlIiA6IHsNCiAgICAgICAgIm9wZXJhdGlvbklkIiA6ICJkZWxldGVQb3J0IiwNCiAgICAgICAgImNvbnN1bWVzIiA6IFsgImFwcGxpY2F0aW9uL2pzb24iIF0sDQogICAgICAgICJwcm9kdWNlcyIgOiBbICJhcHBsaWNhdGlvbi9qc29uIiBdLA0KICAgICAgICAicGFyYW1ldGVycyIgOiBbIHsNCiAgICAgICAgICAibmFtZSIgOiAibGlzdGVuZXJLZXkiLA0KICAgICAgICAgICJpbiIgOiAicXVlcnkiLA0KICAgICAgICAgICJyZXF1aXJlZCIgOiB0cnVlLA0KICAgICAgICAgICJ0eXBlIiA6ICJzdHJpbmciLA0KICAgICAgICAgICJ4LWV4YW1wbGUiIDogIkhUVFBMaXN0ZW5lckA1NTU1Ig0KICAgICAgICB9LCB7DQogICAgICAgICAgIm5hbWUiIDogInBrZyIsDQogICAgICAgICAgImluIiA6ICJxdWVyeSIsDQogICAgICAgICAgInJlcXVpcmVkIiA6IHRydWUsDQogICAgICAgICAgInR5cGUiIDogInN0cmluZyIsDQogICAgICAgICAgIngtZXhhbXBsZSIgOiAiV21Sb290Ig0KICAgICAgICB9IF0sDQogICAgICAgICJyZXNwb25zZXMiIDogew0KICAgICAgICAgICI0MDEiIDogew0KICAgICAgICAgICAgImRlc2NyaXB0aW9uIiA6ICIiDQogICAgICAgICAgfSwNCiAgICAgICAgICAiMjA0IiA6IHsNCiAgICAgICAgICAgICJkZXNjcmlwdGlvbiIgOiAiIg0KICAgICAgICAgIH0sDQogICAgICAgICAgIjQwNCIgOiB7DQogICAgICAgICAgICAiZGVzY3JpcHRpb24iIDogIiINCiAgICAgICAgICB9DQogICAgICAgIH0sDQogICAgICAgICJzZWN1cml0eSIgOiBbIHsNCiAgICAgICAgICAiQmFzaWMiIDogWyBdDQogICAgICAgIH0gXQ0KICAgICAgfQ0KICAgIH0sDQogICAgIi9wb3J0cy9lbmFibGUiIDogew0KICAgICAgInB1dCIgOiB7DQogICAgICAgICJvcGVyYXRpb25JZCIgOiAiZW5hYmxlUG9ydCIsDQogICAgICAgICJjb25zdW1lcyIgOiBbICJhcHBsaWNhdGlvbi9qc29uIiBdLA0KICAgICAgICAicHJvZHVjZXMiIDogWyAiYXBwbGljYXRpb24vanNvbiIgXSwNCiAgICAgICAgInBhcmFtZXRlcnMiIDogWyB7DQogICAgICAgICAgImluIiA6ICJib2R5IiwNCiAgICAgICAgICAibmFtZSIgOiAiYm9keSIsDQogICAgICAgICAgImRlc2NyaXB0aW9uIiA6ICIiLA0KICAgICAgICAgICJyZXF1aXJlZCIgOiB0cnVlLA0KICAgICAgICAgICJzY2hlbWEiIDogew0KICAgICAgICAgICAgIiRyZWYiIDogIiMvZGVmaW5pdGlvbnMvUG9ydEVuYWJsZURpc2FibGUiDQogICAgICAgICAgfQ0KICAgICAgICB9IF0sDQogICAgICAgICJyZXNwb25zZXMiIDogew0KICAgICAgICAgICIyMDAiIDogew0KICAgICAgICAgICAgImRlc2NyaXB0aW9uIiA6ICIiLA0KICAgICAgICAgICAgInNjaGVtYSIgOiB7DQogICAgICAgICAgICAgICIkcmVmIiA6ICIjL2RlZmluaXRpb25zL1BvcnRFbmFibGVEaXNhYmxlIg0KICAgICAgICAgICAgfQ0KICAgICAgICAgIH0sDQogICAgICAgICAgIjUwMCIgOiB7DQogICAgICAgICAgICAiZGVzY3JpcHRpb24iIDogIiINCiAgICAgICAgICB9LA0KICAgICAgICAgICI0MDEiIDogew0KICAgICAgICAgICAgImRlc2NyaXB0aW9uIiA6ICIiDQogICAgICAgICAgfSwNCiAgICAgICAgICAiNDAwIiA6IHsNCiAgICAgICAgICAgICJkZXNjcmlwdGlvbiIgOiAiIg0KICAgICAgICAgIH0NCiAgICAgICAgfSwNCiAgICAgICAgInNlY3VyaXR5IiA6IFsgew0KICAgICAgICAgICJCYXNpYyIgOiBbIF0NCiAgICAgICAgfSBdDQogICAgICB9DQogICAgfSwNCiAgICAiL3BvcnRzL2Rpc2FibGUiIDogew0KICAgICAgInB1dCIgOiB7DQogICAgICAgICJvcGVyYXRpb25JZCIgOiAiZGRpc2FibGVQb3J0IiwNCiAgICAgICAgImNvbnN1bWVzIiA6IFsgImFwcGxpY2F0aW9uL2pzb24iIF0sDQogICAgICAgICJwcm9kdWNlcyIgOiBbICJhcHBsaWNhdGlvbi9qc29uIiBdLA0KICAgICAgICAicGFyYW1ldGVycyIgOiBbIHsNCiAgICAgICAgICAiaW4iIDogImJvZHkiLA0KICAgICAgICAgICJuYW1lIiA6ICJib2R5IiwNCiAgICAgICAgICAiZGVzY3JpcHRpb24iIDogIiIsDQogICAgICAgICAgInJlcXVpcmVkIiA6IHRydWUsDQogICAgICAgICAgInNjaGVtYSIgOiB7DQogICAgICAgICAgICAiJHJlZiIgOiAiIy9kZWZpbml0aW9ucy9Qb3J0RW5hYmxlRGlzYWJsZSINCiAgICAgICAgICB9DQogICAgICAgIH0gXSwNCiAgICAgICAgInJlc3BvbnNlcyIgOiB7DQogICAgICAgICAgIjIwMCIgOiB7DQogICAgICAgICAgICAiZGVzY3JpcHRpb24iIDogIiIsDQogICAgICAgICAgICAic2NoZW1hIiA6IHsNCiAgICAgICAgICAgICAgIiRyZWYiIDogIiMvZGVmaW5pdGlvbnMvUG9ydEVuYWJsZURpc2FibGUiDQogICAgICAgICAgICB9DQogICAgICAgICAgfSwNCiAgICAgICAgICAiNTAwIiA6IHsNCiAgICAgICAgICAgICJkZXNjcmlwdGlvbiIgOiAiIg0KICAgICAgICAgIH0sDQogICAgICAgICAgIjQwMSIgOiB7DQogICAgICAgICAgICAiZGVzY3JpcHRpb24iIDogIiINCiAgICAgICAgICB9LA0KICAgICAgICAgICI0MDAiIDogew0KICAgICAgICAgICAgImRlc2NyaXB0aW9uIiA6ICIiDQogICAgICAgICAgfQ0KICAgICAgICB9LA0KICAgICAgICAic2VjdXJpdHkiIDogWyB7DQogICAgICAgICAgIkJhc2ljIiA6IFsgXQ0KICAgICAgICB9IF0NCiAgICAgIH0NCiAgICB9DQogIH0sDQogICJzZWN1cml0eURlZmluaXRpb25zIiA6IHsNCiAgICAiQmFzaWMiIDogew0KICAgICAgImRlc2NyaXB0aW9uIiA6ICJBUEkgR2F0ZXdheSBBZG1pbmlzdHJhdG9yIGFuZCBBUEkgR2F0ZXdheSBwcm92aWRlciIsDQogICAgICAidHlwZSIgOiAiYmFzaWMiDQogICAgfQ0KICB9LA0KICAiZGVmaW5pdGlvbnMiIDogew0KICAgICJQb3J0IiA6IHsNCiAgICAgICJ0eXBlIiA6ICJvYmplY3QiLA0KICAgICAgInByb3BlcnRpZXMiIDogew0KICAgICAgICAicG9ydCIgOiB7DQogICAgICAgICAgInR5cGUiIDogImludGVnZXIiLA0KICAgICAgICAgICJmb3JtYXQiIDogImludDMyIg0KICAgICAgICB9LA0KICAgICAgICAicHJvdG9jb2wiIDogew0KICAgICAgICAgICJ0eXBlIiA6ICJzdHJpbmciDQogICAgICAgIH0sDQogICAgICAgICJwa2ciIDogew0KICAgICAgICAgICJ0eXBlIiA6ICJzdHJpbmciDQogICAgICAgIH0sDQogICAgICAgICJlbmFibGVkIiA6IHsNCiAgICAgICAgICAidHlwZSIgOiAic3RyaW5nIg0KICAgICAgICB9LA0KICAgICAgICAia2V5IiA6IHsNCiAgICAgICAgICAidHlwZSIgOiAic3RyaW5nIg0KICAgICAgICB9LA0KICAgICAgICAidW5pcXVlSUQiIDogew0KICAgICAgICAgICJ0eXBlIiA6ICJzdHJpbmciDQogICAgICAgIH0sDQogICAgICAgICJwb3J0QWxpYXMiIDogew0KICAgICAgICAgICJ0eXBlIiA6ICJzdHJpbmciDQogICAgICAgIH0sDQogICAgICAgICJwb3J0RGVzY3JpcHRpb24iIDogew0KICAgICAgICAgICJ0eXBlIiA6ICJzdHJpbmciDQogICAgICAgIH0sDQogICAgICAgICJmYWN0b3J5S2V5IiA6IHsNCiAgICAgICAgICAidHlwZSIgOiAic3RyaW5nIg0KICAgICAgICB9LA0KICAgICAgICAiY29uZmlnVVJMIiA6IHsNCiAgICAgICAgICAidHlwZSIgOiAic3RyaW5nIg0KICAgICAgICB9LA0KICAgICAgICAicHJvdmlkZXIiIDogew0KICAgICAgICAgICJ0eXBlIiA6ICJzdHJpbmciDQogICAgICAgIH0sDQogICAgICAgICJsaXN0ZW5lclR5cGUiIDogew0KICAgICAgICAgICJ0eXBlIiA6ICJzdHJpbmciDQogICAgICAgIH0sDQogICAgICAgICJjbGllbnRBdXRoIiA6IHsNCiAgICAgICAgICAidHlwZSIgOiAic3RyaW5nIg0KICAgICAgICB9LA0KICAgICAgICAiaWRQcm92aWRlciIgOiB7DQogICAgICAgICAgInR5cGUiIDogIm9iamVjdCINCiAgICAgICAgfSwNCiAgICAgICAgInNzbCIgOiB7DQogICAgICAgICAgInR5cGUiIDogInN0cmluZyINCiAgICAgICAgfSwNCiAgICAgICAgIm1heFF1ZXVlIiA6IHsNCiAgICAgICAgICAidHlwZSIgOiAic3RyaW5nIg0KICAgICAgICB9LA0KICAgICAgICAia2VlcEFsaXZlVGltZW91dCIgOiB7DQogICAgICAgICAgInR5cGUiIDogInN0cmluZyINCiAgICAgICAgfSwNCiAgICAgICAgInRocmVhZFBvb2wiIDogew0KICAgICAgICAgICJ0eXBlIiA6ICJzdHJpbmciDQogICAgICAgIH0sDQogICAgICAgICJtaW5UaHJlYWQiIDogew0KICAgICAgICAgICJ0eXBlIiA6ICJzdHJpbmciDQogICAgICAgIH0sDQogICAgICAgICJtYXhUaHJlYWQiIDogew0KICAgICAgICAgICJ0eXBlIiA6ICJzdHJpbmciDQogICAgICAgIH0sDQogICAgICAgICJ0aHJlYWRQcmlvcml0eSIgOiB7DQogICAgICAgICAgInR5cGUiIDogInN0cmluZyINCiAgICAgICAgfSwNCiAgICAgICAgInVzZWRUaHJlYWRDb3VudCIgOiB7DQogICAgICAgICAgInR5cGUiIDogInN0cmluZyINCiAgICAgICAgfSwNCiAgICAgICAgImludGVybmFsUG9ydCIgOiB7DQogICAgICAgICAgInR5cGUiIDogInN0cmluZyINCiAgICAgICAgfSwNCiAgICAgICAgImN1ckRlbGF5IiA6IHsNCiAgICAgICAgICAidHlwZSIgOiAic3RyaW5nIg0KICAgICAgICB9LA0KICAgICAgICAic3RlcHNpemUiIDogew0KICAgICAgICAgICJ0eXBlIiA6ICJzdHJpbmciDQogICAgICAgIH0sDQogICAgICAgICJzdXNwZW5kZWQiIDogew0KICAgICAgICAgICJ0eXBlIiA6ICJzdHJpbmciDQogICAgICAgIH0sDQogICAgICAgICJqc3NlRW5hYmxlZFByb3RvY29scyIgOiB7DQogICAgICAgICAgInR5cGUiIDogIm9iamVjdCINCiAgICAgICAgfSwNCiAgICAgICAgInN0YXR1cyIgOiB7DQogICAgICAgICAgInR5cGUiIDogInN0cmluZyINCiAgICAgICAgfSwNCiAgICAgICAgImxpc3RlbmluZyIgOiB7DQogICAgICAgICAgInR5cGUiIDogInN0cmluZyINCiAgICAgICAgfSwNCiAgICAgICAgImFjY2Vzc01vZGUiIDogew0KICAgICAgICAgICJ0eXBlIiA6ICJzdHJpbmciDQogICAgICAgIH0sDQogICAgICAgICJoYXNBY2Nlc3NMaXN0IiA6IHsNCiAgICAgICAgICAidHlwZSIgOiAic3RyaW5nIg0KICAgICAgICB9LA0KICAgICAgICAiaXBBY2Nlc3NNb2RlIiA6IHsNCiAgICAgICAgICAidHlwZSIgOiAic3RyaW5nIg0KICAgICAgICB9LA0KICAgICAgICAiaGFzSVBBY2Nlc3NMaXN0IiA6IHsNCiAgICAgICAgICAidHlwZSIgOiAic3RyaW5nIg0KICAgICAgICB9DQogICAgICB9LA0KICAgICAgImRlc2NyaXB0aW9uIiA6ICJUaGlzIGRlZmluZXMgdGhlIHZhcmlvdXMgZmllbGRzIHRoYXQgcmVsYXRlZCB0byBhIHBhcnRpY3VsYXIgcG9ydC4iDQogICAgfSwNCiAgICAiUG9ydEVuYWJsZURpc2FibGUiIDogew0KICAgICAgInR5cGUiIDogIm9iamVjdCIsDQogICAgICAicHJvcGVydGllcyIgOiB7DQogICAgICAgICJsaXN0ZW5lcktleSIgOiB7DQogICAgICAgICAgInR5cGUiIDogInN0cmluZyINCiAgICAgICAgfSwNCiAgICAgICAgInBrZyIgOiB7DQogICAgICAgICAgInR5cGUiIDogInN0cmluZyINCiAgICAgICAgfSwNCiAgICAgICAgInJlcXVlc3RTZXJ2aWNlU3RhdHVzIiA6IHsNCiAgICAgICAgICAidHlwZSIgOiAic3RyaW5nIg0KICAgICAgICB9LA0KICAgICAgICAiZ2V0JHJlc291cmNlSUQiIDogew0KICAgICAgICAgICJ0eXBlIiA6ICJzdHJpbmciDQogICAgICAgIH0sDQogICAgICAgICJtZXNzYWdlIiA6IHsNCiAgICAgICAgICAidHlwZSIgOiAic3RyaW5nIg0KICAgICAgICB9DQogICAgICB9DQogICAgfQ0KICB9DQp9\"\r\n}" + } + } ], + "responses" : { + "200" : { + "description" : "This status code indicates that the given document has been stored successfully in API Gateway.", + "schema" : { + "$ref" : "#/definitions/DocumentResponse" + }, + "examples" : { + "application/json" : "{\r\n\t\"id\": \"be9147a8-6e53-4472-b1bd-16337a84d314\"\r\n}" + } + }, + "400" : { + "description" : "This status code indicates invalid request or bad input." + }, + "401" : { + "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." + }, + "404" : { + "description" : "This status code indicates that the requested resource is not found." + }, + "405" : { + "description" : "This status code indicates that the requested HTTP method is not supported for the resource." + }, + "500" : { + "description" : "This status code indicates an error occurred while storing the given document in API Gateway." + } + }, + "security" : [ { + "Basic" : [ ] + } ] + } + } + }, + "securityDefinitions" : { + "Basic" : { + "description" : "API Gateway Administrator and API Gateway provider", + "type" : "basic" + } + }, + "definitions" : { + "Document" : { + "type" : "object", + "properties" : { + "id" : { + "type" : "string", + "description" : "The unique identifier of the document as stored in API Gateway.", + "readOnly" : true + }, + "displayName" : { + "type" : "string", + "description" : "The display name of the attached document." + }, + "fileName" : { + "type" : "string", + "description" : "The original name of the file uploaded to API Gateway." + }, + "fileContent" : { + "type" : "string", + "description" : "The complete file content in data URL format." + } + }, + "description" : "This model is used to store any document in API Gateway." + }, + "DocumentResponse" : { + "type" : "object", + "properties" : { + "id" : { + "type" : "string", + "description" : "The unique identifier of the document as stored in API Gateway.", + "readOnly" : true + } + }, + "description" : "This defines the response for documents." + } + } +} \ No newline at end of file diff --git a/apigatewayservices/APIGatewayInternalService.json b/apigatewayservices/APIGatewayInternalService.json new file mode 100644 index 0000000..cc83c0b --- /dev/null +++ b/apigatewayservices/APIGatewayInternalService.json @@ -0,0 +1,168 @@ +{ + "swagger" : "2.0", + "info" : { + "description" : "Services in this category work on identified application. API Gateway will first try to identify the application based on identifiers such as API Key, OAuth token, ip address etc (as defined in the Application) and then executes the API for that application.", + "version" : "10.3", + "title" : "API Gateway Internal Service" + }, + "host" : "localhost:5555", + "basePath" : "/{gateway}", + "schemes" : [ "http" ], + "consumes" : [ "plain/text" ], + "produces" : [ "application/json" ], + "paths" : { + "/security/exchangeIDToken" : { + "post" : { + "description" : "Generate an access token for the given ID Token", + "operationId" : "exchangeIDToken", + "consumes" : [ "application/json" ], + "produces" : [ "application/json" ], + "parameters" : [ { + "in" : "body", + "name" : "body", + "description" : "This parameter describes the request payload of an application that is to be created in API Gateway.", + "required" : true, + "schema" : { + "$ref" : "#/definitions/ServiceInput" + }, + "x-examples" : { + "application/json" : "{\n\t\"idToken\": \"eyJhbGciOiJSUzI1NiIsImtpZCI6IjQ2M2ZlNDgwYzNjNTgzOWJiYjE1ODYxZTA4YzMyZDE4N2ZhZjlhNTYiLCJ0eXAiOiJKV1QifQ.eyJpc3MiOiJodHRwczovL2FjY291bnRzLmdvb2dsZS5jb20iLCJhenAiOiI0MDc0MDg3MTgxOTIuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20iLCJhdWQiOiI0MDc0MDg3MTgxOTIuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20iLCJzdWIiOiIxMTQ5MjgwMjY5NDg0MTkzNTc4MzciLCJlbWFpbCI6Imt1cHBhbi5kaGFybWFAZ21haWwuY29tIiwiZW1haWxfdmVyaWZpZWQiOnRydWUsImF0X2hhc2giOiJUQzJydnRBRnVRRmdnTHhNQVpVTEJ3IiwiaWF0IjoxNTQzOTkxOTAwLCJleHAiOjE1NDM5OTU1MDB9.ONHxCJ-U8Iz6mk2Ybs9REWxp4y97QTVIw6SikgiYcseSBcDix5o_lu4x-j-tl2E4v5OOO29t9wMXFDpQ9KxlEm_s4kAmDdnVc-v_m1OTkYilzGdapwcWaw1xCGA17f7X4FiaqgUQlATYDKL27hEZS4hl1t38Okq-rJl8Gi41kWB2XMcddcNjV19RE_Vu8nX1sSpi24CzddY8-yO9xvvOAKlztdP718D3s10RjGkUfYlorXdVllh-9COENkW0oODTYIU5wyZCYPXlf_SXPZp-9MvIDl_cva_eB-FWdbnbU_vKdUN6NmHZzQ1DWVTRLO1G9vSDzRG8jWavasBUpy_OlA\",\n\t\"gatewayScopes\": [\"okta-server:inventory\"],\n\t\"expiry\": 3600\n}" + } + } ], + "responses" : { + "200" : { + "description" : "This status code indicates that the access token has been successfully generated.", + "schema" : { + "$ref" : "#/definitions/ServiceOutput" + }, + "examples" : { + "application/json" : "{\n \"accessToken\": \"eyJraWQiOiJzc29zIiwiYWxnIjoiUlMyNTYifQ.eyJzY3AiOlsiaW52ZW50b3J5Il0sInVpZCI6IjExNDkyODAyNjk0ODQxOTM1NzgzNyIsInN1YiI6IjQwNzQwODcxODE5Mi5hcHBzLmdvb2dsZXVzZXJjb250ZW50LmNvbSIsImF1ZCI6InRpbWV0cmF2ZWxzIiwiYXpwIjoiODAzYjdmMTYtNDVjNi00YjFjLWJlMjYtNGRhMDUzZDQwNjQwIiwiaXNzIjoidGVzdC1nYXRld2F5LWlzc3VlciIsImV4cCI6MTU0Mzk5NjExNCwiaWF0IjoxNTQzOTkyNTE1LCJqdGkiOiIzZGQ5M2FmOC0yMWVmLTQyMDYtYTBiNy01MTg2NDUxMTM0YWYifQ.Dty2iLk_DJRZLU0CYhb7Opp_sINP7yRVkgAvafYGrSzDEeWiOXDv_jSO93iQV4TCdU20R5WjypC0HY_xd05VkqozFP0I5irZGYqmVnm8rFonzLXmHBx6JZZdm4Xq-Bq2rTSe08QjOGhd5Xa00FlX2c8-SjYfx3p2wtbBjm2-wsgCqLNCc8m_42VRXpukcpuliZr8dRlrqBU7hUfPHpe-xbn6rsmYPhiS9c9Lau3VK83h2uaj6A6nwq1E2qbG23F9eboZrpjvrSg431ZlPE-jRVy9vNX6n7eIiSLruFwlNwyKnOSuTelzYz__m5mdILaEVTjwjidgI2e-ctdR-4jQWA\",\n \"expiresIn\": 3600,\n \"scopes\": \"inventory\",\n \"tokenType\": \"Bearer\"\n}" + } + }, + "400" : { + "description" : "This status code indicates that access token cannot be generated due to the reason specified in the response" + }, + "401" : { + "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." + } + } + } + }, + "/security/getJsonWebToken" : { + "post" : { + "description" : "This method can be used to generate JWT with the given claims for the identified application. API Gateway will first try to identify the application based on identifiers such as API Key, OAuth token, ip address etc (as defined in the Application) and then generates a JWT token for that application with the claims (custom) submitted in the request. This method is different from /jwt/getJsonWebToken service. With /pub/apigateway/jwt/getJsonWebToken, API Gateway generates JWT token for the authenticated user with default claims", + "operationId" : "getJsonWebToken-New", + "consumes" : [ "application/json" ], + "produces" : [ "application/json" ], + "parameters" : [ { + "in" : "body", + "name" : "body", + "description" : "This parameter describes the request payload of an application that is to be created in API Gateway.", + "required" : true, + "schema" : { + "$ref" : "#/definitions/JWTServiceInput" + }, + "x-examples" : { + "application/json" : "{\n\t\"claimsSet\": {\n\t\t\"first_name\": \"Bob\",\n\t\t\"isAdmin\": true\n\t}\n}" + } + } ], + "responses" : { + "200" : { + "description" : "This status code indicates that a JWT has been successfully created.", + "schema" : { + "$ref" : "#/definitions/JWTServiceOutput" + }, + "examples" : { + "application/json" : "{\n \"expiresIn\": 600,\n \"tokenType\": \"Bearer\",\n \"accessToken\": \"eyJraWQiOiJzc29zIiwiYWxnIjoiUlMyNTYifQ.eyJzdWIiOiI4MDNiN2YxNi00NWM2LTRiMWMtYmUyNi00ZGEwNTNkNDA2NDAiLCJhdWQiOiJzd2FnZ2VyLWRvYy1hcHAiLCJpc3MiOiJ0ZXN0LWdhdGV3YXktaXNzdWVyIiwiaXNBZG1pbiI6dHJ1ZSwiZXhwIjoxNTQzOTkyMDQ1LCJmaXJzdF9uYW1lIjoiQm9iIiwiaWF0IjoxNTQzOTkxNDQ1fQ.FfV4XxEbsrCgpJCZ1GOLbnRYilvCkFfsLMcm00Xxt4ujNcNY7j-_dUjQSxgn7B1njnQ3obEVe-5UkgYBT8cnnrrJtEjjjfSiY40VECrdqm1QopCx04I71hz2qWhxKphSgk6KkZVioyqme0U5LO9JAu-kw1s1IBPmRWa3iBobWAbugnw8tz5J6T3LiwWVj32dvVtJmc9boq3fkndHmRTcQuk9V6uwArUXxU78v5P92SVjZOyQRGex46FOGqPjNauCkAOno8a3oA5qjIGeFJcQ6eOddFdPc1iZ6SwCCBpAbR_qF1LbPHtG0EXE8buI_rTS2zJBn2_d9cjFkLvL3HBYxQ\"\n}" + } + }, + "400" : { + "description" : "This status code indicates that jwt cannot be generated due to the reason specified in the response" + }, + "401" : { + "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." + } + } + } + } + }, + "securityDefinitions" : { + "Basic" : { + "description" : "API Gateway Administrator", + "type" : "basic" + } + }, + "definitions" : { + "ServiceInput" : { + "type" : "object", + "properties" : { + "gatewayScopes" : { + "type" : "array", + "description" : "array of gateway scopes", + "items" : { + "type" : "string" + } + }, + "idToken" : { + "type" : "string", + "description" : "id token" + }, + "expiry" : { + "type" : "integer", + "format" : "int64", + "description" : "preferred expiry of the access token" + } + } + }, + "ServiceOutput" : { + "type" : "object", + "properties" : { + "accessToken" : { + "type" : "string", + "description" : "generated access token" + }, + "expiresIn" : { + "type" : "integer", + "format" : "int64", + "description" : "token expiry" + }, + "scopes" : { + "type" : "string", + "description" : "scopes for which the access token is issued" + }, + "tokenType" : { + "type" : "string" + } + } + }, + "JWTServiceInput" : { + "type" : "object", + "properties" : { + "claimsSet" : { + "type" : "object", + "description" : "key value pairs in the form of json map", + "additionalProperties" : { + "type" : "object" + } + } + } + }, + "JWTServiceOutput" : { + "type" : "object", + "properties" : { + "expiresIn" : { + "type" : "integer", + "format" : "int64", + "description" : "token expiry" + }, + "tokenType" : { + "type" : "string", + "description" : "type of this token" + }, + "accessToken" : { + "type" : "string" + } + } + } + } +} \ No newline at end of file diff --git a/apigatewayservices/APIGatewayPolicyManagement.json b/apigatewayservices/APIGatewayPolicyManagement.json new file mode 100644 index 0000000..af84dce --- /dev/null +++ b/apigatewayservices/APIGatewayPolicyManagement.json @@ -0,0 +1,2854 @@ +{ + "swagger" : "2.0", + "info" : { + "description" : "Policies are the set of rules that gets enforced on the APIs (or even at finer levels like operations/methods) for every invocation of the API. In API Gateway, a policy is made up of a set of policy actions. During an invocation of an API, API Gateway executes every policy action in the policy in a sequential manner. Policy action defines the rule along with its parameters that is applied on the resources/operation of an API. Every policy action will belong to either one or more policy stages. A policy stage is a logical grouping of the policy actions. A policy is divided into different stages that depict the execution order of the policy actions. A stage might contain one or more policy action. \n\nUse this method to get a list of all the policy stages\n\nThe policies can be categorized into Service level policies, Scope level policies, Package level policies, Policy Templates and Global policies. \n\nA service level policy is applicable for all resources/operation inside that API. \n\nA scope level policy is applicable for all resources/operation inside that scope. It will override or add the runtime enforcements based on the enforcement type. \n\nA Global Policy is applicable to all APIs matching the scope defined inside the policy. Global policy will take precedence over scope and service level policy. \n\nPackage level policies are created as part of the creation of packages and plans. A package level policy will be applied over global, scope and service level policies. \n\nIf one needs to apply the same set of policy actions to different APIs with just changes to the policy parameter values, then he/she can create a Policy template and can be apply it to the APIs whenever needed. While applying policy template on APIs user need to clone policy template and attach to the corresponding API. It will avoid recreating the policies. \n\n Any user with the 'Manage APIs' functional privilege can manage the service level polices. In order to manage Global policies, Threat protection policies etc, users need additional functional privileges. By default, the users who are part of API-Gateway-Administrators group will have all privileges.\n\nThis swagger doc also contains API Definition for managing Denied IP addresses. Only Administrator can invoke the API methods. Denied IPs are the IPs that violated the threat protection rules configured. Using this API you can retrieve the list of IPs denied and you can exclude the IPs from the list of denied IPs using the delete HTTP method. \n\n API Gateway uses WS-Security to protect the SOAP services at the message level. By default, API Gateway supports a number of security policies for the SOAP services like WSS UserName, SAML, Kerberos, Encryption etc. In addition to this, API Gateway also provides an extension using custom policy assertions that allows the API providers to extend and provide additional security policies which are not supported by API Gateway. In WS Security, Policy assertions can be used in defining individual security requirements or constraints. These individual policy assertions can be combined to create security policies that can be used to secure messages exchanged between a Web service and a client. ", + "version" : "10.3", + "title" : "API Gateway Policy Management Service" + }, + "host" : "localhost:5555", + "basePath" : "/rest/apigateway", + "schemes" : [ "http" ], + "consumes" : [ "application/json" ], + "produces" : [ "application/json" ], + "paths" : { + "/serviceResultCache/{apiId}" : { + "get" : { + "description" : "This REST Request is used to get the Service Result cache size for the API using apiID. An alternative REST API call for /serviceResultCache. Instead of specifying name and version, if you know API id you can directly use that id to get the number of cached responses for that API", + "operationId" : "getCacheDetailsByapiId", + "consumes" : [ "application/json" ], + "produces" : [ "application/json" ], + "parameters" : [ { + "name" : "apiId", + "in" : "path", + "description" : "The id of API for which the cached response size is requested", + "required" : true, + "type" : "string", + "x-example" : "732c4526-db9a-4ef9-9782-edda1a6aa9bc" + } ], + "responses" : { + "200" : { + "description" : "This status code indicates that the request for Service Result Cache size is successfully returned. The response will have number of cache elements (A cached element is nothing but a single response) for the given API id, so it infers that the number of responses are actually cached for this API ", + "examples" : { + "application/json" : "{\r\n\t\"Cache size\": 2\r\n}" + } + }, + "401" : { + "description" : "This status code indicates that the user did not provide any user credential or user does not have API Gateway Administrator access" + }, + "500" : { + "description" : "This status code indicates that the server has encountered an error while fetching the Service Result Cache for the API" + } + }, + "security" : [ { + "Basic" : [ ] + } ] + }, + "delete" : { + "description" : "This REST Request is used to request for deletion of Service Result Cache for the API using api id", + "operationId" : "deleteCacheDetailsbyAPIId", + "consumes" : [ "application/json" ], + "produces" : [ "application/json" ], + "parameters" : [ { + "name" : "apiId", + "in" : "path", + "description" : "The id of API for which the Service Result Cache deletion is requested", + "required" : true, + "type" : "string", + "x-example" : "732c4526-db9a-4ef9-9782-edda1a6aa9bc" + } ], + "responses" : { + "204" : { + "description" : "This status code indicates that Service Result Cache has been deleted for the API and no data is returned in response " + }, + "401" : { + "description" : "This status code indicates that the user did not provide any user credential or user does not have API Gateway Administrator or API Gateway provider access to delete the Service Result cache of the specified API." + }, + "500" : { + "description" : "This status code indicates that the server has encountered an error while deleting the Service Result Cache for the API" + } + }, + "security" : [ { + "Basic" : [ ] + } ] + } + }, + "/serviceResultCache" : { + "get" : { + "description" : "You can enable API caching in API Gateway to cache your native service's response. With caching, you can reduce the number of calls made to your endpoint and also improve the latency of the requests to your API. When you enable caching for a stage, API Gateway caches responses from your endpoint for a specified time to live period. API Gateway then responds to the request by looking up the endpoint response from the cache instead of making a request to your endpoint. \n\nService Result cache can be configured for a API or Resource/method or Operation. \n\nThis REST Request is used to get the Service Result cache size for an API using apiName and apiVersion.", + "operationId" : "getCacheDetailsByapiNameAndVersion", + "consumes" : [ "application/json" ], + "produces" : [ "application/json" ], + "parameters" : [ { + "name" : "apiName", + "in" : "query", + "description" : "This query parameter is used to specify the API name for which the service result cache element size needs to be fetched.", + "required" : true, + "type" : "string", + "x-example" : "apiName=WIKI-SearchData" + }, { + "name" : "apiVersion", + "in" : "query", + "description" : "The version of the apiName parameter specified", + "required" : true, + "type" : "string", + "x-example" : "apiVersion=1.0" + } ], + "responses" : { + "200" : { + "description" : "This status code indicates that the request for Service Result Cache size has been successfully returned. The response will have number of cache elements (A cached element is nothing but a single response) for the given API name and version, so it infers that the number of responses are actually cached for this API", + "examples" : { + "application/json" : "{\r\n\t\"Cache size\": 2\r\n}" + } + }, + "401" : { + "description" : "This status code indicates that the user did not provide any user credential or user does not have API Gateway Administrator access." + }, + "500" : { + "description" : "This status code indicates that the server has encountered an error while fetching the Service Result cache for the API" + } + }, + "security" : [ { + "Basic" : [ ] + } ] + }, + "delete" : { + "description" : "This REST Request is used to request for deletion of Service Result cache for the API using apiName and apiVersion", + "operationId" : "deleteCacheDetailsByapiNameAndVersion", + "consumes" : [ "application/json" ], + "produces" : [ "application/json" ], + "parameters" : [ { + "name" : "apiName", + "in" : "query", + "description" : "This query parameter is used to specify the API name for which the service result cache deletion is requsted.", + "required" : true, + "type" : "string", + "x-example" : "apiName=WIKI-SearchData" + }, { + "name" : "apiVersion", + "in" : "query", + "description" : "The version of the apiName parameter specified", + "required" : true, + "type" : "string", + "x-example" : "apiVersion=1.0" + } ], + "responses" : { + "204" : { + "description" : "This status code indicates that Service Result Cache has been deleted for the specified API and no data is returned in response" + }, + "401" : { + "description" : "This status code indicates that the user did not provide any user credential or user does not have API Gateway Administrator or API Gateway provider access to delete the Service Result Cache of the specified API." + }, + "500" : { + "description" : "This status code indicates that the server has encountered an error while deleting the Service Result cache for the API" + } + }, + "security" : [ { + "Basic" : [ ] + } ] + } + }, + "/policyActions/{policyActionId}" : { + "get" : { + "description" : "This request will return policy action details of the policy action based on the id specified in path", + "operationId" : "getPolicyAction", + "consumes" : [ "application/json" ], + "produces" : [ "application/json" ], + "parameters" : [ { + "name" : "policyActionId", + "in" : "path", + "description" : "This path parameter is used to specify the policy action id which policy action details needs to retrieved.", + "required" : true, + "type" : "string", + "x-example" : "685e99ee-0e1b-4afa-8ff3-4322cf296566" + } ], + "responses" : { + "200" : { + "description" : "The details of policy action will be available in response body", + "schema" : { + "$ref" : "#/definitions/PolicyAction" + }, + "examples" : { + "application/json" : "{\r\n \"policyAction\": {\r\n \"id\": \"685e99ee-0e1b-4afa-8ff3-4322cf296566\",\r\n \"names\": [\r\n {\r\n \"value\": \"Require HTTP / HTTPS\",\r\n \"locale\": \"en\"\r\n }\r\n ],\r\n \"templateKey\": \"entryProtocolPolicy\",\r\n \"parameters\": [\r\n {\r\n \"templateKey\": \"protocol\",\r\n \"values\": [\r\n \"http\"\r\n ]\r\n },\r\n {\r\n \"templateKey\": \"soapVersion\",\r\n \"values\": [\r\n \"soap\"\r\n ]\r\n }\r\n ],\r\n \"active\": false\r\n }\r\n}" + } + }, + "404" : { + "description" : "This status code indicates that the policy action specified does not exists", + "examples" : { + "application/json" : "{\r\n \"errorDetails\": \" Unable to find the resource: 685e99ee-0e1b-4afa-8ff3-4322cf2965661\"\r\n}" + } + }, + "401" : { + "description" : "This status code indicates that the user did not provide any user credential or user does not have API Gateway Administrator or API Gateway provider access to get the details of a policy action." + } + }, + "security" : [ { + "Basic" : [ ] + } ] + }, + "put" : { + "description" : "This put request is used to update policy action based on the policy action id which is specified in path", + "operationId" : "updatePolicyAction", + "consumes" : [ "application/json" ], + "produces" : [ "application/json" ], + "parameters" : [ { + "name" : "policyActionId", + "in" : "path", + "description" : "This path parameter is used to specify the policy action id which needs to be updated.", + "required" : true, + "type" : "string", + "x-example" : "685e99ee-0e1b-4afa-8ff3-4322cf296566" + }, { + "in" : "body", + "name" : "body", + "description" : "Contains the policy action details which needs to be updated.", + "required" : true, + "schema" : { + "$ref" : "#/definitions/PolicyAction" + }, + "x-examples" : { + "application/json" : "{\r\n \"policyAction\": {\r\n \"id\": \"685e99ee-0e1b-4afa-8ff3-4322cf296566\",\r\n \"names\": [\r\n {\r\n \"value\": \"Require HTTP / HTTPS\",\r\n \"locale\": \"en\"\r\n }\r\n ],\r\n \"templateKey\": \"entryProtocolPolicy\",\r\n \"parameters\": [\r\n {\r\n \"templateKey\": \"protocol\",\r\n \"values\": [\r\n \"http\"\r\n ]\r\n },\r\n {\r\n \"templateKey\": \"soapVersion\",\r\n \"values\": [\r\n \"soap\"\r\n ]\r\n }\r\n ],\r\n \"active\": false\r\n }\r\n}" + } + } ], + "responses" : { + "200" : { + "description" : "This status code indicates that API Gateway has successfully updated the specified policy action and the updated policy action details can be found in the response body", + "schema" : { + "$ref" : "#/definitions/PolicyAction" + }, + "examples" : { + "application/json" : "{\r\n \"policyAction\": {\r\n \"id\": \"685e99ee-0e1b-4afa-8ff3-4322cf296566\",\r\n \"names\": [\r\n {\r\n \"value\": \"Require HTTP / HTTPS\",\r\n \"locale\": \"en\"\r\n }\r\n ],\r\n \"templateKey\": \"entryProtocolPolicy\",\r\n \"parameters\": [\r\n {\r\n \"templateKey\": \"protocol\",\r\n \"values\": [\r\n \"http\"\r\n ]\r\n },\r\n {\r\n \"templateKey\": \"soapVersion\",\r\n \"values\": [\r\n \"soap\"\r\n ]\r\n }\r\n ],\r\n \"active\": false\r\n }\r\n}" + } + }, + "500" : { + "description" : "This status code indicates the processing error occurred during the update of policy action and the corresponding details can be seen in the response body", + "examples" : { + "application/json" : "{\r\n \"errorDetails\": \" Unable to process the PUT request for APIs. An error occurred while processing the payload. Error message:\\n Unable to find the resource: 685e99ee-0e1b-4afa-8ff3-4322cf2965661\"\r\n}" + } + }, + "401" : { + "description" : "This status code indicates that the user did not provide any user credential or user does not have API Gateway Administrator or API Gateway provider access to update the policy action." + }, + "400" : { + "description" : "Tis status code indicates the request payload is not correct and corresponding error details can be seen in the response body", + "examples" : { + "application/json" : "{\r\n \"errorDetails\": \" Unable to process the PUT request for APIs. An error occurred while processing the payload. Error message:\\n Unable to create the resource. Error in processing the payload null. Error Message . Check the correctness of key and payload.\"\r\n}" + } + } + }, + "security" : [ { + "Basic" : [ ] + } ] + }, + "delete" : { + "description" : "This delete request will delete the policy action based on the policy action id which is specified in path", + "operationId" : "deletePolicyAction", + "consumes" : [ "application/json" ], + "produces" : [ "application/json" ], + "parameters" : [ { + "name" : "policyActionId", + "in" : "path", + "description" : "Policy Action ID", + "required" : true, + "type" : "string", + "x-example" : "685e99ee-0e1b-4afa-8ff3-4322cf296566" + } ], + "responses" : { + "401" : { + "description" : "This status code indicates that the user did not provide any user credential or user does not have API Gateway Administrator or API Gateway provider access to delete the policy action." + }, + "204" : { + "description" : "This status code indicates that the specified policy action successfully deleted" + }, + "404" : { + "description" : "This status code indicates that the corresponding policy action id does not exist", + "examples" : { + "application/json" : "{\r\n \"errorDetails\": \" Unable to find the resource: 685e99ee-0e1b-4afa-8ff3-4322cf2965661\"\r\n}" + } + } + }, + "security" : [ { + "Basic" : [ ] + } ] + } + }, + "/policyActions" : { + "get" : { + "description" : "This request will return all the policy actions from API Gateway", + "operationId" : "getAllPolicyActions", + "consumes" : [ "application/json" ], + "produces" : [ "application/json" ], + "parameters" : [ { + "name" : "policyActionIds", + "in" : "query", + "description" : "This is a query parameter. Provide comma separated Policy Action ids to get the policy action details for specified policy action ids", + "required" : false, + "type" : "string", + "x-example" : "685e99ee-0e1b-4afa-8ff3-4322cf296566,78c0f92e-c85d-44c2-b7d5-e7a11fda8a57" + } ], + "responses" : { + "200" : { + "description" : "The list of policy actions will be available in the response body. The list can be all or specific set of policy action ids specified in query string. If any of the policy action id specified in query parameter is not available then it will omit that id and fetch result for other valid ids", + "schema" : { + "type" : "array", + "items" : { + "$ref" : "#/definitions/PolicyAction" + } + }, + "examples" : { + "application/json" : "{\r\n \"policyAction\": [\r\n {\r\n \"id\": \"50c705f0-28d9-4a1a-a20b-6c84a0f4a837\",\r\n \"names\": [\r\n {\r\n \"value\": \"Straight Through Routing\",\r\n \"locale\": \"en\"\r\n }\r\n ],\r\n \"descriptions\": [\r\n {\r\n \"value\": \"\",\r\n \"locale\": \"English\"\r\n }\r\n ],\r\n \"templateKey\": \"straightThroughRouting\",\r\n \"parameters\": [\r\n {\r\n \"templateKey\": \"endpointUri\",\r\n \"values\": [\r\n \"http://localhost:8080/employee_service/${sys:resource_path}\"\r\n ]\r\n }\r\n ],\r\n \"active\": false\r\n },\r\n {\r\n \"id\": \"09219ca1-9bd7-4d62-8baf-167d29e3390e\",\r\n \"names\": [\r\n {\r\n \"value\": \"Require HTTP / HTTPS\",\r\n \"locale\": \"en\"\r\n }\r\n ],\r\n \"descriptions\": [\r\n {\r\n \"value\": \"\",\r\n \"locale\": \"English\"\r\n }\r\n ],\r\n \"templateKey\": \"entryProtocolPolicy\",\r\n \"parameters\": [\r\n {\r\n \"templateKey\": \"protocol\",\r\n \"values\": [\r\n \"http\"\r\n ]\r\n }\r\n ],\r\n \"active\": false\r\n }\r\n ]\r\n}" + } + }, + "401" : { + "description" : "This status code indicates shows either user didn't provide any user credential or user doesn't have API Gateway Administrator or API Gateway provider access to get the policy actions." + } + }, + "security" : [ { + "Basic" : [ ] + } ] + }, + "post" : { + "description" : "This REST request is used to create policy action. The result of this request is a policy action payload and is available in the response. To know about the policy action template and to create it you can use the policyActionTemplates/{templateKey} to get the template structure of a policy action. The template key will be available in policyStage resource.", + "operationId" : "createPolicyAction", + "consumes" : [ "application/json" ], + "produces" : [ "application/json" ], + "parameters" : [ { + "in" : "body", + "name" : "body", + "description" : "Contains the policy action details of the newly created policy action", + "required" : true, + "schema" : { + "$ref" : "#/definitions/PolicyAction" + }, + "x-examples" : { + "application/json" : "{\r\n \"policyAction\": {\r\n \"templateKey\": \"entryProtocolPolicy\",\r\n \"parameters\": [\r\n {\r\n \"templateKey\": \"protocol\",\r\n \"values\": [\r\n \"http\"\r\n ] \r\n },\r\n\t{\r\n\t\t\"templateKey\": \"soapVersion\",\r\n\t\t\"values\": [\r\n\t\t\"soap\"\r\n\t\t]\r\n\t}\r\n ]\r\n }\r\n}" + } + } ], + "responses" : { + "201" : { + "description" : "This status code indicates that the policy action is created successfully and the created policy action can be seen in the response body", + "schema" : { + "$ref" : "#/definitions/PolicyAction" + }, + "examples" : { + "application/json" : "{\r\n \"policyAction\": {\r\n \"id\": \"685e99ee-0e1b-4afa-8ff3-4322cf296566\",\r\n \"names\": [\r\n {\r\n \"value\": \"Require HTTP / HTTPS\",\r\n \"locale\": \"en\"\r\n }\r\n ],\r\n \"templateKey\": \"entryProtocolPolicy\",\r\n \"parameters\": [\r\n {\r\n \"templateKey\": \"protocol\",\r\n \"values\": [\r\n \"http\"\r\n ]\r\n },\r\n {\r\n \"templateKey\": \"soapVersion\",\r\n \"values\": [\r\n \"soap\"\r\n ]\r\n }\r\n ],\r\n \"active\": false\r\n }\r\n}" + } + }, + "400" : { + "description" : "This status code indicates that the request payload is not correct and corresponding error details can be seen in the response body", + "examples" : { + "application/json" : "{\r\n \"errorDetails\": \" Unable to create the resource. Error in processing the payload null. Error Message . Check the correctness of key and payload.\"\r\n}" + } + }, + "401" : { + "description" : "This status code indicates that the user did not provide any user credential or user does not have API Gateway Administrator or API Gateway provider access to create policy actions." + } + }, + "security" : [ { + "Basic" : [ ] + } ] + } + }, + "/configurations/mobileApp" : { + "get" : { + "description" : "You can use API Gateway to disable access for certain mobile application versions on a predefined set of mobile platforms. By registering the required devices and applications and disabling access to these versions, you ensure that all users use the latest versions of the applications and take advantage of the latest security and functional updates.", + "operationId" : "getMobileApplicationConfigurations", + "consumes" : [ "application/json" ], + "produces" : [ "application/json" ], + "parameters" : [ ], + "responses" : { + "200" : { + "description" : "This status code indicates that the Mobile Applications configurations are retrieved successfully. ", + "schema" : { + "$ref" : "#/definitions/MobileApplicationConfiguration" + }, + "examples" : { + "application/json" : "{\r\n \"mobileApplications\": [\r\n \"MyApp\",\r\n \"HelloApplication\"\r\n ],\r\n \"mobileAppDeviceTypes\": [\r\n \"Android\",\r\n \"ios\"\r\n ]\r\n}" + } + }, + "400" : { + "description" : "This status code indicates that the mobileApp not mentioned in API access uri path.", + "examples" : { + "application/json" : "{\r\n \"errorDetails\": \"Missing mandatory field configId in request.\"\r\n}" + } + }, + "401" : { + "description" : "This status code indicates that the user is not a valid API Gateway user for retrieving the Mobile Applications configuration." + } + }, + "security" : [ { + "Basic" : [ ] + } ] + }, + "put" : { + "description" : "The method is used to update the details of the Mobile Applications configuration in API Gateway.You can use API Gateway to disable access for certain mobile application versions on a predefined set of mobile platforms. By registering the required devices and applications and disabling access to these versions, you ensure that all users use the latest versions of the applications and take advantage of the latest security and functional updates.", + "operationId" : "saveMobileApplicationConfigurations", + "consumes" : [ "application/json" ], + "produces" : [ "application/json" ], + "parameters" : [ { + "in" : "body", + "name" : "body", + "description" : "", + "required" : true, + "schema" : { + "$ref" : "#/definitions/MobileApplicationConfiguration" + }, + "x-examples" : { + "application/json" : "{\r\n \"mobileApplications\": [\r\n \"MyApp\",\r\n \"HelloApplication\"\r\n ],\r\n \"mobileAppDeviceTypes\": [\r\n \"Android\",\r\n \"ios\"\r\n ]\r\n}" + } + } ], + "responses" : { + "200" : { + "description" : "This status code indicates that the Mobile Applications configuration has been successfully updated in API Gateway, and the updated configuration is available in the response body.", + "schema" : { + "$ref" : "#/definitions/MobileApplicationConfiguration" + }, + "examples" : { + "application/json" : "{\r\n \"mobileApplications\": [\r\n \"MyApp\",\r\n \"HelloApplication\"\r\n ],\r\n \"mobileAppDeviceTypes\": [\r\n \"Android\",\r\n \"ios\"\r\n ]\r\n}" + } + }, + "401" : { + "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have \"Manage Threat Protection\" functional privilege to access this API." + }, + "405" : { + "description" : "This status code indicates that the specified HTTP method is not allowed for the requested Mobile Applications in API Gateway.", + "examples" : { + "application/json" : "{\r\n\t\"errorDetails\": \" Unable to process the PUT request for Mobile Applications configuration. Error occurred while processing the payload. Error Message: Method: PUT is not allowed on resource: loadBalancer\"\r\n}" + } + }, + "400" : { + "description" : "This status code indicates that the request body is invalid.", + "examples" : { + "application/json" : "{\r\n\"errorDetails\": \" Invalid property key found in request payload.\"\r\n}" + } + } + }, + "security" : [ { + "Basic" : [ ] + } ] + } + }, + "/assertions/{assertionId}" : { + "get" : { + "description" : "This request will return assertion element", + "operationId" : "getAssertion", + "produces" : [ "application/json" ], + "parameters" : [ { + "name" : "assertionId", + "in" : "path", + "description" : "This path parameter is used to specify the assertion id which assertion details needs to retrieved.", + "required" : true, + "type" : "string", + "x-example" : "353bd366-47d4-4703-aecf-9cb40cdcc864" + } ], + "responses" : { + "200" : { + "description" : "Details of the assertion will be available in response body", + "schema" : { + "$ref" : "#/definitions/AssertionConfiguration" + }, + "examples" : { + "application/json" : "{\r\n \"assertionConfiguration\": {\r\n \"configurationId\": \"be463644-25a6-42af-840d-0b2d43be41ec\",\r\n \"configurationName\": \"CustomBindingAssertion1\",\r\n \"configurationElement\": \"\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\t\\t\\t\\n\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\t\\t\\t\\n\\t\\t\\t\\t\\n\\t\\t\\t\\n \\n\\t\\t \\n \\n \",\r\n \"assertionType\": \"bindingAssertion\"\r\n }\r\n}" + } + }, + "404" : { + "description" : "This status code indicates that the assertion id specified is not found in API Gateway", + "examples" : { + "application/json" : "{\r\n \"errorDetails\": \" Unable to find the resource: 732c4526-db9a-4ef9-9782-edda1a6aa9bc1\"\r\n}" + } + }, + "401" : { + "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." + } + }, + "security" : [ { + "Basic" : [ ] + } ] + }, + "put" : { + "description" : "This REST service is used to update the assertion", + "operationId" : "updateAssertion", + "consumes" : [ "application/json" ], + "produces" : [ "application/json" ], + "parameters" : [ { + "name" : "assertionId", + "in" : "path", + "description" : "This path parameter is used to specify the assertion id which assertion details needs to updated.", + "required" : true, + "type" : "string", + "x-example" : "353bd366-47d4-4703-aecf-9cb40cdcc864" + }, { + "in" : "body", + "name" : "body", + "description" : "assertion request payload", + "required" : true, + "schema" : { + "$ref" : "#/definitions/AssertionConfiguration" + }, + "x-examples" : { + "application/json" : "{\r\n \"assertionConfiguration\": {\r\n \"configurationId\": \"be463644-25a6-42af-840d-0b2d43be41ec\",\r\n \"configurationName\": \"CustomBindingAssertion1\",\r\n \"configurationElement\": \"\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\t\\t\\t\\n\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\t\\t\\t\\n\\t\\t\\t\\t\\n\\t\\t\\t\\n \\n\\t\\t \\n \\n \",\r\n \"assertionType\": \"bindingAssertion\"\r\n }\r\n}" + } + } ], + "responses" : { + "200" : { + "description" : "This status code indicates that API Gateway has successfully updated the specified assertion and the updated assertion details can be found in the response body", + "schema" : { + "$ref" : "#/definitions/AssertionConfiguration" + }, + "examples" : { + "application/json" : "{\r\n \"assertionConfiguration\": {\r\n \"configurationId\": \"0882293d-e773-4242-8bf5-c22e693f8413\",\r\n \"configurationName\": \"token_04\",\r\n \"configurationElement\": \"\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\t\\t\\t\\r\\n\\t\\t\\t\\t\\r\\n\\t\\t\\t\\t\\t\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\t\\t\\t\\r\\n\\t\\t\\t\\t\\r\\n\\t\\t\\t\\r\\n \\r\\n\\t\\t \\r\\n \\r\\n \"\r\n }\r\n}" + } + }, + "400" : { + "description" : "Tis status code indicates the request payload is not correct and corresponding error details can be seen in the response body", + "examples" : { + "application/json" : "{\r\n \"errorDetails\": \" Unable to process the PUT request for APIs. An error occurred while processing the payload. Error message:\\n Unable to create the resource. Error in processing the payload null. Error Message . Check the correctness of payload.\"\r\n}" + } + }, + "404" : { + "description" : "This status code indicates that the assertion id specified is not found in API Gateway", + "examples" : { + "application/json" : "{\r\n \"errorDetails\": \" Unable to find the resource: 732c4526-db9a-4ef9-9782-edda1a6aa9bc1\"\r\n}" + } + }, + "401" : { + "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." + } + }, + "security" : [ { + "Basic" : [ ] + } ] + }, + "delete" : { + "description" : "This delete request will delete the assertion based on the assertion id which is specified in path", + "operationId" : "deleteAssertion", + "parameters" : [ { + "name" : "assertionId", + "in" : "path", + "description" : "This path parameter is used to specify the assertion id for which assertion needs to deleted.", + "required" : true, + "type" : "string", + "x-example" : "353bd366-47d4-4703-aecf-9cb40cdcc864" + } ], + "responses" : { + "204" : { + "description" : "This status code indicates that the specified assertion is successfully deleted" + }, + "401" : { + "description" : "This status code indicates either user didn't provide any user credential or user doesn't have API Gateway Administrator or API Gateway provider access to delete the assertion." + }, + "404" : { + "description" : "This status code indicates that the corresponding assertion id does not exist", + "examples" : { + "application/json" : "{\r\n \"errorDetails\": \" Unable to find the resource: 685e99ee-0e1b-4afa-8ff3-4322cf2965661\"\r\n}" + } + } + }, + "security" : [ { + "Basic" : [ ] + } ] + } + }, + "/assertions" : { + "get" : { + "description" : "This request will return all the assertions from API Gateway", + "operationId" : "getAllAssertions", + "produces" : [ "application/json" ], + "parameters" : [ ], + "responses" : { + "200" : { + "description" : "Retrieves a list of available assertions in API Gateway.", + "schema" : { + "$ref" : "#/definitions/AssertionConfiguration" + }, + "examples" : { + "application/json" : "{\r\n \"assertionConfigurations\": [\r\n {\r\n \"configurationId\": \"be463644-25a6-42af-840d-0b2d43be41ec\",\r\n \"configurationName\": \"CustomBindingAssertion1\",\r\n \"configurationElement\": \"\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\t\\t\\t\\n\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\t\\t\\t\\n\\t\\t\\t\\t\\n\\t\\t\\t\\n \\n\\t\\t \\n \\n \",\r\n \"assertionType\": \"bindingAssertion\"\r\n },\r\n {\r\n \"configurationId\": \"9bfbd5ea-86eb-4990-8f7a-fdfef8f16f86\",\r\n \"configurationName\": \"tokenAssertion01\",\r\n \"configurationElement\": \"\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\t\\t\\t\\r\\n\\t\\t\\t\\t\\r\\n\\t\\t\\t\\t\\t\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\t\\t\\t\\r\\n\\t\\t\\t\\t\\r\\n\\t\\t\\t\\r\\n \\r\\n\\t\\t \\r\\n \\r\\n \",\r\n \"assertionType\": \"tokenAssertion\"\r\n }\r\n ]\r\n}" + } + }, + "401" : { + "description" : "This status code indicates that authorization has been refused for this HTTP request. This is possibly because, the user has not specified the required credentials (username and password), or has specified invalid credentials, or the user is not authenticated as an API Gateway Administrator to retrieve assertions in API Gateway." + } + }, + "security" : [ { + "Basic" : [ ] + } ] + }, + "post" : { + "description" : "Custom assertions allow the API providers to extend and provide additional security policies that are not available by default in API Gateway. In WS-Security, custom assertions are used for expressing individual security requirements, constraints, or both. The individual policy assertions can be combined to create security policies that ensure secure and reliable exchanges of SOAP messages between a client and a SOAP API. This REST service is used to create a assertion. Below are the request payloads for different types of assertions.\r\nbindingAssertion: "{\r\n\t"configurationElement": "<sp:AsymmetricBinding xmlns:sp="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702">\r\n\t\t\t\t\t<wsp:Policy xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy">\r\n\t\t\t\t\t\t<sp:InitiatorToken>\r\n\t\t\t\t\t\t\t<wsp:Policy>\r\n\t\t\t\t\t\t\t\t<sp:X509Token sp:IncludeToken="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702/IncludeToken/Never">\r\n\t\t\t\t\t\t\t\t\t<wsp:Policy>\r\n\t\t\t\t\t\t\t\t\t\t<sp:WssX509V3Token10/>\r\n\t\t\t\t\t\t\t\t\t</wsp:Policy>\r\n\t\t\t\t\t\t\t\t</sp:X509Token>\r\n\t\t\t\t\t\t\t</wsp:Policy>\r\n\t\t\t\t\t\t</sp:InitiatorToken>\r\n\t\t\t\t\t\t<sp:RecipientToken>\r\n\t\t\t\t\t\t\t<wsp:Policy>\r\n\t\t\t\t\t\t\t\t<sp:X509Token sp:IncludeToken="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702/IncludeToken/Never">\r\n\t\t\t\t\t\t\t\t\t<wsp:Policy>\r\n\t\t\t\t\t\t\t\t\t\t<sp:WssX509V3Token10/>\r\n\t\t\t\t\t\t\t\t\t</wsp:Policy>\r\n\t\t\t\t\t\t\t\t</sp:X509Token>\r\n\t\t\t\t\t\t\t</wsp:Policy>\r\n\t\t\t\t\t\t</sp:RecipientToken>\r\n\t\t\t\t\t\t<sp:AlgorithmSuite>\r\n\t\t\t\t\t\t\t<wsp:Policy>\r\n\t\t\t\t\t\t\t\t<sp:Basic256 />\r\n\t\t\t\t\t\t\t</wsp:Policy>\r\n\t\t\t\t\t\t</sp:AlgorithmSuite>\r\n\t\t\t\t\t\t<sp:Layout>\r\n\t\t\t\t\t\t\t<wsp:Policy>\r\n\t\t\t\t\t\t\t\t<sp:LaxTimestampFirst/>\r\n\t\t\t\t\t\t\t</wsp:Policy>\r\n\t\t\t\t\t\t</sp:Layout>\r\n\t\t\t\t\t\t<sp:ProtectTokens/>\r\n\t\t\t\t\t</wsp:Policy>\r\n\t\t\t\t</sp:AsymmetricBinding>",\r\n\t"configurationName":"CustomBindingAssertion1",\r\n\t"assertionType":"bindingAssertion"}"\r\n\r\ntokenAssertion: "{\r\n\t"configurationElement": "<sp:SupportingTokens xmlns:sp="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702">\r\n\t\t\t\t\t<wsp:Policy xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy">\r\n\t\t\t\t\t\t<sp:UsernameToken sp:IncludeToken="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702/IncludeToken/AlwaysToRecipient"/>\r\n\t\t\t\t\t</wsp:Policy>\r\n\t\t\t\t</sp:SupportingTokens>",\r\n\t"configurationName":"UsernameToken",\r\n\t"assertionType":"tokenAssertion"}"\r\n\t\r\npolicyAssertion: "{\r\n\t"configurationElement": "<wsp:Policy wsu:Id="CustomBinding_IWSTrust13Async_policy"\r\n\t\t\txmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"\r\n\t\t\txmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy" \r\n\t\t\txmlns:wsaw="http://www.w3.org/2006/02/addressing/wsdl"\r\n\t\t\txmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">\r\n\t\t\t<wsp:ExactlyOne>\r\n\t\t\t\t<wsp:All>\r\n\t\t\t\t\t<sp:TransportBinding xmlns:sp="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702">\r\n\t\t\t\t\t\t<wsp:Policy>\r\n\t\t\t\t\t\t\t<sp:TransportToken>\r\n\t\t\t\t\t\t\t\t<wsp:Policy>\r\n\t\t\t\t\t\t\t\t\t<sp:HttpsToken/>\r\n\t\t\t\t\t\t\t\t</wsp:Policy>\r\n\t\t\t\t\t\t\t</sp:TransportToken>\r\n\t\t\t\t\t\t\t<sp:AlgorithmSuite>\r\n\t\t\t\t\t\t\t\t<wsp:Policy>\r\n\t\t\t\t\t\t\t\t\t<sp:Basic128/>\r\n\t\t\t\t\t\t\t\t</wsp:Policy>\r\n\t\t\t\t\t\t\t</sp:AlgorithmSuite>\r\n\t\t\t\t\t\t\t<sp:Layout>\r\n\t\t\t\t\t\t\t\t<wsp:Policy>\r\n\t\t\t\t\t\t\t\t\t<sp:Strict/>\r\n\t\t\t\t\t\t\t\t</wsp:Policy>\r\n\t\t\t\t\t\t\t</sp:Layout>\r\n\t\t\t\t\t\t\t<sp:IncludeTimestamp/>\r\n\t\t\t\t\t\t</wsp:Policy>\r\n\t\t\t\t\t</sp:TransportBinding>\r\n\t\t\t\t\t<sp:EndorsingSupportingTokens xmlns:sp="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702">\r\n\t\t\t\t\t\t<wsp:Policy>\r\n\t\t\t\t\t\t\t<sp:KerberosToken sp:IncludeToken="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702/IncludeToken/Once">\r\n\t\t\t\t\t\t\t\t<wsp:Policy>\r\n\t\t\t\t\t\t\t\t\t<sp:WssGssKerberosV5ApReqToken11/>\r\n\t\t\t\t\t\t\t\t</wsp:Policy>\r\n\t\t\t\t\t\t\t</sp:KerberosToken>\r\n\t\t\t\t\t\t\t<sp:KeyValueToken sp:IncludeToken="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702/IncludeToken/Never" wsp:Optional="true"/>\r\n\t\t\t\t\t\t\t<!-- \r\n\t\t\t\t\t\t\t<sp:SignedParts>\r\n\t\t\t\t\t\t\t\t<sp:Header Name="To" Namespace="http://www.w3.org/2005/08/addressing"/>\r\n\t\t\t\t\t\t\t</sp:SignedParts>\r\n\t\t\t\t\t\t\t-->\r\n\t\t\t\t\t\t</wsp:Policy>\r\n\t\t\t\t\t</sp:EndorsingSupportingTokens>\r\n\t\t\t\t\t<sp:Wss11 xmlns:sp="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702">\r\n\t\t\t\t\t\t<wsp:Policy>\r\n\t\t\t\t\t\t\t<sp:MustSupportRefKeyIdentifier/>\r\n\t\t\t\t\t\t\t<sp:MustSupportRefIssuerSerial/>\r\n\t\t\t\t\t\t\t<sp:MustSupportRefThumbprint/>\r\n\t\t\t\t\t\t\t<sp:MustSupportRefEncryptedKey/>\r\n\t\t\t\t\t\t</wsp:Policy>\r\n\t\t\t\t\t</sp:Wss11>\r\n\t\t\t\t\t<sp:Trust13 xmlns:sp="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702">\r\n\t\t\t\t\t\t<wsp:Policy>\r\n\t\t\t\t\t\t\t<sp:MustSupportIssuedTokens/>\r\n\t\t\t\t\t\t\t<sp:RequireClientEntropy/>\r\n\t\t\t\t\t\t\t<sp:RequireServerEntropy/>\r\n\t\t\t\t\t\t</wsp:Policy>\r\n\t\t\t\t\t</sp:Trust13>\r\n\t\t\t\t\t<wsaw:UsingAddressing/>\r\n\t\t\t\t</wsp:All>\r\n\t\t\t</wsp:ExactlyOne>\r\n\t\t</wsp:Policy>"\r\n\t"configurationName":"KerberosOverTransport",\r\n\t"assertionType":"policyAssertion"}"", + "operationId" : "createAssertion", + "consumes" : [ "application/json" ], + "produces" : [ "application/json" ], + "parameters" : [ { + "in" : "body", + "name" : "body", + "description" : "assertion request payload", + "required" : true, + "schema" : { + "$ref" : "#/definitions/AssertionConfiguration" + }, + "x-examples" : { + "application/json" : "{\r\n\t\"configurationElement\": \"\r\n\t\r\n\t\t\r\n\t\r\n\",\r\n\t\"configurationName\": \"UsernameToken\",\r\n\t\"assertionType\": \"tokenAssertion\"\r\n}" + } + } ], + "responses" : { + "201" : { + "description" : "Assertion successfully created in API Gateway", + "schema" : { + "$ref" : "#/definitions/AssertionConfiguration" + }, + "examples" : { + "application/json" : "{\r\n \"assertionConfiguration\": {\r\n \"configurationId\": \"0882293d-e773-4242-8bf5-c22e693f8413\",\r\n \"configurationName\": \"token_04\",\r\n \"configurationElement\": \"\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\t\\t\\t\\r\\n\\t\\t\\t\\t\\r\\n\\t\\t\\t\\t\\t\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\t\\t\\t\\r\\n\\t\\t\\t\\t\\r\\n\\t\\t\\t\\r\\n \\r\\n\\t\\t \\r\\n \\r\\n \"\r\n }\r\n}" + } + }, + "400" : { + "description" : "This status code indicates that the request payload is not correct and corresponding error details can be seen in the response body", + "examples" : { + "application/json" : "{\r\n \"errorDetails\": \" Unable to create the resource. Error in processing the payload null. Error Message . Check the correctness of payload.\"\r\n}" + } + }, + "401" : { + "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." + } + }, + "security" : [ { + "Basic" : [ ] + } ] + } + }, + "/policyStages" : { + "get" : { + "description" : "This REST Request is used to get the list of policy stages available in API gateway. It will also show the list of policies (template key of each policy) associated with each stage. ", + "operationId" : "getPolicyStages", + "consumes" : [ "application/json" ], + "produces" : [ "application/json" ], + "parameters" : [ ], + "responses" : { + "200" : { + "description" : "The response body contains list of all stages and policy associated with the stages. Also the response body contains the sequence where the policies corresponding to a stage will be executed", + "schema" : { + "type" : "array", + "items" : { + "$ref" : "#/definitions/PolicyEnforcementStage" + } + }, + "examples" : { + "application/json" : "{\r\n \"stages\": [\r\n {\r\n \"stageKey\": \"threatProtection\",\r\n \"names\": [\r\n {\r\n \"value\": \"Threat Protection\",\r\n \"locale\": \"en\"\r\n }\r\n ],\r\n \"descriptions\": [],\r\n \"policyActionTemplates\": [\r\n \"globalipdos\",\r\n \"ipdos\",\r\n \"egviolationalert\",\r\n \"MsgSizeLimitFilter\",\r\n \"OAuthFilter\",\r\n \"mobileAppProtectionFilter\",\r\n \"sqlInjectionFilter\",\r\n \"antiVirusFilter\",\r\n \"jsonThreatProtectionFilter\",\r\n \"xmlThreatProtectionFilter\",\r\n \"customFilter\"\r\n ],\r\n \"sequence\": \"insequence\"\r\n },\r\n {\r\n \"stageKey\": \"transport\",\r\n \"names\": [\r\n {\r\n \"value\": \"Transport\",\r\n \"locale\": \"en\"\r\n }\r\n ],\r\n \"descriptions\": [],\r\n \"policyActionTemplates\": [\r\n \"entryProtocolPolicy\",\r\n \"setMediaType\"\r\n ],\r\n \"sequence\": \"insequence\"\r\n },\r\n {\r\n \"stageKey\": \"IAM\",\r\n \"names\": [\r\n {\r\n \"value\": \"Identity and Access Management\",\r\n \"locale\": \"en\"\r\n }\r\n ],\r\n \"descriptions\": [],\r\n \"policyActionTemplates\": [\r\n \"inboundAuthTransport\",\r\n \"webServiceSecurityPolicy\",\r\n \"authorizeUser\",\r\n \"evaluatePolicy\"\r\n ],\r\n \"sequence\": null\r\n },\r\n {\r\n \"stageKey\": \"requestPayloadProcessing\",\r\n \"names\": [\r\n {\r\n \"value\": \"Request Payload Processing\",\r\n \"locale\": \"en\"\r\n }\r\n ],\r\n \"descriptions\": [],\r\n \"policyActionTemplates\": [\r\n \"invokeESB\",\r\n \"xsltTransformation\",\r\n \"validateSchema\"\r\n ],\r\n \"sequence\": \"insequence\"\r\n },\r\n {\r\n \"stageKey\": \"routing\",\r\n \"names\": [\r\n {\r\n \"value\": \"Routing Policies\",\r\n \"locale\": \"en\"\r\n }\r\n ],\r\n \"descriptions\": [],\r\n \"policyActionTemplates\": [\r\n \"contentBasedRouting\",\r\n \"contextBasedRouting\",\r\n \"dynamicRouting\",\r\n \"loadBalancerRouting\",\r\n \"straightThroughRouting\",\r\n \"customHttpHeaders\",\r\n \"outboundTransportAuthentication\",\r\n \"outboundMessageAuthentication\"\r\n ],\r\n \"sequence\": \"insequence\"\r\n },\r\n {\r\n \"stageKey\": \"LMT\",\r\n \"names\": [\r\n {\r\n \"value\": \"Logging, Monitoring and Traffic Optimization\",\r\n \"locale\": \"en\"\r\n }\r\n ],\r\n \"descriptions\": [],\r\n \"policyActionTemplates\": [\r\n \"logInvocation\",\r\n \"monitorServicePerformance\",\r\n \"monitorSLA\",\r\n \"throttle\",\r\n \"serviceResultCache\"\r\n ],\r\n \"sequence\": \"insequence\"\r\n },\r\n {\r\n \"stageKey\": \"responseProcessing\",\r\n \"names\": [\r\n {\r\n \"value\": \"Response Processing\",\r\n \"locale\": \"en\"\r\n }\r\n ],\r\n \"descriptions\": [],\r\n \"policyActionTemplates\": [\r\n \"invokeESB\",\r\n \"xsltTransformation\",\r\n \"validateSchema\"\r\n ],\r\n \"sequence\": \"outsequence\"\r\n },\r\n {\r\n \"stageKey\": \"responseFaultProcessing\",\r\n \"names\": [\r\n {\r\n \"value\": \"Error Handling\",\r\n \"locale\": \"en\"\r\n }\r\n ],\r\n \"descriptions\": [],\r\n \"policyActionTemplates\": [\r\n \"conditionalErrorProcessing\"\r\n ],\r\n \"sequence\": \"faultsequence\"\r\n }\r\n ]\r\n}" + } + }, + "401" : { + "description" : "This status code indicates that the user did not provide any user credential or user does not have API Gateway Administrator or API Gateway provider access to get the policy stage." + } + }, + "security" : [ { + "Basic" : [ ] + } ] + } + }, + "/policies" : { + "get" : { + "description" : "This REST request is used to retrieve list of all policies from API Gateway. This can also be used to retrieve details for particular set of policies by specifying the policy ids in the query string.", + "operationId" : "getPolicies", + "consumes" : [ "application/json" ], + "produces" : [ "application/json" ], + "parameters" : [ { + "name" : "policyIds", + "in" : "query", + "description" : "This query parameter is used to retrieve policy details of particular set of policies. The policy IDs need to be separated using ',' to specify more than one policy id", + "required" : false, + "type" : "string", + "x-example" : "policyIds=1807d561-e0a1-4d06-bfbf-49bff4c5dfae,d7672248-7d25-444e-a9b6-853e1d95d1c6" + }, { + "name" : "stage", + "in" : "query", + "description" : "This query parameter is used to retrieve the Threat Protection policies created in API Gateway. The value of this query parameter should be threat protection, if other values specified it wont respect that value and return all the policies in the API Gateway", + "required" : false, + "type" : "string", + "x-example" : "stage=threatprotection", + "enum" : [ "threatprotection" ] + }, { + "name" : "policyType", + "in" : "query", + "description" : "This query parameter is used to retrieve policy details for a list of policies of a particular policy type. The policy type can be template or global. If the policy type is template then policy details of all the policy templates is returned. If the policy type is global then the policy details of global policies is returned.If any other policy type is specified all policies are returned", + "required" : false, + "type" : "string", + "x-example" : "policyType=global", + "enum" : [ "template", "global" ] + } ], + "responses" : { + "200" : { + "description" : "This status code indicates that the policy details are available and policy details of the policies will be sent as response. This example shows the policy details of list of global policies.", + "schema" : { + "type" : "array", + "items" : { + "$ref" : "#/definitions/Policy" + } + }, + "examples" : { + "application/json" : "{\r\n \"policy\": [\r\n {\r\n \"id\": \"732c4526-db9a-4ef9-9782-edda1a6aa9bc\",\r\n \"names\": [\r\n {\r\n \"value\": \"a\",\r\n \"locale\": \"English\"\r\n }\r\n ],\r\n \"descriptions\": [\r\n {\r\n \"value\": \"\",\r\n \"locale\": \"English\"\r\n }\r\n ],\r\n \"scope\": {\r\n \"applicableAPITypes\": [\r\n \"REST\",\r\n \"SOAP\"\r\n ],\r\n \"result\": {},\r\n \"scopeConditions\": [],\r\n \"logicalConnector\": \"AND\"\r\n },\r\n \"policyEnforcements\": [\r\n {\r\n \"enforcements\": [\r\n {\r\n \"enforcementObjectId\": \"2e63b365-5fb8-4c8c-b2b3-404045b583f7\",\r\n \"order\": null\r\n }\r\n ],\r\n \"stageKey\": \"IAM\"\r\n }\r\n ],\r\n \"policyScope\": \"GLOBAL\",\r\n \"global\": true,\r\n \"active\": true,\r\n \"systemPolicy\": false\r\n },\r\n {\r\n \"id\": \"7f009e40-dcbb-4dfc-b653-2e33ecf7f608\",\r\n \"names\": [\r\n {\r\n \"value\": \"b\",\r\n \"locale\": \"English\"\r\n }\r\n ],\r\n \"descriptions\": [\r\n {\r\n \"value\": \"\",\r\n \"locale\": \"English\"\r\n }\r\n ],\r\n \"scope\": {\r\n \"applicableAPITypes\": [\r\n \"REST\",\r\n \"SOAP\"\r\n ],\r\n \"scopeConditions\": [],\r\n \"logicalConnector\": \"AND\"\r\n },\r\n \"policyEnforcements\": [\r\n {\r\n \"enforcements\": [\r\n {\r\n \"enforcementObjectId\": \"121a6048-08bd-4aeb-8a07-a6d1aeae2710\",\r\n \"order\": null\r\n }\r\n ],\r\n \"stageKey\": \"IAM\"\r\n }\r\n ],\r\n \"policyScope\": \"GLOBAL\",\r\n \"global\": true,\r\n \"active\": false,\r\n \"systemPolicy\": false\r\n },\r\n {\r\n \"id\": \"GlobalLogInvocationPolicy\",\r\n \"names\": [\r\n {\r\n \"value\": \"Transaction logging\",\r\n \"locale\": \"English\"\r\n }\r\n ],\r\n \"descriptions\": [\r\n {\r\n \"value\": \"This is a system policy, which has log invocation policy and filters associated to log request or response payloads to a specified destination. These transactions are monitored and logged across all APIs in API Gateway\",\r\n \"locale\": \"English\"\r\n }\r\n ],\r\n \"scope\": {\r\n \"applicableAPITypes\": [\r\n \"REST\",\r\n \"SOAP\"\r\n ],\r\n \"result\": {},\r\n \"scopeConditions\": [],\r\n \"logicalConnector\": \"AND\"\r\n },\r\n \"policyEnforcements\": [\r\n {\r\n \"enforcements\": [\r\n {\r\n \"enforcementObjectId\": \"GlobalLogInvocationPolicyAction\",\r\n \"order\": null\r\n }\r\n ],\r\n \"stageKey\": \"LMT\"\r\n }\r\n ],\r\n \"policyScope\": \"GLOBAL\",\r\n \"global\": true,\r\n \"active\": false,\r\n \"systemPolicy\": true\r\n }\r\n ]\r\n}" + } + }, + "401" : { + "description" : "This status code indicates that the user did not provide any user credential or user does not have API Gateway Administrator or API Gateway provider access to get the policy details." + } + }, + "security" : [ { + "Basic" : [ ] + } ] + }, + "post" : { + "description" : "This REST request is used to create a policy in API Gateway. The body of this request should contain the payload of the policy. Using this request we can create Policies of different type.\n To create a service, scope, package and template level policy we can add the policy payload and set the corresponding policy scope. \nTo create a Global policy user should have API Gateway Administrator access. Other users cannot create global policies. To Create Global policy send the policy payload along with scope details and policy scope set to global. Similarly, to create a threat protection policy user have to send the policy along with the policy enforcement id of Threat protection policy actions. The policy actions needs to be created before adding the enforcement id of policy actions to policy. Threat protection rules are another type of global level policies which are applied to all requests and responses. The threat protection policy enforcement cannot be used in any other policies and other policy enforcement cannot be used in threat protection policies.\n Using this request we can also clone a policy. To clone a policy user have to set the appropriate query parameters.\n The effective policy calculation for policy(Service and scope level policy) is not calculated till it is referred in the API. But for a global policy the effective policy is calculated while creating the policy itself. Policy with template as policy scope cannot be referred from any API or scope. User needs to clone the policy templates and set the policy scope to either service or scope or global before referring it from the API. Policy should have only one occurrence of any stage. Multiple policy enforcements can be added to the applicable stages. To know about the list of stages and applicable policy enforcements on that stage please refer /policyStages resource.", + "consumes" : [ "application/json" ], + "produces" : [ "application/json" ], + "parameters" : [ { + "in" : "body", + "name" : "body", + "description" : "", + "required" : true, + "schema" : { + "$ref" : "#/definitions/Policy" + }, + "x-examples" : { + "application/json" : "{\r\n \"policy\": {\r\n \"names\": [\r\n {\r\n \"value\": \"Employee Global Policy\",\r\n \"locale\": \"English\"\r\n }\r\n ],\r\n \"descriptions\": [\r\n {\r\n \"value\": \"Global Policy for all employee APIs. IT will make sure the request are authenticated before sent to native service\",\r\n \"locale\": \"English\"\r\n }\r\n ],\r\n \"scope\": {\r\n \"applicableAPITypes\": [\r\n \"REST\",\r\n \"SOAP\"\r\n ],\r\n \"result\": {},\r\n \"scopeConditions\": [],\r\n \"logicalConnector\": \"AND\"\r\n },\r\n \"policyEnforcements\": [\r\n {\r\n \"enforcements\": [\r\n {\r\n \"enforcementObjectId\": \"31c729f9-4f1c-4074-acba-6975c0668433\",\r\n \"order\": null\r\n }\r\n ],\r\n \"stageKey\": \"IAM\"\r\n }\r\n ],\r\n \"policyScope\": \"GLOBAL\",\r\n \"global\": true,\r\n \"active\": false,\r\n \"systemPolicy\": false\r\n }\r\n}" + } + }, { + "name" : "action", + "in" : "query", + "description" : " This query parameter represents the action user want to perform. Currently user can only clone the policy. Hence the allowed value for this parameter would be \"clone\". Cloning is duplication of one or more policies in to a single policy. All the policy actions specified inside the policies are also be duplicated while creating the duplicate policy.The effective policy is not calculated for this until this policy is referred from the API.", + "required" : false, + "type" : "string", + "x-example" : "action=clone", + "enum" : [ "clone" ] + }, { + "name" : "policyIds", + "in" : "query", + "description" : "This query parameter represents the list of policies from which the new clone policy is created. If you specify list of policies then the newly created policy has all the policy action from all the policies.", + "required" : false, + "type" : "string", + "x-example" : "policyIds=id1,id2,id3" + }, { + "name" : "policyScope", + "in" : "query", + "description" : "This query parameter represents the policy scope of cloned policy. We can clone policy from one policy scope to another policy scope. Allowed policy scope values are global,service,template & scope", + "required" : false, + "type" : "string", + "x-example" : "policyScope=global", + "enum" : [ "global", "service", "template", "scope" ] + } ], + "responses" : { + "201" : { + "description" : " This status code indicates the policy is created/cloned successfully. The response body will contain the policy details of newly created/cloned policy", + "schema" : { + "$ref" : "#/definitions/Policy" + }, + "examples" : { + "application/json" : "{\r\n \"policy\": {\r\n \"id\": \"7a16baec-7925-4579-966b-bfe58265853d\",\r\n \"names\": [\r\n {\r\n \"value\": \"Employee Global Policy\",\r\n \"locale\": \"English\"\r\n }\r\n ],\r\n \"descriptions\": [\r\n {\r\n \"value\": \"Global Policy for all employee APIs. IT will make sure the request are authenticated before sent to native service\",\r\n \"locale\": \"English\"\r\n }\r\n ],\r\n \"scope\": {\r\n \"applicableAPITypes\": [\r\n \"REST\",\r\n \"SOAP\"\r\n ],\r\n \"result\": {},\r\n \"scopeConditions\": [],\r\n \"logicalConnector\": \"AND\"\r\n },\r\n \"policyEnforcements\": [\r\n {\r\n \"enforcements\": [\r\n {\r\n \"enforcementObjectId\": \"31c729f9-4f1c-4074-acba-6975c0668433\",\r\n \"order\": null\r\n }\r\n ],\r\n \"stageKey\": \"IAM\"\r\n }\r\n ],\r\n \"policyScope\": \"GLOBAL\",\r\n \"global\": true,\r\n \"active\": false,\r\n \"systemPolicy\": false\r\n }\r\n}" + } + }, + "401" : { + "description" : "This status code indicates that the user did not provide any user credential or user does not have API Gateway Administrator or API Gateway provider access to create or clone policy. If the policy scope is GLOBAL and if user gets this status code then the user might not have API Gateway Administrator access." + }, + "400" : { + "description" : "This status code indicates that request body is not correct.", + "examples" : { + "application/json" : "{\r\n \"errorDetails\": \" Unable to create the resource. Error in processing the payload null. Error Message . Check the correctness of key and payload.\"\r\n}" + } + }, + "500" : { + "description" : "This status code indicates that the server has encountered an error during the creation of the policy. For example if it is a global policy we cannot create policy with out scope and the examples show a message of such scenario ", + "examples" : { + "application/json" : "{\r\n \"errorDetails\": \" With out Setting scope, policy actions cannot be added. Please select the applicable Service Type in scope before adding Policy Action.\"\r\n}" + } + } + }, + "security" : [ { + "Basic" : [ ] + } ] + } + }, + "/policies/{policyId}" : { + "get" : { + "description" : "This REST request is used to retrieve the policy details for a specified policy in API Gateway. If policy id is available then the policy details is sent in response.", + "operationId" : "getPolicyById", + "consumes" : [ "application/json" ], + "produces" : [ "application/json" ], + "parameters" : [ { + "name" : "policyId", + "in" : "path", + "description" : "This path parameter is used to specify the policy id for which the policy details needs to be retrieved", + "required" : true, + "type" : "string", + "x-example" : "732c4526-db9a-4ef9-9782-edda1a6aa9bc" + } ], + "responses" : { + "200" : { + "description" : "The policy detail of the specified policy is sent in response body. This sample contains policy details of a global policy.", + "schema" : { + "$ref" : "#/definitions/Policy" + }, + "examples" : { + "application/json" : "{\r\n \"policy\": {\r\n \"id\": \"732c4526-db9a-4ef9-9782-edda1a6aa9bc\",\r\n \"names\": [\r\n {\r\n \"value\": \"a\",\r\n \"locale\": \"English\"\r\n }\r\n ],\r\n \"descriptions\": [\r\n {\r\n \"value\": \"\",\r\n \"locale\": \"English\"\r\n }\r\n ],\r\n \"scope\": {\r\n \"applicableAPITypes\": [\r\n \"REST\",\r\n \"SOAP\"\r\n ],\r\n \"result\": {},\r\n \"scopeConditions\": [],\r\n \"logicalConnector\": \"AND\"\r\n },\r\n \"policyEnforcements\": [\r\n {\r\n \"enforcements\": [\r\n {\r\n \"enforcementObjectId\": \"2e63b365-5fb8-4c8c-b2b3-404045b583f7\",\r\n \"order\": null\r\n }\r\n ],\r\n \"stageKey\": \"IAM\"\r\n }\r\n ],\r\n \"policyScope\": \"GLOBAL\",\r\n \"global\": true,\r\n \"active\": false,\r\n \"systemPolicy\": false\r\n }\r\n}" + } + }, + "401" : { + "description" : "This status code indicates that the user did not provide any user credential or user does not have API Gateway Administrator or API Gateway provider access to get the policy details." + }, + "404" : { + "description" : "This status code indicates that the policy id specified is not found in API Gateway", + "examples" : { + "application/json" : "{\r\n \"errorDetails\": \" Unable to find the resource: 732c4526-db9a-4ef9-9782-edda1a6aa9bc1\"\r\n}" + } + } + }, + "security" : [ { + "Basic" : [ ] + } ] + }, + "put" : { + "description" : "This REST request is used to update the policy details for a specific policy. For Global policy user should have API Gateway administrator access to update global policy", + "operationId" : "updatePolicyByID", + "consumes" : [ "application/json" ], + "produces" : [ "application/json" ], + "parameters" : [ { + "name" : "policyId", + "in" : "path", + "description" : "This path parameter is used to specify the policy id that needs to be updated.", + "required" : true, + "type" : "string", + "x-example" : "732c4526-db9a-4ef9-9782-edda1a6aa9bc" + }, { + "in" : "body", + "name" : "body", + "description" : "", + "required" : false, + "schema" : { + "$ref" : "#/definitions/Policy" + }, + "x-examples" : { + "application/json" : "{\r\n \"policy\": {\r\n \"id\" : \"732c4526-db9a-4ef9-9782-edda1a6aa9bc\",\r\n \"names\": [\r\n {\r\n \"value\": \"Employee Global Policy\",\r\n \"locale\": \"English\"\r\n }\r\n ],\r\n \"descriptions\": [\r\n {\r\n \"value\": \"Global Policy for all employee APIs. IT will make sure the request are authenticated before sent to native service\",\r\n \"locale\": \"English\"\r\n }\r\n ],\r\n \"scope\": {\r\n \"applicableAPITypes\": [\r\n \"REST\",\r\n \"SOAP\"\r\n ],\r\n \"scopeConditions\": [],\r\n \"logicalConnector\": \"AND\"\r\n },\r\n \"policyEnforcements\": [\r\n {\r\n \"enforcements\": [\r\n {\r\n \"enforcementObjectId\": \"c9e32bec-7185-44b4-9565-f0b17da8b8eb\",\r\n \"order\": null\r\n }\r\n ],\r\n \"stageKey\": \"IAM\"\r\n }\r\n ],\r\n \"policyScope\": \"GLOBAL\",\r\n \"global\": true,\r\n \"active\": false,\r\n \"systemPolicy\": false\r\n }\r\n}" + } + } ], + "responses" : { + "200" : { + "description" : "This status code indicates that the specified policy has been updated successfully and the updated policy details will be available in response body", + "schema" : { + "$ref" : "#/definitions/Policy" + }, + "examples" : { + "application/json" : "{\r\n \"policy\": {\r\n \"id\": \"732c4526-db9a-4ef9-9782-edda1a6aa9bc\",\r\n \"names\": [\r\n {\r\n \"value\": \"Employee Global Policy\",\r\n \"locale\": \"English\"\r\n }\r\n ],\r\n \"descriptions\": [\r\n {\r\n \"value\": \"Global Policy for all employee APIs. IT will make sure the request are authenticated before sent to native service\",\r\n \"locale\": \"English\"\r\n }\r\n ],\r\n \"scope\": {\r\n \"applicableAPITypes\": [\r\n \"REST\",\r\n \"SOAP\"\r\n ],\r\n \"result\": {},\r\n \"scopeConditions\": [],\r\n \"logicalConnector\": \"AND\"\r\n },\r\n \"policyEnforcements\": [\r\n {\r\n \"enforcements\": [\r\n {\r\n \"enforcementObjectId\": \"c9e32bec-7185-44b4-9565-f0b17da8b8eb\",\r\n \"order\": null\r\n }\r\n ],\r\n \"stageKey\": \"IAM\"\r\n }\r\n ],\r\n \"policyScope\": \"GLOBAL\",\r\n \"global\": true,\r\n \"active\": false,\r\n \"systemPolicy\": false\r\n }\r\n}" + } + }, + "500" : { + "description" : "This status code indicates that server has encountered an error during the update the of policy. This sample shows the global policy update failed due to conflict cases.", + "examples" : { + "application/json" : "{\r\n \"errorDetails\": \" Conflict between global Policy for API - EMP_POJO_WSDL, Operation - updateEmployee - An API can be associated with only one policy action with template id Identify & Authorize Application\",\r\n \"reason\": [\r\n {\r\n \"apiId\": \"421eb4bf-b2d0-40a4-900f-ad5fd0a2484e\",\r\n \"apiName\": \"EMP_POJO_WSDL\",\r\n \"apiType\": \"SOAP\",\r\n \"errorOnResource\": [\r\n {\r\n \"conflictingPolicies\": {\r\n \"7f009e40-dcbb-4dfc-b653-2e33ecf7f608\": {\r\n \"names\": [\r\n {\r\n \"value\": \"b\",\r\n \"locale\": \"English\"\r\n }\r\n ],\r\n \"policyActionsIds\": [\r\n \"121a6048-08bd-4aeb-8a07-a6d1aeae2710\"\r\n ],\r\n \"policyId\": \"7f009e40-dcbb-4dfc-b653-2e33ecf7f608\",\r\n \"policyScope\": \"GLOBAL\",\r\n \"stageKey\": \"IAM\"\r\n }\r\n },\r\n \"error\": {\r\n \"allowedOccurence\": \"once\",\r\n \"errorType\": \"occurence\",\r\n \"policyActionName\": \"[Identify & Authorize Application]\",\r\n \"templateId\": \"evaluatePolicy\"\r\n },\r\n \"errorMessage\": \" An API can be associated with only one policy action with template id Identify & Authorize Application\",\r\n \"policyDetails\": {\r\n \"names\": [\r\n {\r\n \"value\": \"Employee Global Policy\",\r\n \"locale\": \"English\"\r\n }\r\n ],\r\n \"policyActionsIds\": [\r\n \"c9e32bec-7185-44b4-9565-f0b17da8b8eb\"\r\n ],\r\n \"policyId\": \"732c4526-db9a-4ef9-9782-edda1a6aa9bc\",\r\n \"policyScope\": \"GLOBAL\",\r\n \"stageKey\": \"IAM\"\r\n },\r\n \"resource\": \"updateEmployee\"\r\n },\r\n {\r\n \"conflictingPolicies\": {\r\n \"7f009e40-dcbb-4dfc-b653-2e33ecf7f608\": {\r\n \"names\": [\r\n {\r\n \"value\": \"b\",\r\n \"locale\": \"English\"\r\n }\r\n ],\r\n \"policyActionsIds\": [\r\n \"121a6048-08bd-4aeb-8a07-a6d1aeae2710\"\r\n ],\r\n \"policyId\": \"7f009e40-dcbb-4dfc-b653-2e33ecf7f608\",\r\n \"policyScope\": \"GLOBAL\",\r\n \"stageKey\": \"IAM\"\r\n }\r\n },\r\n \"error\": {\r\n \"allowedOccurence\": \"once\",\r\n \"errorType\": \"occurence\",\r\n \"policyActionName\": \"[Identify & Authorize Application]\",\r\n \"templateId\": \"evaluatePolicy\"\r\n },\r\n \"errorMessage\": \" An API can be associated with only one policy action with template id Identify & Authorize Application\",\r\n \"policyDetails\": {\r\n \"names\": [\r\n {\r\n \"value\": \"Employee Global Policy\",\r\n \"locale\": \"English\"\r\n }\r\n ],\r\n \"policyActionsIds\": [\r\n \"c9e32bec-7185-44b4-9565-f0b17da8b8eb\"\r\n ],\r\n \"policyId\": \"732c4526-db9a-4ef9-9782-edda1a6aa9bc\",\r\n \"policyScope\": \"GLOBAL\",\r\n \"stageKey\": \"IAM\"\r\n },\r\n \"resource\": \"addEmployee\"\r\n },\r\n {\r\n \"conflictingPolicies\": {\r\n \"7f009e40-dcbb-4dfc-b653-2e33ecf7f608\": {\r\n \"names\": [\r\n {\r\n \"value\": \"b\",\r\n \"locale\": \"English\"\r\n }\r\n ],\r\n \"policyActionsIds\": [\r\n \"121a6048-08bd-4aeb-8a07-a6d1aeae2710\"\r\n ],\r\n \"policyId\": \"7f009e40-dcbb-4dfc-b653-2e33ecf7f608\",\r\n \"policyScope\": \"GLOBAL\",\r\n \"stageKey\": \"IAM\"\r\n }\r\n },\r\n \"error\": {\r\n \"allowedOccurence\": \"once\",\r\n \"errorType\": \"occurence\",\r\n \"policyActionName\": \"[Identify & Authorize Application]\",\r\n \"templateId\": \"evaluatePolicy\"\r\n },\r\n \"errorMessage\": \" An API can be associated with only one policy action with template id Identify & Authorize Application\",\r\n \"policyDetails\": {\r\n \"names\": [\r\n {\r\n \"value\": \"Employee Global Policy\",\r\n \"locale\": \"English\"\r\n }\r\n ],\r\n \"policyActionsIds\": [\r\n \"c9e32bec-7185-44b4-9565-f0b17da8b8eb\"\r\n ],\r\n \"policyId\": \"732c4526-db9a-4ef9-9782-edda1a6aa9bc\",\r\n \"policyScope\": \"GLOBAL\",\r\n \"stageKey\": \"IAM\"\r\n },\r\n \"resource\": \"deleteEmployee\"\r\n },\r\n {\r\n \"conflictingPolicies\": {\r\n \"7f009e40-dcbb-4dfc-b653-2e33ecf7f608\": {\r\n \"names\": [\r\n {\r\n \"value\": \"b\",\r\n \"locale\": \"English\"\r\n }\r\n ],\r\n \"policyActionsIds\": [\r\n \"121a6048-08bd-4aeb-8a07-a6d1aeae2710\"\r\n ],\r\n \"policyId\": \"7f009e40-dcbb-4dfc-b653-2e33ecf7f608\",\r\n \"policyScope\": \"GLOBAL\",\r\n \"stageKey\": \"IAM\"\r\n }\r\n },\r\n \"error\": {\r\n \"allowedOccurence\": \"once\",\r\n \"errorType\": \"occurence\",\r\n \"policyActionName\": \"[Identify & Authorize Application]\",\r\n \"templateId\": \"evaluatePolicy\"\r\n },\r\n \"errorMessage\": \" An API can be associated with only one policy action with template id Identify & Authorize Application\",\r\n \"policyDetails\": {\r\n \"names\": [\r\n {\r\n \"value\": \"Employee Global Policy\",\r\n \"locale\": \"English\"\r\n }\r\n ],\r\n \"policyActionsIds\": [\r\n \"c9e32bec-7185-44b4-9565-f0b17da8b8eb\"\r\n ],\r\n \"policyId\": \"732c4526-db9a-4ef9-9782-edda1a6aa9bc\",\r\n \"policyScope\": \"GLOBAL\",\r\n \"stageKey\": \"IAM\"\r\n },\r\n \"resource\": \"getEmployee\"\r\n }\r\n ]\r\n }\r\n ]\r\n}" + } + }, + "404" : { + "description" : "This status code indicates that the specified policy id is not available in API Gateway", + "examples" : { + "application/json" : "{\r\n \"errorDetails\": \" Unable to find the resource: 732c4526-db9a-4ef9-9782-edda1a6aa9bc1\"\r\n}" + } + }, + "401" : { + "description" : "This status code indicates that the user did not provide any user credential or user does not have API Gateway Administrator or API Gateway provider access to update the policy details.If global policy is specified then user should have API Gateway administrator access to update the policy details." + }, + "400" : { + "description" : "This status code indicates that the specified policy does not have proper request. The sample shows the error when tried to update a global policy with any scope defined for the global policy.", + "examples" : { + "application/json" : "{\r\n \"errorDetails\": \" With out Setting scope, policy actions cannot be added. Please select the applicable Service Type in scope before adding Policy Action.\"\r\n}" + } + } + }, + "security" : [ { + "Basic" : [ ] + } ] + }, + "delete" : { + "description" : "This REST request is used to delete the policy from API gateway. This request will automatically delete the associated policy action for this policy", + "operationId" : "deletePolicyByID", + "consumes" : [ "application/json" ], + "produces" : [ "application/json" ], + "parameters" : [ { + "name" : "policyId", + "in" : "path", + "description" : "This path parameter is used to specify the policy id that needs to be deleted. If the policy id specified is global policy then it needs to be in inactive state to delete. Active global policy and global policy with systemPolicy property set to true cannot be deleted.", + "required" : true, + "type" : "string", + "x-example" : "732c4526-db9a-4ef9-9782-edda1a6aa9bc" + } ], + "responses" : { + "204" : { + "description" : "This status code indicates that the specified policy is successfully deleted" + }, + "401" : { + "description" : "This status code indicates that the user did not provide any user credential or user does not have API Gateway Administrator or API gateway provider access to delete the policy. If the specified policy is global then user should have API Administrator access to delete the global policy" + }, + "404" : { + "description" : "This status code indicates that the policy id specified is not found in API Gateway", + "examples" : { + "application/json" : "{\r\n \"errorDetails\": \" Unable to find the resource: 732c4526-db9a-4ef9-9782-edda1a6aa9bc1\"\r\n}" + } + }, + "500" : { + "description" : "This status code indicates that error has occurred during the deletion of policy. The sample shows that the policy cannot be delete since the global policy is in active state.", + "examples" : { + "application/json" : "{\r\n \"errorDetails\": \" Policy [Employee Global Policy] is in active state, hence cannot be deleted. Please deactivate the policy to delete\"\r\n}" + } + } + }, + "security" : [ { + "Basic" : [ ] + } ] + } + }, + "/policies/{policyId}/apis" : { + "get" : { + "description" : "This REST request is used to get the list of applicable APIs for a global policy. An API become applicable API for a global policy only if it satisfies the scope specified in the global policy. By default it will return the basic API details of all the applicable APIs either if the API is active or inactive for a global policy. User can use the query parameter \"active\" to retrieve all active APIs for a global policy or all applicable APIs regardless of its status for a global policy.", + "operationId" : "getApplicableAPIsForGlobalPolicyByID", + "consumes" : [ "application/json" ], + "produces" : [ "application/json" ], + "parameters" : [ { + "name" : "policyId", + "in" : "path", + "description" : "This path parameter is used to specify the global policy id for which we need the list of applicable APIs", + "required" : true, + "type" : "string", + "x-example" : "732c4526-db9a-4ef9-9782-edda1a6aa9bc" + }, { + "name" : "active", + "in" : "query", + "description" : "This is a query parameter. It is used to retrieve the list of applicable APIs for a global policy. If the value for this parameter is 'false' then it will return all the APIs whether it is active or not for the specified global policy. If the value for this flag is 'true' then it will return only the list of applicable active APIs alone for the specified global policy", + "required" : false, + "type" : "string", + "x-example" : "active=false" + } ], + "responses" : { + "200" : { + "description" : "This status code indicates that the specified global policy is valid and in the response it will contain the list of applicable APIs based on the parameters specified in the request. ", + "schema" : { + "type" : "array", + "items" : { + "$ref" : "#/definitions/APIResponseDelete" + } + }, + "examples" : { + "application/json" : "{\r\n \"apiResponse\": [\r\n {\r\n \"api\": {\r\n \"apiName\": \"API Gateway \",\r\n \"apiVersion\": \"10.0\",\r\n \"apiDescription\": \"This swagger doc contain API Definition for API Gateway APIs. It contains swagger definition for all APIs in API Gateway.\",\r\n \"isActive\": false,\r\n \"type\": \"REST\",\r\n \"publishedPortals\": [],\r\n \"systemVersion\": 1,\r\n \"id\": \"4869049b-4cef-4c76-b678-14d4970c5241\"\r\n },\r\n \"responseStatus\": \"SUCCESS\"\r\n },\r\n {\r\n \"api\": {\r\n \"apiName\": \"EMP\",\r\n \"apiVersion\": \"1.0\",\r\n \"isActive\": true,\r\n \"type\": \"REST\",\r\n \"publishedPortals\": [],\r\n \"systemVersion\": 1,\r\n \"id\": \"e60d6fe9-3612-469f-b33a-fb4c97c72b3b\"\r\n },\r\n \"responseStatus\": \"SUCCESS\"\r\n },\r\n {\r\n \"api\": {\r\n \"apiName\": \"EMP_POJO_WSDL\",\r\n \"apiVersion\": \"1\",\r\n \"isActive\": true,\r\n \"type\": \"SOAP\",\r\n \"publishedPortals\": [],\r\n \"systemVersion\": 1,\r\n \"id\": \"421eb4bf-b2d0-40a4-900f-ad5fd0a2484e\"\r\n },\r\n \"responseStatus\": \"SUCCESS\"\r\n },\r\n {\r\n \"api\": {\r\n \"apiName\": \"EMP_REST_SWAGGER\",\r\n \"apiVersion\": \"1.0.0\",\r\n \"isActive\": false,\r\n \"type\": \"REST\",\r\n \"publishedPortals\": [],\r\n \"systemVersion\": 1,\r\n \"id\": \"260c11e1-b3eb-4714-aa73-7cd95fc91abb\"\r\n },\r\n \"responseStatus\": \"SUCCESS\"\r\n }\r\n ]\r\n}" + } + }, + "401" : { + "description" : "This status code indicates that the user did not provide any user credential or user does not have API Gateway Administrator or API gateway provider access to get the list of applicable APIs for the specified global policy." + }, + "404" : { + "description" : "This status code indicates that the specified global policy is not available in API Gateway", + "examples" : { + "application/json" : "{\r\n \"errorDetails\": \" Unable to find the resource: 732c4526-db9a-4ef9-9782-edda1a6aa9bc1\"\r\n}" + } + }, + "400" : { + "description" : "This status code indicate the specified policy is not a global policy.", + "examples" : { + "application/json" : "{\r\n \"errorDetails\": \"5e04581b-a583-495b-83b3-411f9c067054 is not a global policy.\"\r\n}" + } + }, + "500" : { + "description" : "This is status code indicates that server has encounted an while getting applicable APIs for the specified policy" + } + }, + "security" : [ { + "Basic" : [ ] + } ] + } + }, + "/policies/{policyId}/conflicts" : { + "get" : { + "description" : "This REST Request is used to get the conflicts for a global policy. Conflicts between the policies/APIs can arise if the policies contain the conflicting policy actions. For example, a global policy that contains the Identity and Access Policy with \"API Key\" will conflict with another global policy that contains the Identity and Access Policy with \"OAuth2\". If an API satisfy more than one global policy, then all the policy actions of all applicable global policy will be added for effective policy calculation. If any policy validation error occurred it will be reported as conflict.\n\nThis REST request doesn't require request body. By Default it will return the conflicts for all applicable APIs and conflicts between the specified global policy and other active global policies. Additionally, we can use the query parameter to get the conflicts for active or all applicable APIs. \n\nIf there is conflict, status 500 is returned along with the details on conflicting scenarios and if there is no conflict then status 200 is returned", + "operationId" : "checkConflictForGlobalPolicy", + "consumes" : [ "application/json" ], + "produces" : [ "application/json" ], + "parameters" : [ { + "name" : "policyId", + "in" : "path", + "description" : "This path parameter is used to specify the global policy id to which we need to conflicting case for a global policy", + "required" : true, + "type" : "string", + "x-example" : "732c4526-db9a-4ef9-9782-edda1a6aa9bc" + }, { + "name" : "active", + "in" : "query", + "description" : "This is a query parameter. It is used to get conflicting case for a global policy. If the value for this parameter is 'false' then it will return conflicting scenario for all the APIs whether it is active or not for the specified global policy. If the value for this flag is 'true' then it will return conflicting case only for the list of applicable active APIs alone", + "required" : false, + "type" : "string", + "x-example" : "active=false" + } ], + "responses" : { + "200" : { + "description" : "This status code indicates that there are no conflicting cases for the specified global policy and the response will have the policy details of the global policy", + "schema" : { + "$ref" : "#/definitions/Policy" + }, + "examples" : { + "application/json" : "{\r\n \"policy\": {\r\n \"id\": \"732c4526-db9a-4ef9-9782-edda1a6aa9bc\",\r\n \"names\": [\r\n {\r\n \"value\": \"a\",\r\n \"locale\": \"English\"\r\n }\r\n ],\r\n \"descriptions\": [\r\n {\r\n \"value\": \"\",\r\n \"locale\": \"English\"\r\n }\r\n ],\r\n \"scope\": {\r\n \"applicableAPITypes\": [\r\n \"REST\",\r\n \"SOAP\"\r\n ],\r\n \"result\": {},\r\n \"scopeConditions\": [],\r\n \"logicalConnector\": \"AND\"\r\n },\r\n \"policyEnforcements\": [\r\n {\r\n \"enforcements\": [\r\n {\r\n \"enforcementObjectId\": \"2e63b365-5fb8-4c8c-b2b3-404045b583f7\",\r\n \"order\": null\r\n }\r\n ],\r\n \"stageKey\": \"IAM\"\r\n }\r\n ],\r\n \"policyScope\": \"GLOBAL\",\r\n \"global\": true,\r\n \"active\": false,\r\n \"systemPolicy\": false\r\n }\r\n}" + } + }, + "401" : { + "description" : "This status code indicate either user didn't provide any user credential or user doesn't have API Gateway Administrator or API gateway provider access to get conflicting cases for the specified global policy." + }, + "404" : { + "description" : "This status code indicates that the specified global policy is not available in API Gateway", + "examples" : { + "application/json" : "{\r\n \"errorDetails\": \" Unable to find the resource: 732c4526-db9a-4ef9-9782-edda1a6aa9bc1\"\r\n}" + } + }, + "500" : { + "description" : "This status code indicates that there are some conflicting cases for the specified global policy. The sample shows one such conflicting case. The specified global policy and another active global policy have conflicting scenario on a common active API", + "schema" : { + "$ref" : "#/definitions/EnforcementValidationMessage" + }, + "examples" : { + "application/json" : "{\r\n \"errorDetails\": \" Conflict between global Policy for API - EMP_POJO_WSDL, Operation - updateEmployee - An API can be associated with only one policy action with template id Identify & Authorize Application\",\r\n \"reason\": [\r\n {\r\n \"apiId\": \"421eb4bf-b2d0-40a4-900f-ad5fd0a2484e\",\r\n \"apiName\": \"EMP_POJO_WSDL\",\r\n \"apiType\": \"SOAP\",\r\n \"errorOnResource\": [\r\n {\r\n \"conflictingPolicies\": {\r\n \"732c4526-db9a-4ef9-9782-edda1a6aa9bc\": {\r\n \"names\": [\r\n {\r\n \"value\": \"a\",\r\n \"locale\": \"English\"\r\n }\r\n ],\r\n \"policyActionsIds\": [\r\n \"2e63b365-5fb8-4c8c-b2b3-404045b583f7\"\r\n ],\r\n \"policyId\": \"732c4526-db9a-4ef9-9782-edda1a6aa9bc\",\r\n \"policyScope\": \"GLOBAL\",\r\n \"stageKey\": \"IAM\"\r\n }\r\n },\r\n \"error\": {\r\n \"allowedOccurence\": \"once\",\r\n \"errorType\": \"occurence\",\r\n \"policyActionName\": \"[Identify & Authorize Application]\",\r\n \"templateId\": \"evaluatePolicy\"\r\n },\r\n \"errorMessage\": \" An API can be associated with only one policy action with template id Identify & Authorize Application\",\r\n \"policyDetails\": {\r\n \"names\": [\r\n {\r\n \"value\": \"Employee Global Policy\",\r\n \"locale\": \"English\"\r\n }\r\n ],\r\n \"policyActionsIds\": [\r\n \"31c729f9-4f1c-4074-acba-6975c0668433\"\r\n ],\r\n \"policyId\": \"7a16baec-7925-4579-966b-bfe58265853d\",\r\n \"policyScope\": \"GLOBAL\",\r\n \"stageKey\": \"IAM\"\r\n },\r\n \"resource\": \"updateEmployee\"\r\n },\r\n {\r\n \"conflictingPolicies\": {\r\n \"732c4526-db9a-4ef9-9782-edda1a6aa9bc\": {\r\n \"names\": [\r\n {\r\n \"value\": \"a\",\r\n \"locale\": \"English\"\r\n }\r\n ],\r\n \"policyActionsIds\": [\r\n \"2e63b365-5fb8-4c8c-b2b3-404045b583f7\"\r\n ],\r\n \"policyId\": \"732c4526-db9a-4ef9-9782-edda1a6aa9bc\",\r\n \"policyScope\": \"GLOBAL\",\r\n \"stageKey\": \"IAM\"\r\n }\r\n },\r\n \"error\": {\r\n \"allowedOccurence\": \"once\",\r\n \"errorType\": \"occurence\",\r\n \"policyActionName\": \"[Identify & Authorize Application]\",\r\n \"templateId\": \"evaluatePolicy\"\r\n },\r\n \"errorMessage\": \" An API can be associated with only one policy action with template id Identify & Authorize Application\",\r\n \"policyDetails\": {\r\n \"names\": [\r\n {\r\n \"value\": \"Employee Global Policy\",\r\n \"locale\": \"English\"\r\n }\r\n ],\r\n \"policyActionsIds\": [\r\n \"31c729f9-4f1c-4074-acba-6975c0668433\"\r\n ],\r\n \"policyId\": \"7a16baec-7925-4579-966b-bfe58265853d\",\r\n \"policyScope\": \"GLOBAL\",\r\n \"stageKey\": \"IAM\"\r\n },\r\n \"resource\": \"addEmployee\"\r\n },\r\n {\r\n \"conflictingPolicies\": {\r\n \"732c4526-db9a-4ef9-9782-edda1a6aa9bc\": {\r\n \"names\": [\r\n {\r\n \"value\": \"a\",\r\n \"locale\": \"English\"\r\n }\r\n ],\r\n \"policyActionsIds\": [\r\n \"2e63b365-5fb8-4c8c-b2b3-404045b583f7\"\r\n ],\r\n \"policyId\": \"732c4526-db9a-4ef9-9782-edda1a6aa9bc\",\r\n \"policyScope\": \"GLOBAL\",\r\n \"stageKey\": \"IAM\"\r\n }\r\n },\r\n \"error\": {\r\n \"allowedOccurence\": \"once\",\r\n \"errorType\": \"occurence\",\r\n \"policyActionName\": \"[Identify & Authorize Application]\",\r\n \"templateId\": \"evaluatePolicy\"\r\n },\r\n \"errorMessage\": \" An API can be associated with only one policy action with template id Identify & Authorize Application\",\r\n \"policyDetails\": {\r\n \"names\": [\r\n {\r\n \"value\": \"Employee Global Policy\",\r\n \"locale\": \"English\"\r\n }\r\n ],\r\n \"policyActionsIds\": [\r\n \"31c729f9-4f1c-4074-acba-6975c0668433\"\r\n ],\r\n \"policyId\": \"7a16baec-7925-4579-966b-bfe58265853d\",\r\n \"policyScope\": \"GLOBAL\",\r\n \"stageKey\": \"IAM\"\r\n },\r\n \"resource\": \"deleteEmployee\"\r\n },\r\n {\r\n \"conflictingPolicies\": {\r\n \"732c4526-db9a-4ef9-9782-edda1a6aa9bc\": {\r\n \"names\": [\r\n {\r\n \"value\": \"a\",\r\n \"locale\": \"English\"\r\n }\r\n ],\r\n \"policyActionsIds\": [\r\n \"2e63b365-5fb8-4c8c-b2b3-404045b583f7\"\r\n ],\r\n \"policyId\": \"732c4526-db9a-4ef9-9782-edda1a6aa9bc\",\r\n \"policyScope\": \"GLOBAL\",\r\n \"stageKey\": \"IAM\"\r\n }\r\n },\r\n \"error\": {\r\n \"allowedOccurence\": \"once\",\r\n \"errorType\": \"occurence\",\r\n \"policyActionName\": \"[Identify & Authorize Application]\",\r\n \"templateId\": \"evaluatePolicy\"\r\n },\r\n \"errorMessage\": \" An API can be associated with only one policy action with template id Identify & Authorize Application\",\r\n \"policyDetails\": {\r\n \"names\": [\r\n {\r\n \"value\": \"Employee Global Policy\",\r\n \"locale\": \"English\"\r\n }\r\n ],\r\n \"policyActionsIds\": [\r\n \"31c729f9-4f1c-4074-acba-6975c0668433\"\r\n ],\r\n \"policyId\": \"7a16baec-7925-4579-966b-bfe58265853d\",\r\n \"policyScope\": \"GLOBAL\",\r\n \"stageKey\": \"IAM\"\r\n },\r\n \"resource\": \"getEmployee\"\r\n }\r\n ]\r\n }\r\n ]\r\n}" + } + }, + "400" : { + "description" : "This status code indicate the specified policy is not a global policy.", + "examples" : { + "application/json" : "{\r\n \"errorDetails\": \"5e04581b-a583-495b-83b3-411f9c067054 is not a global policy.\"\r\n}" + } + } + }, + "security" : [ { + "Basic" : [ ] + } ] + } + }, + "/policies/{policyId}/aliases" : { + "get" : { + "description" : "This REST request retrieves the list of aliases which are referenced by a given policy. The referenced aliases can also be retrieved for global policies", + "operationId" : "getAliasByPolicyId", + "consumes" : [ "application/json" ], + "produces" : [ "application/json" ], + "parameters" : [ { + "name" : "policyId", + "in" : "path", + "description" : "This path parameter specifies the policy id for which the list of aliases is requested", + "required" : true, + "type" : "string", + "x-example" : "732c4526-db9a-4ef9-9782-edda1a6aa9bc" + } ], + "responses" : { + "200" : { + "description" : "This status code indicates that the details of the alias are successfully retrieved.", + "schema" : { + "$ref" : "#/definitions/Alias" + }, + "examples" : { + "application/json" : "{\r\n \"alias}\": [\r\n {\r\n \"type\": \"endpoint\",\r\n \"id\": \"590d543c-761f-11e9-9f05-f83db12a3b48\",\r\n \"name\": \"SampleEndpointAlias\",\r\n \"description\": \"My SampleEndpointAlias\",\r\n \"owner\": \"Administrator\",\r\n \"endPointURI\": \"http://myserver/myendpoint\",\r\n \"connectionTimeout\": 0,\r\n \"readTimeout\": 0,\r\n \"suspendDurationOnFailure\": 0,\r\n \"passSecurityHeaders\": false\r\n }\r\n ]\r\n }" + } + }, + "401" : { + "description" : "This status code indicates that the user did not provide any user credential or user does not have API Gateway Administrator or API gateway provider access to get the list of aliases for the specified policy." + }, + "404" : { + "description" : "This status code indicates that the specified policy is not available in API Gateway", + "examples" : { + "application/json" : "{\r\n \"errorDetails\": \" Unable to find the resource: 732c4526-db9a-4ef9-9782-edda1a6aa9bc1\"\r\n}" + } + }, + "500" : { + "description" : "This is status code indicates that server has encountered an error while getting aliases for the specified policy", + "schema" : { + "$ref" : "#/definitions/EnforcementValidationMessage" + } + } + }, + "security" : [ { + "Basic" : [ ] + } ] + } + }, + "/policies/{policyId}/enable" : { + "put" : { + "description" : "This REST request is used to enable the Threat protection rule created in API Gateway. This request does not require any request body. If the threat protection policy is enabled successfully then the policy details of specified policy is sent as response", + "operationId" : "enableThreatProtectionRuleByPolicyID", + "consumes" : [ "application/json" ], + "produces" : [ "application/json" ], + "parameters" : [ { + "name" : "policyId", + "in" : "path", + "description" : "This path parameter is used to specify the policy id of the threat protection policy which needs to be enabled", + "required" : true, + "type" : "string", + "x-example" : "732c4526-db9a-4ef9-9782-edda1a6aa9bc" + } ], + "responses" : { + "200" : { + "description" : "This status code indicates that the threat protection policy is enabled and the policy details of the Threat protection will be in response with active flag set to true", + "schema" : { + "$ref" : "#/definitions/Policy" + }, + "examples" : { + "application/json" : "{\r\n \"policy\": {\r\n \"id\": \"7b2cd4a6-49f3-480d-8965-a77971605fb7\",\r\n \"names\": [\r\n {\r\n \"value\": \"Message_size_filter\",\r\n \"locale\": \"English\"\r\n }\r\n ],\r\n \"parameters\": [\r\n {\r\n \"templateKey\": \"customErrorMessage\",\r\n \"values\": [\r\n \"Message size limit exceeded\"\r\n ]\r\n },\r\n {\r\n \"templateKey\": \"action\",\r\n \"values\": [\r\n \"DENY\"\r\n ]\r\n },\r\n {\r\n \"templateKey\": \"enableRule\",\r\n \"values\": [\r\n \"Disable\"\r\n ]\r\n },\r\n {\r\n \"templateKey\": \"rule\",\r\n \"values\": [\r\n \"Message_size_filter\"\r\n ]\r\n },\r\n {\r\n \"templateKey\": \"ruleDescription\",\r\n \"values\": [\r\n \"This threat protection rule is used to filter request based on size\"\r\n ]\r\n },\r\n {\r\n \"templateKey\": \"ruleName\",\r\n \"values\": [\r\n \"Message_size_filter\"\r\n ]\r\n },\r\n {\r\n \"templateKey\": \"ruleType\",\r\n \"values\": [\r\n \"DENY\"\r\n ]\r\n },\r\n {\r\n \"templateKey\": \"isEnterpriseGatewayLicensed\",\r\n \"values\": [\r\n \"true\"\r\n ]\r\n },\r\n {\r\n \"templateKey\": \"alertOption\",\r\n \"parameters\": [\r\n {\r\n \"templateKey\": \"alertInterval\",\r\n \"values\": [\r\n \"60\"\r\n ]\r\n },\r\n {\r\n \"templateKey\": \"alertOnEvery\",\r\n \"values\": [\r\n \"false\"\r\n ]\r\n },\r\n {\r\n \"templateKey\": \"alertType\",\r\n \"values\": [\r\n \"None\"\r\n ]\r\n },\r\n {\r\n \"templateKey\": \"emailTo\",\r\n \"values\": [\r\n \"\"\r\n ]\r\n },\r\n {\r\n \"templateKey\": \"flowServiceName\",\r\n \"values\": [\r\n \"\"\r\n ]\r\n },\r\n {\r\n \"templateKey\": \"runAsUser\",\r\n \"values\": [\r\n \"\"\r\n ]\r\n }\r\n ]\r\n },\r\n {\r\n \"templateKey\": \"isRuleEnabled\",\r\n \"values\": [\r\n \"false\"\r\n ]\r\n }\r\n ],\r\n \"policyEnforcements\": [\r\n {\r\n \"enforcements\": [\r\n {\r\n \"enforcementObjectId\": \"b9cfc355-0d11-4ea2-aae9-54df71c80a6d\",\r\n \"order\": \"\"\r\n },\r\n {\r\n \"enforcementObjectId\": \"adea4954-158c-40c6-8d11-b5912349a5f2\",\r\n \"order\": \"\"\r\n },\r\n {\r\n \"enforcementObjectId\": \"d62d9c00-f1ae-4bf8-979a-326171efb772\",\r\n \"order\": \"\"\r\n },\r\n {\r\n \"enforcementObjectId\": \"72a712bb-7134-4328-9701-43fb06fbfeb9\",\r\n \"order\": \"\"\r\n },\r\n {\r\n \"enforcementObjectId\": \"bc5e15ef-0a50-4876-ae98-11ce30e7a285\",\r\n \"order\": \"\"\r\n },\r\n {\r\n \"enforcementObjectId\": \"895f963f-8297-41b9-a4b4-002b7bb71870\",\r\n \"order\": \"\"\r\n },\r\n {\r\n \"enforcementObjectId\": \"96568d84-7f85-4a7d-8c82-c8f90a75a212\",\r\n \"order\": \"\"\r\n },\r\n {\r\n \"enforcementObjectId\": \"ecd4669e-ddce-4b23-af6c-79315d4fae95\",\r\n \"order\": \"\"\r\n }\r\n ],\r\n \"stageKey\": \"threatProtection\"\r\n }\r\n ],\r\n \"global\": true,\r\n \"active\": true,\r\n \"systemPolicy\": false,\r\n \"policyActionTemplateKeys\": [\r\n \"MsgSizeLimitFilter\"\r\n ]\r\n }\r\n}" + } + }, + "500" : { + "description" : "This status code indicates that the server has encountered an error while enabling the threat protection policy" + }, + "404" : { + "description" : "This status code indicates that the threat protection policy id specified is not found in API Gateway", + "examples" : { + "application/json" : "{\r\n \"errorDetails\": \" Unable to find the resource: 7b2cd4a6-49f3-480d-8965-a77971605fb71\"\r\n}" + } + }, + "401" : { + "description" : "This status code indicates either user did not provide any user credential or user does not have API Gateway Administrator or API Gateway provider access to enable the threat protection policy." + }, + "400" : { + "description" : "This status code indicates that the policy id specified is not a threat protection policy", + "examples" : { + "application/json" : "{\r\n \"errorDetails\": \"Enable action supported only for Threat protection policies\"\r\n}" + } + } + }, + "security" : [ { + "Basic" : [ ] + } ] + } + }, + "/policies/{policyId}/disable" : { + "put" : { + "description" : "This REST request is used to disable the Threat protection rule created in API Gateway. This request does not require any request body. If the threat protection policy is disabled successfully then the policy details of specified policy will be sent as response.", + "operationId" : "disableThreatProtectionRuleByPolicyID", + "consumes" : [ "application/json" ], + "produces" : [ "application/json" ], + "parameters" : [ { + "name" : "policyId", + "in" : "path", + "description" : "This path parameter is used to specify the policy id of the threat protection policy which needs to be disabled", + "required" : true, + "type" : "string", + "x-example" : "732c4526-db9a-4ef9-9782-edda1a6aa9bc" + } ], + "responses" : { + "200" : { + "description" : "This status code indicates that the threat protection policy is disabled and the policy details of the Threat protection will be in response with active flag set to false", + "schema" : { + "$ref" : "#/definitions/Policy" + }, + "examples" : { + "application/json" : "{\r\n \"policy\": {\r\n \"id\": \"7b2cd4a6-49f3-480d-8965-a77971605fb7\",\r\n \"names\": [\r\n {\r\n \"value\": \"Message_size_filter\",\r\n \"locale\": \"English\"\r\n }\r\n ],\r\n \"parameters\": [\r\n {\r\n \"templateKey\": \"customErrorMessage\",\r\n \"values\": [\r\n \"Message size limit exceeded\"\r\n ]\r\n },\r\n {\r\n \"templateKey\": \"action\",\r\n \"values\": [\r\n \"DENY\"\r\n ]\r\n },\r\n {\r\n \"templateKey\": \"enableRule\",\r\n \"values\": [\r\n \"Disable\"\r\n ]\r\n },\r\n {\r\n \"templateKey\": \"rule\",\r\n \"values\": [\r\n \"Message_size_filter\"\r\n ]\r\n },\r\n {\r\n \"templateKey\": \"ruleDescription\",\r\n \"values\": [\r\n \"This threat protection rule is used to filter request based on size\"\r\n ]\r\n },\r\n {\r\n \"templateKey\": \"ruleName\",\r\n \"values\": [\r\n \"Message_size_filter\"\r\n ]\r\n },\r\n {\r\n \"templateKey\": \"ruleType\",\r\n \"values\": [\r\n \"DENY\"\r\n ]\r\n },\r\n {\r\n \"templateKey\": \"isEnterpriseGatewayLicensed\",\r\n \"values\": [\r\n \"true\"\r\n ]\r\n },\r\n {\r\n \"templateKey\": \"alertOption\",\r\n \"parameters\": [\r\n {\r\n \"templateKey\": \"alertInterval\",\r\n \"values\": [\r\n \"60\"\r\n ]\r\n },\r\n {\r\n \"templateKey\": \"alertOnEvery\",\r\n \"values\": [\r\n \"false\"\r\n ]\r\n },\r\n {\r\n \"templateKey\": \"alertType\",\r\n \"values\": [\r\n \"None\"\r\n ]\r\n },\r\n {\r\n \"templateKey\": \"emailTo\",\r\n \"values\": [\r\n \"\"\r\n ]\r\n },\r\n {\r\n \"templateKey\": \"flowServiceName\",\r\n \"values\": [\r\n \"\"\r\n ]\r\n },\r\n {\r\n \"templateKey\": \"runAsUser\",\r\n \"values\": [\r\n \"\"\r\n ]\r\n }\r\n ]\r\n },\r\n {\r\n \"templateKey\": \"isRuleEnabled\",\r\n \"values\": [\r\n \"false\"\r\n ]\r\n }\r\n ],\r\n \"policyEnforcements\": [\r\n {\r\n \"enforcements\": [\r\n {\r\n \"enforcementObjectId\": \"b9cfc355-0d11-4ea2-aae9-54df71c80a6d\",\r\n \"order\": \"\"\r\n },\r\n {\r\n \"enforcementObjectId\": \"adea4954-158c-40c6-8d11-b5912349a5f2\",\r\n \"order\": \"\"\r\n },\r\n {\r\n \"enforcementObjectId\": \"d62d9c00-f1ae-4bf8-979a-326171efb772\",\r\n \"order\": \"\"\r\n },\r\n {\r\n \"enforcementObjectId\": \"72a712bb-7134-4328-9701-43fb06fbfeb9\",\r\n \"order\": \"\"\r\n },\r\n {\r\n \"enforcementObjectId\": \"bc5e15ef-0a50-4876-ae98-11ce30e7a285\",\r\n \"order\": \"\"\r\n },\r\n {\r\n \"enforcementObjectId\": \"895f963f-8297-41b9-a4b4-002b7bb71870\",\r\n \"order\": \"\"\r\n },\r\n {\r\n \"enforcementObjectId\": \"96568d84-7f85-4a7d-8c82-c8f90a75a212\",\r\n \"order\": \"\"\r\n },\r\n {\r\n \"enforcementObjectId\": \"ecd4669e-ddce-4b23-af6c-79315d4fae95\",\r\n \"order\": \"\"\r\n }\r\n ],\r\n \"stageKey\": \"threatProtection\"\r\n }\r\n ],\r\n \"global\": true,\r\n \"active\": false,\r\n \"systemPolicy\": false,\r\n \"policyActionTemplateKeys\": [\r\n \"MsgSizeLimitFilter\"\r\n ]\r\n }\r\n}" + } + }, + "500" : { + "description" : "This status code indicates that the server has encountered an error while disabling the threat protection policy" + }, + "404" : { + "description" : "This status code indicates that the threat protection policy id specified is not found in API Gateway", + "examples" : { + "application/json" : "{\r\n \"errorDetails\": \" Unable to find the resource: 0dfa92ee-fa5e-4c4e-88b2-653048659e8c1\"\r\n}" + } + }, + "401" : { + "description" : "This status code indicates that the user did not provide any user credential or user does not have API Gateway Administrator or API Gateway provider access to disable the threat protection policy." + }, + "400" : { + "description" : "This status code indicates that the policy id specified is not a threat protection policy", + "examples" : { + "application/json" : "{\r\n \"errorDetails\": \"Disable action supported only for Threat protection policies\"\r\n}" + } + } + }, + "security" : [ { + "Basic" : [ ] + } ] + } + }, + "/policies/{policyId}/movedown" : { + "put" : { + "description" : "This REST request is used to move down the execution order of the Threat protection rule created in API Gateway. This request does not require any request body. If the threat protection policy execution order is changed successfully then the policy details of specified policy will be sent as response.", + "operationId" : "moveDownThreatProtectionRuleByPolicyID", + "consumes" : [ "application/json" ], + "produces" : [ "application/json" ], + "parameters" : [ { + "name" : "policyId", + "in" : "path", + "description" : "This path parameter is used to specify the policy id of the threat protection whose execution order needs to be moved down ", + "required" : true, + "type" : "string", + "x-example" : "732c4526-db9a-4ef9-9782-edda1a6aa9bc" + } ], + "responses" : { + "200" : { + "description" : "This status indicates that the threat protection policy execution order has been changed successfully and policy details of the Threat protection will be in response", + "schema" : { + "$ref" : "#/definitions/Policy" + }, + "examples" : { + "application/json" : "{\r\n \"policy\": {\r\n \"id\": \"7b2cd4a6-49f3-480d-8965-a77971605fb7\",\r\n \"names\": [\r\n {\r\n \"value\": \"Message_size_filter\",\r\n \"locale\": \"English\"\r\n }\r\n ],\r\n \"parameters\": [\r\n {\r\n \"templateKey\": \"customErrorMessage\",\r\n \"values\": [\r\n \"Message size limit exceeded\"\r\n ]\r\n },\r\n {\r\n \"templateKey\": \"action\",\r\n \"values\": [\r\n \"DENY\"\r\n ]\r\n },\r\n {\r\n \"templateKey\": \"enableRule\",\r\n \"values\": [\r\n \"Disable\"\r\n ]\r\n },\r\n {\r\n \"templateKey\": \"rule\",\r\n \"values\": [\r\n \"Message_size_filter\"\r\n ]\r\n },\r\n {\r\n \"templateKey\": \"ruleDescription\",\r\n \"values\": [\r\n \"This threat protection rule is used to filter request based on size\"\r\n ]\r\n },\r\n {\r\n \"templateKey\": \"ruleName\",\r\n \"values\": [\r\n \"Message_size_filter\"\r\n ]\r\n },\r\n {\r\n \"templateKey\": \"ruleType\",\r\n \"values\": [\r\n \"DENY\"\r\n ]\r\n },\r\n {\r\n \"templateKey\": \"isEnterpriseGatewayLicensed\",\r\n \"values\": [\r\n \"true\"\r\n ]\r\n },\r\n {\r\n \"templateKey\": \"alertOption\",\r\n \"parameters\": [\r\n {\r\n \"templateKey\": \"alertInterval\",\r\n \"values\": [\r\n \"60\"\r\n ]\r\n },\r\n {\r\n \"templateKey\": \"alertOnEvery\",\r\n \"values\": [\r\n \"false\"\r\n ]\r\n },\r\n {\r\n \"templateKey\": \"alertType\",\r\n \"values\": [\r\n \"None\"\r\n ]\r\n },\r\n {\r\n \"templateKey\": \"emailTo\",\r\n \"values\": [\r\n \"\"\r\n ]\r\n },\r\n {\r\n \"templateKey\": \"flowServiceName\",\r\n \"values\": [\r\n \"\"\r\n ]\r\n },\r\n {\r\n \"templateKey\": \"runAsUser\",\r\n \"values\": [\r\n \"\"\r\n ]\r\n }\r\n ]\r\n },\r\n {\r\n \"templateKey\": \"isRuleEnabled\",\r\n \"values\": [\r\n \"false\"\r\n ]\r\n }\r\n ],\r\n \"policyEnforcements\": [\r\n {\r\n \"enforcements\": [\r\n {\r\n \"enforcementObjectId\": \"b9cfc355-0d11-4ea2-aae9-54df71c80a6d\",\r\n \"order\": \"\"\r\n },\r\n {\r\n \"enforcementObjectId\": \"adea4954-158c-40c6-8d11-b5912349a5f2\",\r\n \"order\": \"\"\r\n },\r\n {\r\n \"enforcementObjectId\": \"d62d9c00-f1ae-4bf8-979a-326171efb772\",\r\n \"order\": \"\"\r\n },\r\n {\r\n \"enforcementObjectId\": \"72a712bb-7134-4328-9701-43fb06fbfeb9\",\r\n \"order\": \"\"\r\n },\r\n {\r\n \"enforcementObjectId\": \"bc5e15ef-0a50-4876-ae98-11ce30e7a285\",\r\n \"order\": \"\"\r\n },\r\n {\r\n \"enforcementObjectId\": \"895f963f-8297-41b9-a4b4-002b7bb71870\",\r\n \"order\": \"\"\r\n },\r\n {\r\n \"enforcementObjectId\": \"96568d84-7f85-4a7d-8c82-c8f90a75a212\",\r\n \"order\": \"\"\r\n },\r\n {\r\n \"enforcementObjectId\": \"ecd4669e-ddce-4b23-af6c-79315d4fae95\",\r\n \"order\": \"\"\r\n }\r\n ],\r\n \"stageKey\": \"threatProtection\"\r\n }\r\n ],\r\n \"global\": true,\r\n \"active\": false,\r\n \"systemPolicy\": false,\r\n \"policyActionTemplateKeys\": [\r\n \"MsgSizeLimitFilter\"\r\n ]\r\n }\r\n}" + } + }, + "500" : { + "description" : "This status code indicates that the server has encountered an error while changing the execution order of the threat protection policy" + }, + "404" : { + "description" : "This status code indicates that the threat protection policy id specified is not found in API Gateway", + "examples" : { + "application/json" : "{\r\n \"errorDetails\": \" Unable to find the resource: 0dfa92ee-fa5e-4c4e-88b2-653048659e8c1\"\r\n}" + } + }, + "401" : { + "description" : "This status code indicates that the user did not provide any user credential or user does not have API Gateway Administrator or API Gateway provider access to change order of the threat protection policy." + }, + "400" : { + "description" : "This status code indicates that the policy id specified is not a threat protection policy", + "examples" : { + "application/json" : "{\r\n \"errorDetails\": \"Move down action supported only for Threat protection policies\"\r\n}" + } + } + }, + "security" : [ { + "Basic" : [ ] + } ] + } + }, + "/policies/{policyId}/moveup" : { + "put" : { + "description" : "This REST request is used to move up the execution order of the Threat protection rule created in API Gateway. This request does not require any request body. This request does not require any request body. If the threat protection policy execution order is changed successfully then the policy details of specified policy will be sent as response.", + "operationId" : "moveUpThreatProtectionRuleByPolicyID", + "consumes" : [ "application/json" ], + "produces" : [ "application/json" ], + "parameters" : [ { + "name" : "policyId", + "in" : "path", + "description" : "This path parameter is used to specify the policy id of the threat protection whose execution order needs to be moved up ", + "required" : true, + "type" : "string", + "x-example" : "732c4526-db9a-4ef9-9782-edda1a6aa9bc" + } ], + "responses" : { + "200" : { + "description" : "This status indicates that the threat protection policy execution order has been changed successfully and policy details of the Threat protection will be in response", + "schema" : { + "$ref" : "#/definitions/Policy" + }, + "examples" : { + "application/json" : "{\r\n \"policy\": {\r\n \"id\": \"7b2cd4a6-49f3-480d-8965-a77971605fb7\",\r\n \"names\": [\r\n {\r\n \"value\": \"Message_size_filter\",\r\n \"locale\": \"English\"\r\n }\r\n ],\r\n \"parameters\": [\r\n {\r\n \"templateKey\": \"customErrorMessage\",\r\n \"values\": [\r\n \"Message size limit exceeded\"\r\n ]\r\n },\r\n {\r\n \"templateKey\": \"action\",\r\n \"values\": [\r\n \"DENY\"\r\n ]\r\n },\r\n {\r\n \"templateKey\": \"enableRule\",\r\n \"values\": [\r\n \"Disable\"\r\n ]\r\n },\r\n {\r\n \"templateKey\": \"rule\",\r\n \"values\": [\r\n \"Message_size_filter\"\r\n ]\r\n },\r\n {\r\n \"templateKey\": \"ruleDescription\",\r\n \"values\": [\r\n \"This threat protection rule is used to filter request based on size\"\r\n ]\r\n },\r\n {\r\n \"templateKey\": \"ruleName\",\r\n \"values\": [\r\n \"Message_size_filter\"\r\n ]\r\n },\r\n {\r\n \"templateKey\": \"ruleType\",\r\n \"values\": [\r\n \"DENY\"\r\n ]\r\n },\r\n {\r\n \"templateKey\": \"isEnterpriseGatewayLicensed\",\r\n \"values\": [\r\n \"true\"\r\n ]\r\n },\r\n {\r\n \"templateKey\": \"alertOption\",\r\n \"parameters\": [\r\n {\r\n \"templateKey\": \"alertInterval\",\r\n \"values\": [\r\n \"60\"\r\n ]\r\n },\r\n {\r\n \"templateKey\": \"alertOnEvery\",\r\n \"values\": [\r\n \"false\"\r\n ]\r\n },\r\n {\r\n \"templateKey\": \"alertType\",\r\n \"values\": [\r\n \"None\"\r\n ]\r\n },\r\n {\r\n \"templateKey\": \"emailTo\",\r\n \"values\": [\r\n \"\"\r\n ]\r\n },\r\n {\r\n \"templateKey\": \"flowServiceName\",\r\n \"values\": [\r\n \"\"\r\n ]\r\n },\r\n {\r\n \"templateKey\": \"runAsUser\",\r\n \"values\": [\r\n \"\"\r\n ]\r\n }\r\n ]\r\n },\r\n {\r\n \"templateKey\": \"isRuleEnabled\",\r\n \"values\": [\r\n \"false\"\r\n ]\r\n }\r\n ],\r\n \"policyEnforcements\": [\r\n {\r\n \"enforcements\": [\r\n {\r\n \"enforcementObjectId\": \"b9cfc355-0d11-4ea2-aae9-54df71c80a6d\",\r\n \"order\": \"\"\r\n },\r\n {\r\n \"enforcementObjectId\": \"adea4954-158c-40c6-8d11-b5912349a5f2\",\r\n \"order\": \"\"\r\n },\r\n {\r\n \"enforcementObjectId\": \"d62d9c00-f1ae-4bf8-979a-326171efb772\",\r\n \"order\": \"\"\r\n },\r\n {\r\n \"enforcementObjectId\": \"72a712bb-7134-4328-9701-43fb06fbfeb9\",\r\n \"order\": \"\"\r\n },\r\n {\r\n \"enforcementObjectId\": \"bc5e15ef-0a50-4876-ae98-11ce30e7a285\",\r\n \"order\": \"\"\r\n },\r\n {\r\n \"enforcementObjectId\": \"895f963f-8297-41b9-a4b4-002b7bb71870\",\r\n \"order\": \"\"\r\n },\r\n {\r\n \"enforcementObjectId\": \"96568d84-7f85-4a7d-8c82-c8f90a75a212\",\r\n \"order\": \"\"\r\n },\r\n {\r\n \"enforcementObjectId\": \"ecd4669e-ddce-4b23-af6c-79315d4fae95\",\r\n \"order\": \"\"\r\n }\r\n ],\r\n \"stageKey\": \"threatProtection\"\r\n }\r\n ],\r\n \"global\": true,\r\n \"active\": false,\r\n \"systemPolicy\": false,\r\n \"policyActionTemplateKeys\": [\r\n \"MsgSizeLimitFilter\"\r\n ]\r\n }\r\n}" + } + }, + "500" : { + "description" : "This status code indicates that the server has encountered an error while changing the execution order of the threat protection policy" + }, + "404" : { + "description" : "This status code indicates that the threat protection policy id specified is not found in API Gateway", + "examples" : { + "application/json" : "{\r\n \"errorDetails\": \" Unable to find the resource: 0dfa92ee-fa5e-4c4e-88b2-653048659e8c1\"\r\n}" + } + }, + "401" : { + "description" : "This status code indicates that the user did not provide any user credential or user does not have API Gateway Administrator or API Gateway provider access to change order of the threat protection policy." + }, + "400" : { + "description" : "This status code indicates that policy id specified is not a threat protection policy", + "examples" : { + "application/json" : "{\r\n \"errorDetails\": \"Move up action supported only for Threat protection policies\"\r\n}" + } + } + }, + "security" : [ { + "Basic" : [ ] + } ] + } + }, + "/policies/{policyId}/activate" : { + "put" : { + "description" : "This REST request is used to activate a global policy and this request doesn't require any request body. This request will try to activate the global policy and if any error occurs during activation it will be reported as response or if the global policy is activated then its policy details active flag set to true will be sent as response. If the global policy have any conflicts then it cannot be activated the conflicts are manually resolved.", + "operationId" : "activateGlobalPolicyByPolicyID", + "consumes" : [ "application/json" ], + "produces" : [ "application/json" ], + "parameters" : [ { + "name" : "policyId", + "in" : "path", + "description" : "The path parameter should be the policy id of global policy that needs to be activated. If the policy id is not belongs to a global policy then error will be reported", + "required" : true, + "type" : "string", + "x-example" : "732c4526-db9a-4ef9-9782-edda1a6aa9bc" + } ], + "responses" : { + "200" : { + "description" : "This status code indicates that the global policy id specified is activated successfully", + "schema" : { + "$ref" : "#/definitions/Policy" + }, + "examples" : { + "application/json" : "{\r\n \"policy\": {\r\n \"id\": \"732c4526-db9a-4ef9-9782-edda1a6aa9bc\",\r\n \"names\": [\r\n {\r\n \"value\": \"a\",\r\n \"locale\": \"English\"\r\n }\r\n ],\r\n \"descriptions\": [\r\n {\r\n \"value\": \"\",\r\n \"locale\": \"English\"\r\n }\r\n ],\r\n \"scope\": {\r\n \"applicableAPITypes\": [\r\n \"REST\",\r\n \"SOAP\"\r\n ],\r\n \"result\": {},\r\n \"scopeConditions\": [],\r\n \"logicalConnector\": \"AND\"\r\n },\r\n \"policyEnforcements\": [\r\n {\r\n \"enforcements\": [\r\n {\r\n \"enforcementObjectId\": \"2e63b365-5fb8-4c8c-b2b3-404045b583f7\",\r\n \"order\": null\r\n }\r\n ],\r\n \"stageKey\": \"IAM\"\r\n }\r\n ],\r\n \"policyScope\": \"GLOBAL\",\r\n \"global\": true,\r\n \"active\": true,\r\n \"systemPolicy\": false\r\n }\r\n}" + } + }, + "500" : { + "description" : "This status code indicates that the server has encountered an error during the activation of global policy. The sample shows the error is due to a conflict between two global policies on the common applicable APIs. The conflict is between this global policy and other active global policy. This happens when an API satisfies the scope of one or more global policy and during the effective policy calculation you might get policy validation error message. The detailed structure of the error is reported for any conflicts that happen during the process activation ", + "examples" : { + "application/json" : "{\r\n \"errorDetails\": \" Conflict between global Policy for API - EMP_POJO_WSDL, Operation - updateEmployee - An API can be associated with only one policy action with template id Identify & Authorize Application\",\r\n \"reason\": [\r\n {\r\n \"apiId\": \"421eb4bf-b2d0-40a4-900f-ad5fd0a2484e\",\r\n \"apiName\": \"EMP_POJO_WSDL\",\r\n \"apiType\": \"SOAP\",\r\n \"errorOnResource\": [\r\n {\r\n \"conflictingPolicies\": {\r\n \"732c4526-db9a-4ef9-9782-edda1a6aa9bc\": {\r\n \"names\": [\r\n {\r\n \"value\": \"a\",\r\n \"locale\": \"English\"\r\n }\r\n ],\r\n \"policyActionsIds\": [\r\n \"2e63b365-5fb8-4c8c-b2b3-404045b583f7\"\r\n ],\r\n \"policyId\": \"732c4526-db9a-4ef9-9782-edda1a6aa9bc\",\r\n \"policyScope\": \"GLOBAL\",\r\n \"stageKey\": \"IAM\"\r\n }\r\n },\r\n \"error\": {\r\n \"allowedOccurence\": \"once\",\r\n \"errorType\": \"occurence\",\r\n \"policyActionName\": \"[Identify & Authorize Application]\",\r\n \"templateId\": \"evaluatePolicy\"\r\n },\r\n \"errorMessage\": \" An API can be associated with only one policy action with template id Identify & Authorize Application\",\r\n \"policyDetails\": {\r\n \"names\": [\r\n {\r\n \"value\": \"Employee Global Policy\",\r\n \"locale\": \"English\"\r\n }\r\n ],\r\n \"policyActionsIds\": [\r\n \"31c729f9-4f1c-4074-acba-6975c0668433\"\r\n ],\r\n \"policyId\": \"7a16baec-7925-4579-966b-bfe58265853d\",\r\n \"policyScope\": \"GLOBAL\",\r\n \"stageKey\": \"IAM\"\r\n },\r\n \"resource\": \"updateEmployee\"\r\n },\r\n {\r\n \"conflictingPolicies\": {\r\n \"732c4526-db9a-4ef9-9782-edda1a6aa9bc\": {\r\n \"names\": [\r\n {\r\n \"value\": \"a\",\r\n \"locale\": \"English\"\r\n }\r\n ],\r\n \"policyActionsIds\": [\r\n \"2e63b365-5fb8-4c8c-b2b3-404045b583f7\"\r\n ],\r\n \"policyId\": \"732c4526-db9a-4ef9-9782-edda1a6aa9bc\",\r\n \"policyScope\": \"GLOBAL\",\r\n \"stageKey\": \"IAM\"\r\n }\r\n },\r\n \"error\": {\r\n \"allowedOccurence\": \"once\",\r\n \"errorType\": \"occurence\",\r\n \"policyActionName\": \"[Identify & Authorize Application]\",\r\n \"templateId\": \"evaluatePolicy\"\r\n },\r\n \"errorMessage\": \" An API can be associated with only one policy action with template id Identify & Authorize Application\",\r\n \"policyDetails\": {\r\n \"names\": [\r\n {\r\n \"value\": \"Employee Global Policy\",\r\n \"locale\": \"English\"\r\n }\r\n ],\r\n \"policyActionsIds\": [\r\n \"31c729f9-4f1c-4074-acba-6975c0668433\"\r\n ],\r\n \"policyId\": \"7a16baec-7925-4579-966b-bfe58265853d\",\r\n \"policyScope\": \"GLOBAL\",\r\n \"stageKey\": \"IAM\"\r\n },\r\n \"resource\": \"addEmployee\"\r\n },\r\n {\r\n \"conflictingPolicies\": {\r\n \"732c4526-db9a-4ef9-9782-edda1a6aa9bc\": {\r\n \"names\": [\r\n {\r\n \"value\": \"a\",\r\n \"locale\": \"English\"\r\n }\r\n ],\r\n \"policyActionsIds\": [\r\n \"2e63b365-5fb8-4c8c-b2b3-404045b583f7\"\r\n ],\r\n \"policyId\": \"732c4526-db9a-4ef9-9782-edda1a6aa9bc\",\r\n \"policyScope\": \"GLOBAL\",\r\n \"stageKey\": \"IAM\"\r\n }\r\n },\r\n \"error\": {\r\n \"allowedOccurence\": \"once\",\r\n \"errorType\": \"occurence\",\r\n \"policyActionName\": \"[Identify & Authorize Application]\",\r\n \"templateId\": \"evaluatePolicy\"\r\n },\r\n \"errorMessage\": \" An API can be associated with only one policy action with template id Identify & Authorize Application\",\r\n \"policyDetails\": {\r\n \"names\": [\r\n {\r\n \"value\": \"Employee Global Policy\",\r\n \"locale\": \"English\"\r\n }\r\n ],\r\n \"policyActionsIds\": [\r\n \"31c729f9-4f1c-4074-acba-6975c0668433\"\r\n ],\r\n \"policyId\": \"7a16baec-7925-4579-966b-bfe58265853d\",\r\n \"policyScope\": \"GLOBAL\",\r\n \"stageKey\": \"IAM\"\r\n },\r\n \"resource\": \"deleteEmployee\"\r\n },\r\n {\r\n \"conflictingPolicies\": {\r\n \"732c4526-db9a-4ef9-9782-edda1a6aa9bc\": {\r\n \"names\": [\r\n {\r\n \"value\": \"a\",\r\n \"locale\": \"English\"\r\n }\r\n ],\r\n \"policyActionsIds\": [\r\n \"2e63b365-5fb8-4c8c-b2b3-404045b583f7\"\r\n ],\r\n \"policyId\": \"732c4526-db9a-4ef9-9782-edda1a6aa9bc\",\r\n \"policyScope\": \"GLOBAL\",\r\n \"stageKey\": \"IAM\"\r\n }\r\n },\r\n \"error\": {\r\n \"allowedOccurence\": \"once\",\r\n \"errorType\": \"occurence\",\r\n \"policyActionName\": \"[Identify & Authorize Application]\",\r\n \"templateId\": \"evaluatePolicy\"\r\n },\r\n \"errorMessage\": \" An API can be associated with only one policy action with template id Identify & Authorize Application\",\r\n \"policyDetails\": {\r\n \"names\": [\r\n {\r\n \"value\": \"Employee Global Policy\",\r\n \"locale\": \"English\"\r\n }\r\n ],\r\n \"policyActionsIds\": [\r\n \"31c729f9-4f1c-4074-acba-6975c0668433\"\r\n ],\r\n \"policyId\": \"7a16baec-7925-4579-966b-bfe58265853d\",\r\n \"policyScope\": \"GLOBAL\",\r\n \"stageKey\": \"IAM\"\r\n },\r\n \"resource\": \"getEmployee\"\r\n }\r\n ]\r\n }\r\n ]\r\n}" + } + }, + "404" : { + "description" : "This status code indicates that the policy id specified is not found in API Gateway", + "examples" : { + "application/json" : "{\r\n \"errorDetails\": \" Unable to find the resource: 732c4526-db9a-4ef9-9782-edda1a6aa9bc1\"\r\n}" + } + }, + "401" : { + "description" : "This status code indicates that the user did not provide any user credential or user does not have API Gateway Administrator access to activate global policy." + }, + "400" : { + "description" : "This status code indicates that the request is not correct. It can be either due to incorrect policy type or trying to activate already active policy. The sample shows that the policy is specified is not a global policy id.", + "examples" : { + "application/json" : "{\r\n \"errorDetails\": \" Policy [PT1] is not a global policy. Cannot be activated/deactivated.\"\r\n}" + } + } + }, + "security" : [ { + "Basic" : [ ] + } ] + } + }, + "/policies/{policyId}/deactivate" : { + "put" : { + "description" : "This REST request is used to deactivate a global policy and it doesn't require any request body. This request tries to deactivate the global policy and if any error occurs during deactivation will be reported as response or if the global policy deactivated the policy details of a global policy with active flag set to false is sent as response. An active global policy cannot have conflicts with other active global policy and hence the deactivation fails only when the conflict occurs between active global policy that is specified and one or more applicable active APIs. This can happen when the applicable active API policy action might depend on one or more policy action from the specified global policy. If you deactivate this policy, it would cause the active API to have an unstable state. Hence the deactivation is reported as failed in this case.", + "operationId" : "deactivateGlobalPolicyByPolicyID", + "consumes" : [ "application/json" ], + "produces" : [ "application/json" ], + "parameters" : [ { + "name" : "policyId", + "in" : "path", + "description" : "The path parameter should be the policy id of global policy that needs to be deactivated. If the policy id is not belongs to a global policy then error will be reported", + "required" : true, + "type" : "string", + "x-example" : "732c4526-db9a-4ef9-9782-edda1a6aa9bc" + } ], + "responses" : { + "200" : { + "description" : "This status code indicates that the global policy id specified is deactivated successfully", + "schema" : { + "$ref" : "#/definitions/Policy" + }, + "examples" : { + "application/json" : "{\r\n \"policy\": {\r\n \"id\": \"732c4526-db9a-4ef9-9782-edda1a6aa9bc\",\r\n \"names\": [\r\n {\r\n \"value\": \"a\",\r\n \"locale\": \"English\"\r\n }\r\n ],\r\n \"descriptions\": [\r\n {\r\n \"value\": \"\",\r\n \"locale\": \"English\"\r\n }\r\n ],\r\n \"scope\": {\r\n \"applicableAPITypes\": [\r\n \"REST\",\r\n \"SOAP\"\r\n ],\r\n \"result\": {},\r\n \"scopeConditions\": [],\r\n \"logicalConnector\": \"AND\"\r\n },\r\n \"policyEnforcements\": [\r\n {\r\n \"enforcements\": [\r\n {\r\n \"enforcementObjectId\": \"2e63b365-5fb8-4c8c-b2b3-404045b583f7\",\r\n \"order\": null\r\n }\r\n ],\r\n \"stageKey\": \"IAM\"\r\n }\r\n ],\r\n \"policyScope\": \"GLOBAL\",\r\n \"global\": true,\r\n \"active\": false,\r\n \"systemPolicy\": false\r\n }\r\n}" + } + }, + "500" : { + "description" : "This status code indicates that the server has encountered an error during the deactivation of global policy. The sample shows the error due to policy dependencies between an active API and the global policy specified", + "examples" : { + "application/json" : "{\r\n \"errorDetails\": \" Conflict between global Policy for API - EMP, Path - /employee/{id}, Method - get - Policy action Throttling Traffic Optimization is dependent to policy action(s) [Identify & Authorize Application]\",\r\n \"reason\": [\r\n {\r\n \"apiId\": \"e60d6fe9-3612-469f-b33a-fb4c97c72b3b\",\r\n \"apiName\": \"EMP\",\r\n \"apiType\": \"REST\",\r\n \"errorOnResource\": [\r\n {\r\n \"error\": {\r\n \"errorType\": \"occurence\",\r\n \"missingDependency\": [\r\n \"evaluatePolicy\"\r\n ],\r\n \"policyActionName\": \"[Throttling Traffic Optimization]\",\r\n \"templateId\": \"throttle\"\r\n },\r\n \"errorMessage\": \" Policy action Throttling Traffic Optimization is dependent to policy action(s) [Identify & Authorize Application]\",\r\n \"method\": \"get\",\r\n \"policyDetails\": {\r\n \"names\": [\r\n {\r\n \"value\": \"Default Policy for API EMP\",\r\n \"locale\": \"English\"\r\n }\r\n ],\r\n \"policyActionsIds\": [\r\n \"9adf1ff1-efdc-4c41-8998-794d316eaced\"\r\n ],\r\n \"policyId\": \"d7672248-7d25-444e-a9b6-853e1d95d1c6\",\r\n \"policyScope\": \"SERVICE\",\r\n \"stageKey\": \"LMT\"\r\n },\r\n \"resource\": \"/employee/{id}\"\r\n }\r\n ]\r\n }\r\n ]\r\n}" + } + }, + "404" : { + "description" : "This status code indicates that the policy id specified is not found in API Gateway", + "examples" : { + "application/json" : "{\r\n \"errorDetails\": \" Unable to find the resource: 732c4526-db9a-4ef9-9782-edda1a6aa9bc1\"\r\n}" + } + }, + "401" : { + "description" : "This status code indicates that the user did not provide any user credential or user does not have API Gateway Administrator access to deactivate global policy." + }, + "400" : { + "description" : "This status code indicates that the request is not correct. It can be either due to incorrect policy type or trying to deactivate already inactive policy. The sample shows that the policy is specified is not a global policy id.", + "examples" : { + "application/json" : "{\r\n \"errorDetails\": \" Policy [PT1] is not a global policy. Cannot be activated/deactivated.\"\r\n}" + } + } + }, + "security" : [ { + "Basic" : [ ] + } ] + } + }, + "/denialofservice/deniedIP" : { + "get" : { + "description" : "This GET method is used to retrieve the list of IPs are denied ( IPs that violated the threat protection rules configured).", + "operationId" : "getDeniedIPs", + "produces" : [ "application/json" ], + "parameters" : [ ], + "responses" : { + "200" : { + "description" : "This status code indicates that the denied IPs successfully returned. The response contains the list of Denied IPs.", + "schema" : { + "type" : "array", + "items" : { + "type" : "string" + } + }, + "examples" : { + "application/json" : "{\r\n \"deniedIPList\": [\r\n \"10.60.37.99\"\r\n ]\r\n}" + } + }, + "401" : { + "description" : "This status code indicates that the user did not provide any user credential or user does not have API Gateway Administrator access to get denied IPs list." + } + }, + "security" : [ { + "Basic" : [ ] + } ] + }, + "delete" : { + "description" : "This DELETE method is used to remove the IP from Denied IPs list. Once removed the request from IP will be processed.", + "operationId" : "deleteDeniedIPs", + "parameters" : [ { + "name" : "IP", + "in" : "query", + "required" : true, + "type" : "string", + "x-example" : "IP=127.0.0.1" + } ], + "responses" : { + "200" : { + "description" : "This status code indicates that the denied IPs successfully removed from the denied IPs list." + }, + "401" : { + "description" : "This status code indicates that the user did not provide any user credential or user does not have API Gateway Administrator access to delete IP from denied IPs list." + } + }, + "security" : [ { + "Basic" : [ ] + } ] + } + }, + "/policyActionTemplates/{policyActionTemplateId}" : { + "get" : { + "description" : "This REST Request is used to get the template details of a policy action.. To retrieve the policy action template for a particular policy action, specify the policy action template name as a path parameter ", + "consumes" : [ "application/json" ], + "produces" : [ "application/json" ], + "parameters" : [ { + "name" : "policyActionTemplateId", + "in" : "path", + "description" : "This is a path parameter. It will be used to fetch policy action template of a particular template.", + "required" : true, + "type" : "string", + "x-example" : "entryProtocolPolicy" + } ], + "responses" : { + "401" : { + "description" : "This status code indicates that the user did not provide any user credential or user does not have API Gateway Administrator or API Gateway provider access to get the policy action template details." + }, + "404" : { + "description" : "This status code indicates that the policy action template specified is not found", + "examples" : { + "application/json" : "{\r\n \"errorDetails\": \" Unable to find the resource: nonExisitingProtocol\"\r\n}" + } + }, + "200" : { + "description" : "This status code indicates policy action template is available and the response body will contain the policy action template details", + "schema" : { + "$ref" : "#/definitions/PolicyActionTemplate" + }, + "examples" : { + "application/json" : "{\r\n \"policyActionTemplates\": {\r\n \"templateKey\": \"entryProtocolPolicy\",\r\n \"names\": [\r\n {\r\n \"value\": \"Require HTTP / HTTPS\",\r\n \"locale\": \"en\"\r\n }\r\n ],\r\n \"descriptions\": [\r\n {\r\n \"value\": \"Encapsulates the access protocol (HTTP and/or HTTPS) which will be used by client for communicating to the API-Gateway.\",\r\n \"locale\": \"en\"\r\n }\r\n ],\r\n \"applicableServiceTypes\": [\r\n \"REST\",\r\n \"SOAP\"\r\n ],\r\n \"parameterTemplatesReference\": [],\r\n \"parameterTemplates\": [\r\n {\r\n \"templateKey\": \"protocol\",\r\n \"names\": [\r\n {\r\n \"value\": \"Protocol\",\r\n \"locale\": \"en\"\r\n }\r\n ],\r\n \"descriptions\": [\r\n {\r\n \"value\": \"Access protocol for bridging between the client and API-Gateway.\",\r\n \"locale\": \"en\"\r\n }\r\n ],\r\n \"type\": \"STRING\",\r\n \"isArray\": true,\r\n \"isRequired\": true,\r\n \"canRender\": true,\r\n \"defaultValues\": [\r\n \"http\"\r\n ],\r\n \"possibleValues\": [\r\n {\r\n \"names\": [\r\n {\r\n \"value\": \"HTTP\",\r\n \"locale\": \"en\"\r\n }\r\n ],\r\n \"value\": \"http\"\r\n },\r\n {\r\n \"names\": [\r\n {\r\n \"value\": \"HTTPS\",\r\n \"locale\": \"en\"\r\n }\r\n ],\r\n \"value\": \"https\"\r\n }\r\n ]\r\n },\r\n {\r\n \"templateKey\": \"soapVersion\",\r\n \"names\": [\r\n {\r\n \"value\": \"SOAP version\",\r\n \"locale\": \"en\"\r\n }\r\n ],\r\n \"descriptions\": [\r\n {\r\n \"value\": \"Supported SOAP Version.\",\r\n \"locale\": \"en\"\r\n }\r\n ],\r\n \"type\": \"STRING\",\r\n \"isArray\": false,\r\n \"isRequired\": false,\r\n \"canRender\": true,\r\n \"defaultValues\": [\r\n \"soap\"\r\n ],\r\n \"possibleValues\": [\r\n {\r\n \"names\": [\r\n {\r\n \"value\": \"SOAP 1.1\",\r\n \"locale\": \"en\"\r\n }\r\n ],\r\n \"value\": \"soap\"\r\n },\r\n {\r\n \"names\": [\r\n {\r\n \"value\": \"SOAP 1.2\",\r\n \"locale\": \"en\"\r\n }\r\n ],\r\n \"value\": \"soap12\"\r\n }\r\n ],\r\n \"applicableServiceTypes\": [\r\n \"SOAP\"\r\n ]\r\n }\r\n ],\r\n \"occurence\": \"once\",\r\n \"stageSpecific\": null,\r\n \"dependentActions\": null,\r\n \"dependentActionsConnector\": null,\r\n \"mutuallyExclusiveActions\": null,\r\n \"order\": {\r\n \"sequence\": [\r\n \"insequence\"\r\n ],\r\n \"orderPosition\": \"first\",\r\n \"isCustomOrderSupported\": false,\r\n \"policyTemplateIDs\": null\r\n },\r\n \"requiredParametersKeys\": [\r\n \"protocol\"\r\n ],\r\n \"canAppliedAtResourceMethodLevel\": false\r\n }\r\n}" + } + } + }, + "security" : [ { + "Basic" : [ ] + } ] + } + }, + "/policyActionTemplates" : { + "get" : { + "description" : "This REST Request is used to get the template detail for list of policy action.", + "consumes" : [ "application/json" ], + "produces" : [ "application/json" ], + "parameters" : [ { + "name" : "policyActionTemplates", + "in" : "query", + "description" : "This is a query parameter. It will be used to fetch policy action templates for list of policy action.", + "required" : false, + "type" : "string", + "x-example" : "policyActionTemplates=setMediaType,entryProtocolPolicy" + } ], + "responses" : { + "401" : { + "description" : "This status code indicates that the user did not provide any user credential or user does not have API Gateway Administrator or API Gateway provider access to get policy action template." + }, + "200" : { + "description" : "This status code indicates the server has processed the request. The response body will contain the policy action templates for valid policy actions. If any of the policy action template specified is invalid, it will ommit that policy action template and return the response with remaining valid policy action template.", + "schema" : { + "type" : "array", + "items" : { + "$ref" : "#/definitions/PolicyActionTemplate" + } + }, + "examples" : { + "application/json" : "{\r\n \"policyActionTemplates\": [\r\n {\r\n \"templateKey\": \"setMediaType\",\r\n \"names\": [\r\n {\r\n \"value\": \"Set Media Type\",\r\n \"locale\": \"en\"\r\n }\r\n ],\r\n \"descriptions\": [\r\n {\r\n \"value\": \"This policy is used to configure the default media type values for Content-Type and Accept headers. These values shall be used as the Content-Type or Accept-Header respectively, if no Content-Type or Accept-Header is specified in the run-time invoke request.\",\r\n \"locale\": \"en\"\r\n }\r\n ],\r\n \"applicableServiceTypes\": [\r\n \"REST\"\r\n ],\r\n \"parameterTemplatesReference\": [],\r\n \"parameterTemplates\": [\r\n {\r\n \"templateKey\": \"defaultContentType\",\r\n \"names\": [\r\n {\r\n \"value\": \"Default Content-Type\",\r\n \"locale\": \"en\"\r\n }\r\n ],\r\n \"descriptions\": [\r\n {\r\n \"value\": \"The Media Type value configured in this parameter will be sent as the Content-Type if no Content-Type is specified in the run-time invoke request.\",\r\n \"locale\": \"en\"\r\n }\r\n ],\r\n \"type\": \"STRING\",\r\n \"isArray\": false,\r\n \"isRequired\": false,\r\n \"canRender\": true\r\n },\r\n {\r\n \"templateKey\": \"defaultAccept\",\r\n \"names\": [\r\n {\r\n \"value\": \"Default Accept Header\",\r\n \"locale\": \"en\"\r\n }\r\n ],\r\n \"descriptions\": [\r\n {\r\n \"value\": \"The Media Type value configured in this parameter will be used as the Accept header if no Accept header is specified in the run-time invoke request.\",\r\n \"locale\": \"en\"\r\n }\r\n ],\r\n \"type\": \"STRING\",\r\n \"isArray\": false,\r\n \"isRequired\": false,\r\n \"canRender\": true\r\n }\r\n ],\r\n \"occurence\": \"once\",\r\n \"stageSpecific\": null,\r\n \"dependentActions\": [],\r\n \"dependentActionsConnector\": null,\r\n \"mutuallyExclusiveActions\": null,\r\n \"order\": {\r\n \"sequence\": [\r\n \"insequence\"\r\n ],\r\n \"orderPosition\": \"last\",\r\n \"isCustomOrderSupported\": false,\r\n \"policyTemplateIDs\": null\r\n },\r\n \"requiredParametersKeys\": [],\r\n \"canAppliedAtResourceMethodLevel\": false\r\n },\r\n {\r\n \"templateKey\": \"entryProtocolPolicy\",\r\n \"names\": [\r\n {\r\n \"value\": \"Require HTTP / HTTPS\",\r\n \"locale\": \"en\"\r\n }\r\n ],\r\n \"descriptions\": [\r\n {\r\n \"value\": \"Encapsulates the access protocol (HTTP and/or HTTPS) which will be used by client for communicating to the API-Gateway.\",\r\n \"locale\": \"en\"\r\n }\r\n ],\r\n \"applicableServiceTypes\": [\r\n \"REST\",\r\n \"SOAP\"\r\n ],\r\n \"parameterTemplatesReference\": [],\r\n \"parameterTemplates\": [\r\n {\r\n \"templateKey\": \"protocol\",\r\n \"names\": [\r\n {\r\n \"value\": \"Protocol\",\r\n \"locale\": \"en\"\r\n }\r\n ],\r\n \"descriptions\": [\r\n {\r\n \"value\": \"Access protocol for bridging between the client and API-Gateway.\",\r\n \"locale\": \"en\"\r\n }\r\n ],\r\n \"type\": \"STRING\",\r\n \"isArray\": true,\r\n \"isRequired\": true,\r\n \"canRender\": true,\r\n \"defaultValues\": [\r\n \"http\"\r\n ],\r\n \"possibleValues\": [\r\n {\r\n \"names\": [\r\n {\r\n \"value\": \"HTTP\",\r\n \"locale\": \"en\"\r\n }\r\n ],\r\n \"value\": \"http\"\r\n },\r\n {\r\n \"names\": [\r\n {\r\n \"value\": \"HTTPS\",\r\n \"locale\": \"en\"\r\n }\r\n ],\r\n \"value\": \"https\"\r\n }\r\n ]\r\n },\r\n {\r\n \"templateKey\": \"soapVersion\",\r\n \"names\": [\r\n {\r\n \"value\": \"SOAP version\",\r\n \"locale\": \"en\"\r\n }\r\n ],\r\n \"descriptions\": [\r\n {\r\n \"value\": \"Supported SOAP Version.\",\r\n \"locale\": \"en\"\r\n }\r\n ],\r\n \"type\": \"STRING\",\r\n \"isArray\": false,\r\n \"isRequired\": false,\r\n \"canRender\": true,\r\n \"defaultValues\": [\r\n \"soap\"\r\n ],\r\n \"possibleValues\": [\r\n {\r\n \"names\": [\r\n {\r\n \"value\": \"SOAP 1.1\",\r\n \"locale\": \"en\"\r\n }\r\n ],\r\n \"value\": \"soap\"\r\n },\r\n {\r\n \"names\": [\r\n {\r\n \"value\": \"SOAP 1.2\",\r\n \"locale\": \"en\"\r\n }\r\n ],\r\n \"value\": \"soap12\"\r\n }\r\n ],\r\n \"applicableServiceTypes\": [\r\n \"SOAP\"\r\n ]\r\n }\r\n ],\r\n \"occurence\": \"once\",\r\n \"stageSpecific\": null,\r\n \"dependentActions\": null,\r\n \"dependentActionsConnector\": null,\r\n \"mutuallyExclusiveActions\": null,\r\n \"order\": {\r\n \"sequence\": [\r\n \"insequence\"\r\n ],\r\n \"orderPosition\": \"first\",\r\n \"isCustomOrderSupported\": false,\r\n \"policyTemplateIDs\": null\r\n },\r\n \"requiredParametersKeys\": [\r\n \"protocol\"\r\n ],\r\n \"canAppliedAtResourceMethodLevel\": false\r\n }\r\n ]\r\n}" + } + } + }, + "security" : [ { + "Basic" : [ ] + } ] + } + } + }, + "securityDefinitions" : { + "Basic" : { + "description" : "API Gateway Administrator and API Gateway provider", + "type" : "basic" + } + }, + "definitions" : { + "ExtendedProperties" : { + "type" : "object", + "properties" : { + "key" : { + "type" : "string" + }, + "value" : { + "type" : "string" + } + } + }, + "InternationalizedString" : { + "type" : "object", + "properties" : { + "value" : { + "type" : "string", + "description" : "This property will hold the actual string" + }, + "locale" : { + "type" : "string", + "description" : "This property will have the localization information of the property 'value'." + } + }, + "description" : "This model is used to store a string with its corresponding locale" + }, + "PolicyAction" : { + "type" : "object", + "properties" : { + "id" : { + "type" : "string", + "description" : "Policy Action ID" + }, + "names" : { + "type" : "array", + "description" : "List of policy action names with corresponding locale information", + "items" : { + "$ref" : "#/definitions/InternationalizedString" + } + }, + "descriptions" : { + "type" : "array", + "description" : "List of policy action description with corresponding locale information", + "items" : { + "$ref" : "#/definitions/InternationalizedString" + } + }, + "templateKey" : { + "type" : "string", + "description" : "Template key of the policy actions" + }, + "parameters" : { + "type" : "array", + "description" : "This is the list of values that are configured for this policy actions", + "items" : { + "$ref" : "#/definitions/PolicyActionParameter" + } + }, + "stageKey" : { + "type" : "string" + }, + "active" : { + "type" : "boolean" + } + }, + "description" : "This model contains details about a policy action in API Gateway" + }, + "PolicyActionParameter" : { + "type" : "object", + "required" : [ "templateKey" ], + "properties" : { + "templateKey" : { + "type" : "string", + "description" : "parameter template key." + }, + "values" : { + "type" : "array", + "description" : "array of values for this parameter template key", + "items" : { + "type" : "string" + } + }, + "parameters" : { + "type" : "array", + "description" : "If this policy action parameter is complex type then array of policy action parameter will be the value for this parameter template key", + "items" : { + "$ref" : "#/definitions/PolicyActionParameter" + } + }, + "extendedProperties" : { + "type" : "array", + "items" : { + "$ref" : "#/definitions/ExtendedProperties" + } + }, + "type" : { + "type" : "string" + } + }, + "description" : "This model represent the values needed for a policy action to execute. This can be either primitive type or complex structure that in turn refer to another PolicyActionParameter" + }, + "MobileApplicationConfiguration" : { + "type" : "object", + "properties" : { + "mobileApplications" : { + "type" : "array", + "description" : "Configure Mobile Application names to be filtered when Threat protection 'Mobile App Filter' Rule enforced", + "items" : { + "type" : "string" + } + }, + "mobileAppDeviceTypes" : { + "type" : "array", + "description" : "Configure Device Types to be filtered when Threat protection 'Mobile App Filter' Rule enforced", + "items" : { + "type" : "string" + } + } + }, + "description" : "Configured values are used in Threat protection Rules 'Mobile App filter'" + }, + "AssertionConfiguration" : { + "type" : "object", + "properties" : { + "assertionId" : { + "type" : "string", + "description" : "A unique ID for the assertion", + "readOnly" : true + }, + "Assertion name" : { + "type" : "string", + "description" : "Name of the assertion" + }, + "Assertion element" : { + "type" : "string", + "description" : "XML element which represents the assertion" + }, + "Assertion type" : { + "type" : "string", + "description" : "Type of assertion(tokenAssertion/bindingAssertion)", + "enum" : [ "tokenAssertion", "bindingAssertion", "policyAssertion" ] + } + } + }, + "PolicyEnforcementStage" : { + "type" : "object", + "properties" : { + "stageKey" : { + "type" : "string", + "description" : "The unique key for the stage." + }, + "names" : { + "type" : "array", + "description" : "Stage name with corresponding locale", + "items" : { + "$ref" : "#/definitions/InternationalizedString" + } + }, + "descriptions" : { + "type" : "array", + "description" : "Stage description with corresponding locale", + "items" : { + "$ref" : "#/definitions/InternationalizedString" + } + }, + "policyActionTempaltes" : { + "type" : "array", + "description" : "The list of policy enforcements can be applied on the respective stage.", + "items" : { + "type" : "string" + } + }, + "sequence" : { + "type" : "string", + "description" : "Sequence of the stage.\n 1. insequence - Stages or policies marked with this sequence will be executed when the request comes to API Gateway and before the request dispatched to native service. \n 2. outsequence - Stages or policies marked with this sequence will be executed when the request goes out of API Gateway to the invoker. \n 3. faultsequence - Stages or policies marked with this sequence will be executed when native service return any error.", + "enum" : [ "insequence", "outsequence", "faultsequence" ] + } + }, + "description" : "Each Policy Stage contains one or more policies. It provide you a the list of policy enforcement associated with each stage and its sequence either in, out or fault." + }, + "Attribute" : { + "type" : "object", + "required" : [ "attributeName", "operation", "value" ], + "properties" : { + "attributeName" : { + "type" : "string", + "description" : "The field name on which needs to be satisfied by the APIs.", + "enum" : [ "API_NAME", "API_DESCRIPTION", "API_VERSION", "TAGS", "GET", "PUT", "POST", "DELETE", "PATCH" ] + }, + "operation" : { + "type" : "string", + "description" : "Operation that needs to performed on the field specified.", + "enum" : [ "EQUALS", "CONTAINS", "NOT_CONTAINS", "STARTS_WITH", "NOT_STARTS_WITH", "LESS_THAN", "GREATER_THAN", "ENDS_WITH", "NOT_EQUALS" ] + }, + "value" : { + "type" : "string", + "description" : "Value the needs to processed on the field and operation specified." + } + }, + "description" : "An Attribute contains the field of the an API or resource or operation and the value to be processed on the fields based on the operation specified. If attribute specifies any Http Method then operation wont have any significance." + }, + "Enforcement" : { + "type" : "object", + "properties" : { + "enforcementObjectId" : { + "type" : "string", + "description" : "Policy enforcement id" + }, + "order" : { + "type" : "string", + "description" : "enforcement order" + }, + "parentPolicyId" : { + "type" : "string" + } + }, + "description" : "Model contains a policy enforcement id and its order" + }, + "Policy" : { + "type" : "object", + "properties" : { + "id" : { + "type" : "string", + "description" : "Policy ID", + "readOnly" : true + }, + "names" : { + "type" : "array", + "description" : "This contains list of names for the policy with corresponding locale information.", + "items" : { + "$ref" : "#/definitions/InternationalizedString" + } + }, + "descriptions" : { + "type" : "array", + "description" : "This contains list of description for the policy with corresponding locale information.", + "items" : { + "$ref" : "#/definitions/InternationalizedString" + } + }, + "parameters" : { + "type" : "array", + "description" : "This basic details of a threat protection rule such as rule name, description, rule action, custom error message etc.will be stored in this property.", + "items" : { + "$ref" : "#/definitions/PolicyActionParameter" + } + }, + "scope" : { + "description" : "This property is used to specify the scope for a GLOBAL policy.This is applicable only for GLOBAL Policy. If it is specified for any other policy it wont be processed.", + "$ref" : "#/definitions/Scope" + }, + "policyEnforcements" : { + "type" : "array", + "description" : "This property contains list of policy (runtime) enforcement id grouped based on the stages.", + "items" : { + "$ref" : "#/definitions/PolicyEnforcements" + } + }, + "policyScope" : { + "type" : "string", + "description" : "This property is used to refer the scope of the policy.", + "enum" : [ "GLOBAL", "METHOD", "OPERATION", "RESOURCE", "SERVICE", "PACKAGE", "TEMPLATE", "SCOPE" ] + }, + "active" : { + "type" : "boolean" + }, + "global" : { + "type" : "boolean" + }, + "systemPolicy" : { + "type" : "boolean" + } + }, + "description" : "A policy is nothing but a group of policy (runtime) enforcements. It contains the list of policy enforcement ids by stage wise. A stage in a policy belongs execution order of a policy enforcement. Each policy enforcement belong to only one of the stage. For more details about policy stage please refer policyStages resource in API Gateway Policy Management service. The policy can be Service/scope/package/global/template." + }, + "PolicyEnforcements" : { + "type" : "object", + "properties" : { + "enforcements" : { + "type" : "array", + "items" : { + "$ref" : "#/definitions/Enforcement" + } + }, + "stageKey" : { + "type" : "string", + "description" : "Policy stage. User can refer resource /policyStages to get the list stages can be added here" + } + }, + "description" : "This model contains the list of policy action id specific to a stage." + }, + "Scope" : { + "type" : "object", + "required" : [ "applicableAPITypes", "logicalConnector" ], + "properties" : { + "applicableAPITypes" : { + "type" : "array", + "description" : "This contains the list of API types on which the global policy can be applied. For now only REST and SOAP API types are allowed.", + "items" : { + "type" : "string", + "enum" : [ "SOAP", "REST", "ODATA", "WEBSOCKET" ] + } + }, + "scopeConditions" : { + "type" : "array", + "items" : { + "$ref" : "#/definitions/ScopeCondition" + } + }, + "logicalConnector" : { + "type" : "string", + "description" : "The field is used to perform the logical operation between the scope condition. It will be valid only if we specify scope condition. The default value for this field is AND", + "enum" : [ "AND", "OR" ] + } + }, + "description" : "A scope is used to define the filtering criteria for Global policy. Using scope we can specify the APIs or Resources or opertaion on which the policy enforcements needs to be applied." + }, + "ScopeCondition" : { + "type" : "object", + "required" : [ "attributes", "filterType" ], + "properties" : { + "filterType" : { + "type" : "string", + "description" : "This property is used to define the type of filter we will be using to define attributes. The allowed values are apis, httpMethod, tags. If API type is specified we can specify the fields of API such as apiName, apiDescription, apiVersion. If httpMethod specified we can specify the httpMethods(GET/POST/PUT/DELETE/POST) of the resource to filter the resource. This filter type is used for REST APIs only. If tag type is specified we can specify the field tags in API to filter api using tags. This is also only applicable for REST APIs.", + "enum" : [ "API", "HTTP_METHOD", "TAGS" ] + }, + "attributes" : { + "type" : "array", + "items" : { + "$ref" : "#/definitions/Attribute" + } + } + }, + "description" : "For each scope we can define set of scope condition. A scope condition will have set of attributes that needs to be satisfied by the APIs or Resource or Operation for applying the policy on that API or Resource or Operation. The logical operator between the attributes is always AND." + }, + "APIResponseDelete" : { + "type" : "object", + "properties" : { + "id" : { + "type" : "string", + "description" : "API Id" + }, + "apiName" : { + "type" : "string", + "description" : "API Name" + }, + "apiVersion" : { + "type" : "string", + "description" : "API Version" + }, + "type" : { + "type" : "string", + "description" : "API Type" + }, + "publishedPortals" : { + "type" : "array", + "description" : "Published portals of an API", + "items" : { + "type" : "string" + } + }, + "systemVersion" : { + "type" : "integer", + "format" : "int32", + "description" : "System version of an API" + }, + "active" : { + "type" : "boolean" + }, + "apiId" : { + "type" : "string" + }, + "responseStatus" : { + "type" : "string", + "enum" : [ "SUCCESS", "ERROR", "NOT_FOUND", "BAD_REQUEST", "PARTIAL_SUCCESS" ] + }, + "errorReason" : { + "type" : "string" + } + }, + "description" : "This model contains the basics details of an API." + }, + "EnforcementValidationError" : { + "type" : "object", + "properties" : { + "allowedOccurrence" : { + "type" : "string", + "description" : "This value will be populated when the error occurred due to occurrence of policy enforcement", + "enum" : [ "once", "multiple" ] + }, + "conflictingTemplateId" : { + "type" : "string", + "description" : "This value will be populated when the error occurred due to mutually exclusive policy enforcement are available at the runtime enforcement of an API" + }, + "errorType" : { + "type" : "string", + "description" : "The type of the policy enforcement validation error", + "enum" : [ "dependencyMissing", "mutuallyExclusive", "occurrence" ] + }, + "missingDependency" : { + "type" : "array", + "description" : "The value of the list of missed policy enforcement which are dependent for this policy enforcement. This will be populated when the policy enforcement validation error occurred due to dependency missing", + "items" : { + "type" : "string" + } + }, + "policyActionName" : { + "type" : "string", + "description" : "The name of the policy enforcement which is having the validation error" + }, + "templateId" : { + "type" : "string", + "description" : "The template Id of the policy enforcement which is having the validation error" + } + }, + "description" : "This model is used to represent the type of policy enforcement validation error" + }, + "EnforcementValidationMessage" : { + "type" : "object", + "properties" : { + "apiId" : { + "type" : "string", + "description" : "ID of the API which is having the policy enforcement violation" + }, + "apiName" : { + "type" : "string", + "description" : "Name of the API which is having the policy enforcement violation" + }, + "apiType" : { + "type" : "string", + "description" : "Type of the API which is having the policy enforcement violation" + }, + "apiVersion" : { + "type" : "string", + "description" : "Version of the API which is having the policy enforcement violation" + }, + "errorOnResource" : { + "type" : "array", + "items" : { + "$ref" : "#/definitions/ResourcePolicyValidationError" + } + } + }, + "description" : "This model is used to give the details about conflicts between the policy enforcements. The conflicts may arise due to dependent policy action enforcement missing or due to occurrence or due to mutually exclusive policy enforcements. These happen during the below scenarios \n1. When a policy is attached to an API, the enforcement validation will happen on policy.\n2. When a global policy is getting activated, it will validate the policy enforcement of the corresponding global policy and the runtime policy enforcements on the applicable APIs for any violation." + }, + "PolicyDetails" : { + "type" : "object", + "properties" : { + "names" : { + "type" : "array", + "items" : { + "$ref" : "#/definitions/InternationalizedString" + } + }, + "policyActionsIds" : { + "type" : "array", + "description" : "List of IDs of conflicting policy enforcement of this policy", + "items" : { + "type" : "string" + } + }, + "policyId" : { + "type" : "string", + "description" : "Id of the conflicting policy." + }, + "PolicyScope" : { + "type" : "string", + "description" : "Policy Scope of the conflicting policy.", + "enum" : [ "GLOBAL", "METHOD", "OPERATION", "RESOURCE", "SERVICE", "PACKAGE", "TEMPLATE", "SCOPE" ] + }, + "stageKey" : { + "type" : "string", + "description" : "Stage key of the conflicting policy enforcement of this policy" + } + }, + "description" : "Details of the conflicting policies and policy enforcement of the respective policy" + }, + "ResourcePolicyValidationError" : { + "type" : "object", + "properties" : { + "conflictingPolicies" : { + "type" : "object", + "description" : "Map of conflicting policy ids and its respective details", + "additionalProperties" : { + "$ref" : "#/definitions/PolicyDetails" + } + }, + "error" : { + "$ref" : "#/definitions/EnforcementValidationError" + }, + "errorMessage" : { + "type" : "string", + "description" : "Policy enforcement validation error message" + }, + "method" : { + "type" : "string", + "description" : "Applicable for REST Services only. This will contain the HTTP method of the resource which is having policy enforcement validation error" + }, + "policyDetails" : { + "description" : "This property contains the property details of the policy, which is having the conflicts against property conflictingPolicies", + "$ref" : "#/definitions/PolicyDetails" + }, + "resource" : { + "type" : "string", + "description" : "Resource/Operation name which is having the policy enforcement validation error" + } + }, + "description" : "This model contains the resource level details for policy enforcement validation errors. For each resource or operation it will have the details of the list of conflicting policies and the policy enforcements" + }, + "PolicyActionOrder" : { + "type" : "object", + "properties" : { + "sequence" : { + "type" : "array", + "description" : "Sequence of the policy enforcement.\n 1. insequence - Stages or policies marked with this sequence will be executed when the request comes to API Gateway and before the request dispatched to native service. \n 2. outsequence - Stages or policies marked with this sequence will be executed when the request goes out of API Gateway to the invoker. \n 3. faultsequence - Stages or policies marked with this sequence will be executed when native service return any error", + "items" : { + "type" : "string", + "enum" : [ "insequence", "outsequence", "faultsequence" ] + } + }, + "orderPosition" : { + "type" : "string", + "description" : "Order of the policy enforcement. \n 1. First - policy enforcement needs to be added in its respective stage. \n 2. Last - policy enforcement needs to be added as last in its respective stage. \n 3. Before First occurrence - Policy needs to be added before the first occurrence of policyTemplateIds specified. \n 4. After last occurrence - Policy needs to be added after last occurrence of policyTemplateIds specified", + "enum" : [ "first", "last", "beforeFirstOccurence", "afterLastOccurence" ] + }, + "isCustomOrderSupported" : { + "type" : "boolean" + }, + "policyTemplateIDs" : { + "type" : "array", + "description" : "List of policy template ids needed to process the order before first occurrence and after last occurrence", + "items" : { + "type" : "string" + } + } + }, + "description" : "PolicyActionOrder is used to specify the policy enforcement order in its respective stage" + }, + "PolicyActionParameterTemplate" : { + "type" : "object", + "properties" : { + "templateKey" : { + "type" : "string", + "description" : "Unique id for policy action parameter" + }, + "names" : { + "type" : "array", + "description" : "Policy action parameter template name", + "items" : { + "$ref" : "#/definitions/InternationalizedString" + } + }, + "descriptions" : { + "type" : "array", + "description" : "Policy action parameter template description", + "items" : { + "$ref" : "#/definitions/InternationalizedString" + } + }, + "type" : { + "type" : "string", + "description" : "Policy Action parameter data type.", + "enum" : [ "STRING", "TEXT", "INT", "LONG", "DOUBLE", "BOOLEAN", "XPATH", "FILE", "ESB", "OBJECT", "SECURESTRING" ] + }, + "isArray" : { + "type" : "boolean", + "description" : "This property infers whether this policy action parameter can be an array" + }, + "isRequired" : { + "type" : "boolean", + "description" : "This property infers if it is added to a policy enforcement then it is mandate to provide value for this policy action parameter" + }, + "canRender" : { + "type" : "boolean", + "description" : "UI specific property. This property infer it can be rendered on UI" + }, + "defaultValues" : { + "type" : "array", + "description" : "This contains the list of default values for this policy action parameter", + "items" : { + "type" : "object" + } + }, + "possibleValues" : { + "type" : "array", + "items" : { + "$ref" : "#/definitions/PossibleValue" + } + }, + "policyParaeterTemplates" : { + "type" : "array", + "items" : { + "$ref" : "#/definitions/PolicyActionParameterTemplate" + } + }, + "parameterTemplatesReference" : { + "type" : "array", + "items" : { + "type" : "string" + } + }, + "requiredChildParameterKeys" : { + "type" : "array", + "items" : { + "type" : "string" + } + }, + "applicableServiceTypes" : { + "type" : "array", + "description" : "List of Service type applicable for this policy action parameter", + "items" : { + "type" : "string" + } + } + }, + "description" : "A policy action parameter template defines the schema for a policy enforcement parameter. A policy enforcement can have one or more policy action parameters." + }, + "PolicyActionTemplate" : { + "type" : "object", + "properties" : { + "templateKey" : { + "type" : "string", + "description" : "A unique id for this policy enforcement", + "readOnly" : true + }, + "names" : { + "type" : "array", + "description" : "Name of the policy enforcement along with the corresponding locale information", + "readOnly" : true, + "items" : { + "$ref" : "#/definitions/InternationalizedString" + } + }, + "descriptions" : { + "type" : "array", + "description" : "Description for the policy enforcement", + "readOnly" : true, + "items" : { + "$ref" : "#/definitions/InternationalizedString" + } + }, + "applicableServiceTypes" : { + "type" : "array", + "description" : "Policy enforcement only applicable for the list of service type specified here", + "items" : { + "type" : "string" + } + }, + "parameterTemplates" : { + "type" : "array", + "items" : { + "$ref" : "#/definitions/PolicyActionParameterTemplate" + } + }, + "occurrence" : { + "type" : "string", + "description" : "Allowed occurrence for the respective policy enforcement. \n 1. Once - Policy enforcement can be added only once on the respective stage. \n 2. Multiple - Policy enforcement can be added multiple times on the respective stage.", + "enum" : [ "once", "multiple" ] + }, + "stageSpecific" : { + "type" : "string", + "description" : "Some policy enforcement can be added in multiple stages. This property specify it needs to be processed based on the stage it added." + }, + "dependentActions" : { + "type" : "array", + "description" : "Dependent list of policy enforcements. This policy enforcement can't be added with out the specified list of policy enforcement templates", + "items" : { + "type" : "string" + } + }, + "dependentActionsConnector" : { + "type" : "string" + }, + "mutuallyExclusiveActions" : { + "type" : "array", + "description" : "The list contains the mutually exclusive policy enforcements with this policy enforcement", + "items" : { + "type" : "string" + } + }, + "order" : { + "$ref" : "#/definitions/PolicyActionOrder" + }, + "requiredParametersKeys" : { + "type" : "array", + "items" : { + "type" : "string" + } + }, + "canAppliedAtResourceMethodLevel" : { + "type" : "boolean", + "description" : "This property infers that the policy action can be applied at resource/operation or method level." + } + }, + "description" : "A policy action template represents the schema for a policy enforcement. " + }, + "PossibleValue" : { + "type" : "object", + "properties" : { + "names" : { + "type" : "array", + "description" : "Descriptive name for the value", + "items" : { + "$ref" : "#/definitions/InternationalizedString" + } + }, + "value" : { + "type" : "string", + "description" : "value that need to be used when providing value for the respective policy action parameter" + } + }, + "description" : "For policy action parameter we can define the list of possible values." + }, + "Alias" : { + "type" : "object", + "discriminator" : "type", + "properties" : { + "id" : { + "type" : "string", + "description" : "A unique ID for the alias", + "readOnly" : true + }, + "name" : { + "type" : "string", + "description" : "A unique name for the assertion" + }, + "description" : { + "type" : "string", + "description" : "A description about the alias" + }, + "type" : { + "type" : "string", + "description" : "Type of the alias", + "enum" : [ "simple", "endpoint", "httpTransportSecurityAlias", "soapMessageSecurityAlias", "samlIssuerAlias", "authServerAlias", "webmethodsAlias", "transformationAlias", "serviceRegistryAlias", "clientMetadataMapping" ] + }, + "stage" : { + "type" : "string", + "description" : "Stage for which this alias needs to be used" + }, + "owner" : { + "type" : "string", + "description" : "Owner of the alias" + } + } + }, + "AuthInfo" : { + "type" : "object", + "discriminator" : "type" + }, + "AuthServerAlias" : { + "allOf" : [ { + "$ref" : "#/definitions/Alias" + }, { + "type" : "object", + "properties" : { + "localIntrospectionConfig" : { + "description" : "Configuration to do the local introspection", + "$ref" : "#/definitions/LocalIntrospectionConfig" + }, + "remoteIntrospectionConfig" : { + "description" : "Configuration to do the remote introspection.", + "$ref" : "#/definitions/RemoteIntrospectionConfig" + }, + "dcrEndpoint" : { + "description" : "configuration for the dynamic client registration", + "$ref" : "#/definitions/DynamicClientRegistrationEndpoint" + }, + "tokenGeneratorConfig" : { + "description" : "Configuration that is required to generate the token by the API Gateway", + "$ref" : "#/definitions/TokenGeneratorConfig" + }, + "sslConfig" : { + "description" : "SSL Configuration used for two ssl for the authorization server communications", + "$ref" : "#/definitions/SSLConfig" + }, + "metadata" : { + "description" : "Metadata information used by the API Portal", + "$ref" : "#/definitions/Metadata" + }, + "authServerScopes" : { + "type" : "array", + "description" : "List of scopes available in the authorization server", + "items" : { + "type" : "string" + } + }, + "supportedGrantTypes" : { + "type" : "array", + "description" : "List of grant types supported by the authorization server", + "items" : { + "type" : "string" + } + }, + "providerName" : { + "type" : "string", + "description" : "Name of the provider which was created using ClientMetadataMapping alias, used in the Dynamic client registration" + }, + "authServerType" : { + "type" : "string", + "description" : "Type of the authorization server", + "enum" : [ "LOCAL_IS", "REMOTE_IS", "EXTERNAL" ] + } + } + } ] + }, + "BasicAuth" : { + "allOf" : [ { + "$ref" : "#/definitions/AuthInfo" + }, { + "type" : "object", + "properties" : { + "username" : { + "type" : "string", + "description" : "Username for the basic authentication" + }, + "password" : { + "type" : "string", + "description" : "password of the corresponding username" + } + } + } ] + }, + "ClientMetadataMapping" : { + "allOf" : [ { + "$ref" : "#/definitions/Alias" + }, { + "type" : "object", + "properties" : { + "providerName" : { + "type" : "string", + "description" : "Name of the provider" + }, + "implNames" : { + "type" : "object", + "description" : "Map of specification names to the implementation names of the service provider", + "additionalProperties" : { + "type" : "string" + } + }, + "extendedValuesV2" : { + "type" : "array", + "description" : "List of headers that needs to be sent along with the client management request", + "items" : { + "$ref" : "#/definitions/ExtendedValue" + } + } + } + } ] + }, + "Credentials" : { + "type" : "object", + "properties" : { + "userName" : { + "type" : "string", + "description" : "Specify a username to access the native API" + }, + "password" : { + "type" : "string", + "description" : "Specify a password to access the native API" + }, + "domain" : { + "type" : "string", + "description" : "Specify a domain to access the native API" + } + } + }, + "DynamicClientRegistrationEndpoint" : { + "type" : "object", + "properties" : { + "authInfo" : { + "description" : "Authorization configuration to manage the clients in the authorization server", + "$ref" : "#/definitions/AuthInfo" + }, + "clientRegistrationEndpoint" : { + "description" : "Client registration endpoint configuration", + "$ref" : "#/definitions/OAuth2Endpoint" + } + } + }, + "EndpointAlias" : { + "allOf" : [ { + "$ref" : "#/definitions/Alias" + }, { + "type" : "object", + "properties" : { + "endPointURI" : { + "type" : "string", + "description" : "the default URI or components of the URI such as service name" + }, + "connectionTimeout" : { + "type" : "integer", + "format" : "int32", + "description" : "time interval (in seconds) after which a connection attempt times out" + }, + "readTimeout" : { + "type" : "integer", + "format" : "int32", + "description" : "time interval (in seconds) after which a socket read attempt times out" + }, + "optimizationTechnique" : { + "type" : "string", + "description" : "Type of optimization technique used for SOAP messages", + "enum" : [ "NONE", "MTOM", "SWA" ] + }, + "passSecurityHeaders" : { + "type" : "boolean", + "description" : "Boolean value whether to pass security headers or not" + }, + "keystoreAlias" : { + "type" : "string", + "description" : "Keystore alias name that is used for the signing/encryption" + }, + "keyAlias" : { + "type" : "string", + "description" : "Key alias in the particular keyStore" + } + } + } ] + }, + "ExtendedValue" : { + "type" : "object", + "properties" : { + "endpointType" : { + "type" : "string", + "description" : "Type of endpoint for which the additional header needs to sent", + "enum" : [ "CLIENT_REGISTRATION", "CLIENT_UPDATE", "CLIENT_DELETE", "CLIENT_READ", "SCOPE_CREATE", "SCOPE_READ", "SCOPE_DELETE", "SCOPE_UPDATE" ] + }, + "key" : { + "type" : "string", + "description" : "Header name" + }, + "value" : { + "type" : "string", + "description" : "Header value" + } + } + }, + "HTTPTransportSecurityAlias" : { + "allOf" : [ { + "$ref" : "#/definitions/Alias" + }, { + "type" : "object", + "properties" : { + "authType" : { + "type" : "string", + "description" : "type of authentication you want to use while communicating with the native API", + "enum" : [ "HTTP_BASIC", "NTLM", "OAUTH2", "KERBEROS", "JWT", "ALIAS", "REMOVE_INCOMING_HTTP_HEADERS" ] + }, + "authMode" : { + "type" : "string", + "description" : "Mode of authentication that needs to be used", + "enum" : [ "NEW", "INCOMING_HTTP_BASIC_AUTH", "INCOMING_WSS_USER", "INCOMING_X509", "DELEGATE_INCOMING", "INCOMING_OAUTH_TOKEN", "INCOMING_JWT", "TRANSPARENT", "INCOMING_KERBEROS" ] + }, + "httpAuthCredentials" : { + "description" : "Credentials that are used for HTTP authentication", + "$ref" : "#/definitions/Credentials" + }, + "kerberosCredentials" : { + "description" : "Credentials that are used for Kerberos authentication", + "$ref" : "#/definitions/KerberosCredentials" + }, + "oauth2Token" : { + "type" : "string", + "description" : "OAuth2 token that is used for authentication" + } + } + } ] + }, + "KerberosCredentials" : { + "type" : "object", + "properties" : { + "clientPrincipal" : { + "type" : "string", + "description" : "a unique identity to which Kerberos can assign tickets" + }, + "clientPassword" : { + "type" : "string", + "description" : "password for the client principal" + }, + "servicePrincipal" : { + "type" : "string", + "description" : "a unique identifier of a service instance" + }, + "servicePrincipalNameForm" : { + "type" : "string", + "description" : "the format in which you want to specify the principal name of the service that is registered with the principal database", + "enum" : [ "HOST_BASED", "USERNAME_BASED" ] + }, + "requestDelegateToken" : { + "type" : "boolean", + "description" : "Boolean value whether the token needs to be delegated or not" + } + } + }, + "LocalIntrospectionConfig" : { + "type" : "object", + "properties" : { + "issuer" : { + "type" : "string", + "description" : "Third party issuer name" + }, + "trustStoreAlias" : { + "type" : "string", + "description" : "The truststore to be used by API Gateway when validating the token issued by the authorization server. Truststore is a repository that holds all the trusted public certificates" + }, + "certificateAlias" : { + "type" : "string", + "description" : "Select the certificate from the truststore that is used to validate the token." + }, + "jwksuri" : { + "type" : "string", + "description" : "JSON Web Key URI" + }, + "description" : { + "type" : "string", + "description" : "Third party issuer description" + } + } + }, + "Metadata" : { + "type" : "object", + "properties" : { + "authorizeURL" : { + "type" : "string", + "description" : "URL to get the approval from the resource owner" + }, + "accessTokenURL" : { + "type" : "string", + "description" : "URL to get the access token from the authorization server" + }, + "refreshTokenURL" : { + "type" : "string", + "description" : "URL to get the new access token from the refresh token" + } + } + }, + "OAuth2Endpoint" : { + "type" : "object", + "properties" : { + "endpoint" : { + "type" : "string", + "description" : "Client registration endpoint in the authorization server" + }, + "keyStoreAlias" : { + "type" : "string", + "description" : "Specify the keystore that needs to be used by API Gateway while sending the request to the authorization server. A keystore is a repository of private key and its corresponding public certificate" + }, + "keyAlias" : { + "type" : "string", + "description" : "The key alias is the private key that is used sign the request sent to the authorization server" + }, + "headers" : { + "type" : "object", + "additionalProperties" : { + "type" : "string" + } + }, + "https" : { + "type" : "boolean" + } + } + }, + "OAuth2Endpoints" : { + "type" : "object", + "properties" : { + "endpoints" : { + "type" : "object", + "additionalProperties" : { + "$ref" : "#/definitions/OAuth2Endpoint" + } + }, + "keyStoreAlias" : { + "type" : "string" + }, + "keyAlias" : { + "type" : "string" + } + } + }, + "OpenIDProviderAlias" : { + "allOf" : [ { + "$ref" : "#/definitions/Alias" + }, { + "type" : "object", + "properties" : { + "issuer" : { + "type" : "string" + }, + "authorizationEndpoint" : { + "type" : "string" + }, + "tokenEndpoint" : { + "type" : "string" + }, + "userinfoEndpoint" : { + "type" : "string" + }, + "jwksUri" : { + "type" : "string" + }, + "openIDScopes" : { + "type" : "array", + "items" : { + "type" : "string" + } + }, + "openIDResponseType" : { + "type" : "string", + "enum" : [ "code", "id_token", "token_id_token", "id_token_token" ] + }, + "clientId" : { + "type" : "string" + }, + "clientSecret" : { + "type" : "string" + }, + "prompt" : { + "type" : "string", + "enum" : [ "none", "login", "consent", "select_account" ] + }, + "openIDGrantType" : { + "type" : "string", + "enum" : [ "authorization_code" ] + }, + "openIDDisplayValue" : { + "type" : "string", + "enum" : [ "none", "page", "popup", "touch", "wap" ] + }, + "openIDTokenEndpointAuthMode" : { + "type" : "string", + "enum" : [ "client_secret_basic", "client_secret_post", "none" ] + }, + "maxAge" : { + "type" : "string" + }, + "redirectionEndpointHost" : { + "type" : "string" + }, + "redirectionEndpointPort" : { + "type" : "string" + }, + "uiLocales" : { + "type" : "string" + }, + "includeUserinfoClaims" : { + "type" : "boolean" + }, + "trustStoreAlias" : { + "type" : "string" + } + } + } ] + }, + "RemoteIntrospectionConfig" : { + "type" : "object", + "properties" : { + "introspectionEndpoint" : { + "type" : "string", + "description" : "Endpoint of the authorization server to do the introspection" + }, + "clientId" : { + "type" : "string", + "description" : "ClientId of a client in the authorization server" + }, + "clientSecret" : { + "type" : "string", + "description" : "Client Secret of the corresponding clientId in the authorization server" + }, + "user" : { + "type" : "string", + "description" : "A user in the API Gateway under whom the introspection endpoint is invoked" + } + } + }, + "SAMLIssuerAlias" : { + "allOf" : [ { + "$ref" : "#/definitions/Alias" + }, { + "type" : "object", + "properties" : { + "issuerCommunicationMode" : { + "type" : "string", + "description" : "Mode of communication to the STS", + "enum" : [ "NORMAL_CLIENT", "ACT_AS_DELEGATION" ] + }, + "issuerPolicy" : { + "type" : "string", + "description" : "The webMethods Integration Server service name" + }, + "issuerAuthScheme" : { + "type" : "string", + "description" : "The authentication type used for communicating to STS", + "enum" : [ "BASIC_AUTH", "WSS_USERNAME", "KERBEROS", "X509" ] + }, + "issuerAuthMode" : { + "type" : "string", + "description" : "Mode of communication", + "enum" : [ "NEW", "INCOMING_HTTP_BASIC_AUTH", "INCOMING_WSS_USER", "INCOMING_X509", "DELEGATE_INCOMING", "INCOMING_OAUTH_TOKEN", "INCOMING_JWT", "TRANSPARENT", "INCOMING_KERBEROS" ] + }, + "wssCredentials" : { + "description" : "Credentials required for the WSS Username token", + "$ref" : "#/definitions/WssCredentials" + }, + "kerberosCredentials" : { + "description" : "Credentials for the kerberos token", + "$ref" : "#/definitions/KerberosCredentials" + }, + "endpoint" : { + "type" : "string", + "description" : "The endpoint URI of the STS" + }, + "samlVersion" : { + "type" : "string", + "description" : "SAML version to be used for authentication", + "enum" : [ "SAML1_1", "SAML_2_0" ] + }, + "wsTrustVersion" : { + "type" : "string", + "description" : "WS-Trust version that API Gateway must use to send the RST to the SAML issuer", + "enum" : [ "WS_TRUST_1_0", "WS_TRUST_1_3" ] + }, + "appliesTo" : { + "type" : "string", + "description" : "Specify the scope for which this security token is required" + }, + "extendedParameters" : { + "type" : "object", + "description" : "Extensions to the element for requesting specific types of keys, algorithms, or key and algorithms, as specified by a given policy in the return token(s)", + "additionalProperties" : { + "type" : "string" + } + }, + "signAndEncryptConfig" : { + "description" : "Private and public keys used for signature and encryption", + "$ref" : "#/definitions/SignAndEncryptConfig" + }, + "assertionId" : { + "type" : "string" + } + } + } ] + }, + "SOAPMessageSecurityAlias" : { + "allOf" : [ { + "$ref" : "#/definitions/Alias" + }, { + "type" : "object", + "properties" : { + "authType" : { + "type" : "string", + "description" : "Type of authentication that needs to be used", + "enum" : [ "WSS_USERNAME", "SAML", "KERBEROS", "ALIAS", "REMOVE_WSS_HEADERS", "NONE" ] + }, + "authMode" : { + "type" : "string", + "description" : "Mode of authentication", + "enum" : [ "NEW", "INCOMING_HTTP_BASIC_AUTH", "INCOMING_WSS_USER", "INCOMING_X509", "DELEGATE_INCOMING", "INCOMING_OAUTH_TOKEN", "INCOMING_JWT", "TRANSPARENT", "INCOMING_KERBEROS" ] + }, + "wssCredentials" : { + "description" : "Credentials required for the WSS Username token", + "$ref" : "#/definitions/WssCredentials" + }, + "kerberosCredentials" : { + "description" : "Credentials for the kerberos token", + "$ref" : "#/definitions/KerberosCredentials" + }, + "samlIssuerConfig" : { + "type" : "string", + "description" : "Saml issuer configuration name" + }, + "signAndEncryptConfig" : { + "description" : "private and public keys used for signature and encryption", + "$ref" : "#/definitions/SignAndEncryptConfig" + } + } + } ] + }, + "TokenGeneratorConfig" : { + "type" : "object", + "properties" : { + "audience" : { + "type" : "string", + "description" : "Default audience value that needs to be added in the generated JWT" + }, + "expiry" : { + "type" : "integer", + "format" : "int64", + "description" : "Expiry interval of the JWT in minutes" + }, + "algorithm" : { + "type" : "string", + "description" : "Type of algorithm that needs to be used for signing the JWT", + "enum" : [ "RS256", "RS384", "RS512" ] + }, + "accessTokenExpInterval" : { + "type" : "integer", + "format" : "int32", + "description" : "Expiry interval in seconds for the generated access token " + }, + "authCodeExpInterval" : { + "type" : "integer", + "format" : "int32", + "description" : "Expiry interval in seconds for the generated authorization code in Authorization code grant type" + } + } + }, + "SSLConfig" : { + "type" : "object", + "properties" : { + "keyStoreAlias" : { + "type" : "string", + "description" : "Specify the keystore that needs to be used by API Gateway while sending the request to the authorization server. A keystore is a repository of private key and its corresponding public certificate" + }, + "keyAlias" : { + "type" : "string", + "description" : "The key alias is the private key that is used sign the request sent to the authorization server" + }, + "trustStoreAlias" : { + "type" : "string", + "description" : "The truststore to be used by API Gateway when validating the incoming response from the authorization server. Truststore is a repository that holds all the trusted public certificates" + } + } + }, + "WssCredentials" : { + "type" : "object", + "properties" : { + "userName" : { + "type" : "string", + "description" : "a username used to generate the WSS username token" + }, + "password" : { + "type" : "string", + "description" : "password for the username" + }, + "passwordType" : { + "type" : "string", + "description" : "type of password", + "enum" : [ "NONE", "TEXT", "DIGEST" ] + } + } + }, + "SignAndEncryptConfig" : { + "type" : "object", + "properties" : { + "keyStoreAlias" : { + "type" : "string", + "description" : "Specify the keystore that needs to be used by API Gateway while sending the request to the native API. A keystore is a repository of private key and its corresponding public certificate" + }, + "keyAlias" : { + "type" : "string", + "description" : "The key alias is the private key that is used sign the request sent to the native API" + }, + "truststoreAlias" : { + "type" : "string", + "description" : "The truststore to be used by API Gateway when sending the request to the native API. Truststore is a repository that holds all the trusted public certificates" + }, + "certificateAlias" : { + "type" : "string", + "description" : "Select the certificate from the truststore that is used to validate the request that is sent to the native API." + } + } + } + } +} \ No newline at end of file diff --git a/apigatewayservices/APIGatewayPromotionManagement.json b/apigatewayservices/APIGatewayPromotionManagement.json new file mode 100644 index 0000000..e94a91a --- /dev/null +++ b/apigatewayservices/APIGatewayPromotionManagement.json @@ -0,0 +1,661 @@ +{ + "swagger" : "2.0", + "info" : { + "description" : "API Gateway supports staging and promotion of assets. In a typical enterprise-level, solutions are separated according to the different stages of Software Development Lifecycle (SDLC) such as development, quality assurance (QA), and production stages. Staging and promotion allows you to promote all the assets across different stages. The supported assets are APIs, global policies, policy templates, applications, aliases, packages, plans, threat protection rules and administrative configurations like load balancer, extended settings, API fault, custom assertions and keystore/truststore.\n\nPromotion refers to moving API Gateway assets from the source stage to one or moretarget stages. For example, you might want to promote assets you have developed on servers in a Development stage (the source API Gateway instance) to servers in a QA or Production stage (the target API Gateway instance).\n\nRollback is the process of restoring the asset's metadata in the target API Gateway instance to a previous state.\n\nStages should be configured in the source machine where we initiate the promotion process. The user must have the manage promotions functional privilege assigned to perform promotions related tasks like configuring the stages, promote and rollback the assets.", + "version" : "10.3", + "title" : "API Assets Promotion Management" + }, + "host" : "localhost:5555", + "basePath" : "/rest/apigateway", + "schemes" : [ "http" ], + "consumes" : [ "application/json" ], + "produces" : [ "application/json" ], + "paths" : { + "/stages" : { + "get" : { + "description" : "This REST operation is used to retrieve all the configured stages", + "operationId" : "getStages", + "produces" : [ "application/json" ], + "parameters" : [ ], + "responses" : { + "200" : { + "description" : "Returns the list of all stages", + "schema" : { + "type" : "array", + "items" : { + "$ref" : "#/definitions/Stage" + } + }, + "examples" : { + "application/json" : "{\r\n \"stages\": [\r\n {\r\n \"id\": \"2d9e280a-b529-466c-9ec8-d6b0e93026a8\",\r\n \"name\": \"sampleStage\",\r\n \"url\": \"http://localhost:5555/\",\r\n \"username\": \"Administrator\",\r\n \"password\": \"********************************\"\r\n }\r\n ]\r\n}" + } + }, + "401" : { + "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." + } + }, + "security" : [ { + "Basic" : [ ] + } ] + }, + "post" : { + "description" : "This REST operation is used to configure a stage in the source API Gateway where promotion will be initiated. A stage is just another API Gateway instance. When the stage url is https, then keystore and keystore alias will also be expected while configuring a stage", + "operationId" : "createStage", + "consumes" : [ "application/json" ], + "produces" : [ "application/json" ], + "parameters" : [ { + "in" : "body", + "name" : "body", + "description" : "Stage request payload", + "required" : true, + "schema" : { + "$ref" : "#/definitions/Stage" + }, + "x-examples" : { + "application/json" : "{\r\n\t\"name\" : \"QA Stage\",\r\n\t\"description\" : \"This stage will be used to test the assets promoted from the development stage\",\r\n\t\"url\" : \"http://mcmriz01:5555/\",\r\n\t\"username\" : \"Administrator\",\r\n\t\"password\" : \"password\"\r\n}" + } + } ], + "responses" : { + "200" : { + "description" : "Stage is created successfully in API Gateway. Now user can promote API Gateway assets to the created stage", + "schema" : { + "$ref" : "#/definitions/Stage" + }, + "examples" : { + "application/json" : "{\r\n \"stage\": {\r\n \"id\": \"cc71211e-cd45-4a72-b453-9cc22c783f9d\",\r\n \"name\": \"QA Stage\",\r\n \"description\": \"This stage will be used to test the assets promoted from the development stage\",\r\n \"url\": \"http://mcmriz01:5555/\",\r\n \"username\": \"Administrator\",\r\n \"password\": \"********************************\"\r\n }\r\n}" + } + }, + "400" : { + "description" : "This status code shows when the user missed the mandatory fields like name, url, username, password and keyStoreAlias, keyAlias for https url in the request or provide a invalid request body" + }, + "401" : { + "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to configure a stage." + } + }, + "security" : [ { + "Basic" : [ ] + } ] + } + }, + "/stages/{stageId}" : { + "get" : { + "description" : "This REST operation is used to retrieve a particular stage object based on a stage id", + "operationId" : "getStage", + "produces" : [ "application/json" ], + "parameters" : [ { + "name" : "stageId", + "in" : "path", + "description" : "Stage Id for the stage to be retrieved", + "required" : true, + "type" : "string", + "x-example" : "353bd366-47d4-4703-aecf-9cb40cdcc864" + } ], + "responses" : { + "200" : { + "description" : "Returns the stage based on the stageId.", + "schema" : { + "$ref" : "#/definitions/Stage" + }, + "examples" : { + "application/json" : "{\r\n \"stage\": {\r\n \"id\": \"2d9e280a-b529-466c-9ec8-d6b0e93026a8\",\r\n \"name\": \"sampleStage\",\r\n \"url\": \"http://localhost:5555/\",\r\n \"username\": \"Administrator\",\r\n \"password\": \"********************************\"\r\n }\r\n}" + } + }, + "404" : { + "description" : "This status code indicates that the stageId specified is not found in the API Gateway" + }, + "401" : { + "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." + } + }, + "security" : [ { + "Basic" : [ ] + } ] + }, + "put" : { + "description" : "This REST operation is used to update a stage in the source API Gateway where promotion will be initiated. A stage is just another API Gateway instance. When the stage url is https, then keystore and keystore alias will also be expected while configuring a stage", + "operationId" : "updateStage", + "consumes" : [ "application/json" ], + "produces" : [ "application/json" ], + "parameters" : [ { + "name" : "stageId", + "in" : "path", + "description" : "Stage Id for the stage to be updated", + "required" : true, + "type" : "string", + "x-example" : "353bd366-47d4-4703-aecf-9cb40cdcc864" + }, { + "in" : "body", + "name" : "body", + "description" : "Stage request payload", + "required" : true, + "schema" : { + "$ref" : "#/definitions/Stage" + }, + "x-examples" : { + "application/json" : "{\r\n \"stage\": {\r\n \"id\": \"2d9e280a-b529-466c-9ec8-d6b0e93026a8\",\r\n \"name\": \"sampleStage\",\r\n \"url\": \"http://localhost:5555/\",\r\n \"username\": \"Administrator\",\r\n \"password\": \"********************************\"\r\n }\r\n}" + } + } ], + "responses" : { + "200" : { + "description" : "Returns the updated stage object", + "schema" : { + "$ref" : "#/definitions/Stage" + }, + "examples" : { + "application/json" : "{\r\n \"stage\": {\r\n \"id\": \"2d9e280a-b529-466c-9ec8-d6b0e93026a8\",\r\n \"name\": \"sampleStage\",\r\n \"url\": \"http://localhost:5555/\",\r\n \"username\": \"Administrator\",\r\n \"password\": \"********************************\"\r\n }\r\n}" + } + }, + "404" : { + "description" : "This status code indicates that the stageId specified is not found in the API Gateway" + }, + "400" : { + "description" : "This status code shows when the user missed the mandatory fields like name, url, username, password and keyStoreAlias, keyAlias for https url in the request or provide a invalid request body" + }, + "401" : { + "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." + } + }, + "security" : [ { + "Basic" : [ ] + } ] + }, + "delete" : { + "description" : "Delete the stage", + "operationId" : "deleteStage", + "parameters" : [ { + "name" : "stageId", + "in" : "path", + "description" : "Stage Id for the stage to be deleted", + "required" : true, + "type" : "string", + "x-example" : "353bd366-47d4-4703-aecf-9cb40cdcc864" + } ], + "responses" : { + "404" : { + "description" : "This status code indicates that the stageId specified is not found in the API Gateway" + }, + "401" : { + "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API" + }, + "204" : { + "description" : "Success" + } + }, + "security" : [ { + "Basic" : [ ] + } ] + } + }, + "/promotion" : { + "get" : { + "description" : "This REST operation is used to retrieve the promotions history with each promotion entry provides the promotion name, promoted by whom, when it's promoted and the promoted assets status", + "operationId" : "getPromotions", + "produces" : [ "application/json" ], + "parameters" : [ ], + "responses" : { + "200" : { + "description" : "Returns the list of all promotions", + "schema" : { + "type" : "array", + "items" : { + "$ref" : "#/definitions/Promotion" + } + }, + "examples" : { + "application/json" : "{\r\n \"promotion\": [\r\n {\r\n \"id\": \"12beeb57-1855-4da3-8802-679fcff6941b\",\r\n \"name\": \"samplePromote\",\r\n \"destinationStages\": [\r\n \"2d9e280a-b529-466c-9ec8-d6b0e93026a8\"\r\n ],\r\n \"valueSubstitution\": [],\r\n \"promotedAssets\": {\r\n \"api\": [\r\n \"9ae31b7f-25e6-11e8-9ed0-e261b16c5360\"\r\n ],\r\n \"application\": []\r\n },\r\n \"creationTime\": \"2018-08-07 07:29:28 GMT\",\r\n \"owner\": \"Administrator\",\r\n \"status\": \"Success\",\r\n \"promotionResults\": {\r\n \"sampleStage\": {\r\n \"status\": \"Success\",\r\n \"ArchiveResult\": [\r\n {\r\n \"Alias\": {\r\n \"name\": \"LabCaseEndpointAlias\",\r\n \"id\": \"fe1d5c3c-e02a-11e7-9d18-d9340e1d9bce\",\r\n \"status\": \"Success\",\r\n \"explanation\": \"OK\",\r\n \"overwritten\": true,\r\n \"dependencyFailed\": null\r\n }\r\n },\r\n {\r\n \"PolicyAction\": {\r\n \"name\": \"Policy Action [Enable HTTP / HTTPS] -> Policy For API LabCaseTestService_VS[2.0]\",\r\n \"id\": \"75852c98-244a-4be3-8434-f39a7426ce95\",\r\n \"status\": \"Success\",\r\n \"explanation\": \"OK\",\r\n \"overwritten\": true,\r\n \"dependencyFailed\": null\r\n }\r\n },\r\n {\r\n \"Alias\": {\r\n \"name\": \"SetProjectIdTransformationAlias\",\r\n \"id\": \"7011f00c-e01a-11e7-9d18-c3cb04029276\",\r\n \"status\": \"Success\",\r\n \"explanation\": \"OK\",\r\n \"overwritten\": true,\r\n \"dependencyFailed\": null\r\n }\r\n },\r\n {\r\n \"Policy\": {\r\n \"name\": \"Policy For API LabCaseTestService_VS[2.0]\",\r\n \"id\": \"0147048a-795f-48f2-905e-7357474fc02f\",\r\n \"status\": \"Success\",\r\n \"explanation\": \"OK\",\r\n \"overwritten\": true,\r\n \"dependencyFailed\": null\r\n }\r\n },\r\n {\r\n \"PolicyAction\": {\r\n \"name\": \"Policy Action [Outbound Authentication - Transport] -> Policy For API LabCaseTestService_VS[2.0]\",\r\n \"id\": \"a2947928-5a38-49a0-b0bb-2076800987a1\",\r\n \"status\": \"Success\",\r\n \"explanation\": \"OK\",\r\n \"overwritten\": true,\r\n \"dependencyFailed\": null\r\n }\r\n },\r\n {\r\n \"PolicyAction\": {\r\n \"name\": \"Policy Action [Monitor Service Performance] -> Policy For API LabCaseTestService_VS[2.0]\",\r\n \"id\": \"11d6d5d8-a55b-480b-8305-34544937fea8\",\r\n \"status\": \"Success\",\r\n \"explanation\": \"OK\",\r\n \"overwritten\": true,\r\n \"dependencyFailed\": null\r\n }\r\n },\r\n {\r\n \"API\": {\r\n \"name\": \"LabCaseTestService_VS[2.0]\",\r\n \"id\": \"9ae31b7f-25e6-11e8-9ed0-e261b16c5360\",\r\n \"status\": \"Success\",\r\n \"explanation\": \"OK\",\r\n \"overwritten\": true,\r\n \"dependencyFailed\": null\r\n }\r\n },\r\n {\r\n \"PolicyAction\": {\r\n \"name\": \"Policy Action [Request Transformation] -> Policy For API LabCaseTestService_VS[2.0]\",\r\n \"id\": \"73a459c5-a15c-49ce-8394-459a34adb81e\",\r\n \"status\": \"Success\",\r\n \"explanation\": \"OK\",\r\n \"overwritten\": true,\r\n \"dependencyFailed\": null\r\n }\r\n },\r\n {\r\n \"Alias\": {\r\n \"name\": \"MyLabCaseAccountThesse\",\r\n \"id\": \"b73a8400-e008-11e7-9d18-f5832492b6de\",\r\n \"status\": \"Success\",\r\n \"explanation\": \"OK\",\r\n \"overwritten\": true,\r\n \"dependencyFailed\": null\r\n }\r\n },\r\n {\r\n \"PassmanData\": {\r\n \"name\": \"HTTP_AUTH_OUTBOUND_CLIENT_PWDMyLabCaseAccountThesse\",\r\n \"id\": \"HTTP_AUTH_OUTBOUND_CLIENT_PWDMyLabCaseAccountThesse\",\r\n \"status\": \"Success\",\r\n \"explanation\": \"OK\",\r\n \"overwritten\": true,\r\n \"dependencyFailed\": null\r\n }\r\n },\r\n {\r\n \"PolicyAction\": {\r\n \"name\": \"Policy Action [Log Invocation] -> Policy For API LabCaseTestService_VS[2.0]\",\r\n \"id\": \"b2fda4bb-70cd-43ba-b508-250f8ba6f5ac\",\r\n \"status\": \"Success\",\r\n \"explanation\": \"OK\",\r\n \"overwritten\": true,\r\n \"dependencyFailed\": null\r\n }\r\n },\r\n {\r\n \"PolicyAction\": {\r\n \"name\": \"Policy Action [Identify & Authorize Application] -> Policy For API LabCaseTestService_VS[2.0]\",\r\n \"id\": \"f37af4f0-1304-4cf2-b6ea-dc19b012f537\",\r\n \"status\": \"Success\",\r\n \"explanation\": \"OK\",\r\n \"overwritten\": true,\r\n \"dependencyFailed\": null\r\n }\r\n },\r\n {\r\n \"PolicyAction\": {\r\n \"name\": \"Policy Action [Straight Through Routing] -> Policy For API LabCaseTestService_VS[2.0]\",\r\n \"id\": \"fa476c9d-b30c-4d51-b7c5-80a824723f4f\",\r\n \"status\": \"Success\",\r\n \"explanation\": \"OK\",\r\n \"overwritten\": true,\r\n \"dependencyFailed\": null\r\n }\r\n },\r\n {\r\n \"PolicyAction\": {\r\n \"name\": \"Policy Action [Service Result Cache] -> Policy For API LabCaseTestService_VS[2.0]\",\r\n \"id\": \"0fc7967a-0c31-4ba2-bc8a-a70f059d3ef0\",\r\n \"status\": \"Success\",\r\n \"explanation\": \"OK\",\r\n \"overwritten\": true,\r\n \"dependencyFailed\": null\r\n }\r\n }\r\n ]\r\n }\r\n },\r\n \"includeApis\": false,\r\n \"includeApplications\": false,\r\n \"includeSubscriptions\": false\r\n },\r\n {\r\n \"id\": \"5cf6f3f5-f8ad-4810-9ef7-ed51d3fd2cfd\",\r\n \"name\": \"samplePromote_01\",\r\n \"destinationStages\": [\r\n \"2d9e280a-b529-466c-9ec8-d6b0e93026a8\"\r\n ],\r\n \"valueSubstitution\": [],\r\n \"promotedAssets\": {\r\n \"api\": [\r\n \"9ae31b7f-25e6-11e8-9ed0-e261b16c5360\"\r\n ]\r\n },\r\n \"creationTime\": \"2018-08-07 07:32:35 GMT\",\r\n \"owner\": \"Administrator\",\r\n \"status\": \"Success\",\r\n \"promotionResults\": {\r\n \"sampleStage\": {\r\n \"status\": \"Success\",\r\n \"ArchiveResult\": [\r\n {\r\n \"PolicyAction\": {\r\n \"name\": \"Policy Action [Log Invocation] -> Policy For API LabCaseTestService_VS[2.0]\",\r\n \"id\": \"b2fda4bb-70cd-43ba-b508-250f8ba6f5ac\",\r\n \"status\": \"Failed\",\r\n \"explanation\": \"Asset already exists.\",\r\n \"overwritten\": false,\r\n \"dependencyFailed\": false\r\n }\r\n },\r\n {\r\n \"Alias\": {\r\n \"name\": \"SetProjectIdTransformationAlias\",\r\n \"id\": \"7011f00c-e01a-11e7-9d18-c3cb04029276\",\r\n \"status\": \"Failed\",\r\n \"explanation\": \"Asset already exists.\",\r\n \"overwritten\": false,\r\n \"dependencyFailed\": false\r\n }\r\n },\r\n {\r\n \"Policy\": {\r\n \"name\": \"Policy For API LabCaseTestService_VS[2.0]\",\r\n \"id\": \"0147048a-795f-48f2-905e-7357474fc02f\",\r\n \"status\": \"Failed\",\r\n \"explanation\": \"Asset already exists.\",\r\n \"overwritten\": false,\r\n \"dependencyFailed\": false\r\n }\r\n },\r\n {\r\n \"PassmanData\": {\r\n \"name\": \"HTTP_AUTH_OUTBOUND_CLIENT_PWDMyLabCaseAccountThesse\",\r\n \"id\": \"HTTP_AUTH_OUTBOUND_CLIENT_PWDMyLabCaseAccountThesse\",\r\n \"status\": \"Success\",\r\n \"explanation\": \"OK\",\r\n \"overwritten\": true,\r\n \"dependencyFailed\": null\r\n }\r\n },\r\n {\r\n \"Alias\": {\r\n \"name\": \"MyLabCaseAccountThesse\",\r\n \"id\": \"b73a8400-e008-11e7-9d18-f5832492b6de\",\r\n \"status\": \"Failed\",\r\n \"explanation\": \"Asset already exists.\",\r\n \"overwritten\": false,\r\n \"dependencyFailed\": false\r\n }\r\n },\r\n {\r\n \"PolicyAction\": {\r\n \"name\": \"Policy Action [Request Transformation] -> Policy For API LabCaseTestService_VS[2.0]\",\r\n \"id\": \"73a459c5-a15c-49ce-8394-459a34adb81e\",\r\n \"status\": \"Failed\",\r\n \"explanation\": \"Asset already exists.\",\r\n \"overwritten\": false,\r\n \"dependencyFailed\": false\r\n }\r\n },\r\n {\r\n \"PolicyAction\": {\r\n \"name\": \"Policy Action [Enable HTTP / HTTPS] -> Policy For API LabCaseTestService_VS[2.0]\",\r\n \"id\": \"75852c98-244a-4be3-8434-f39a7426ce95\",\r\n \"status\": \"Failed\",\r\n \"explanation\": \"Asset already exists.\",\r\n \"overwritten\": false,\r\n \"dependencyFailed\": false\r\n }\r\n },\r\n {\r\n \"API\": {\r\n \"name\": \"LabCaseTestService_VS[2.0]\",\r\n \"id\": \"9ae31b7f-25e6-11e8-9ed0-e261b16c5360\",\r\n \"status\": \"Failed\",\r\n \"explanation\": \"Asset already exists.\",\r\n \"overwritten\": false,\r\n \"dependencyFailed\": false\r\n }\r\n },\r\n {\r\n \"PolicyAction\": {\r\n \"name\": \"Policy Action [Monitor Service Performance] -> Policy For API LabCaseTestService_VS[2.0]\",\r\n \"id\": \"11d6d5d8-a55b-480b-8305-34544937fea8\",\r\n \"status\": \"Failed\",\r\n \"explanation\": \"Asset already exists.\",\r\n \"overwritten\": false,\r\n \"dependencyFailed\": false\r\n }\r\n },\r\n {\r\n \"Alias\": {\r\n \"name\": \"LabCaseEndpointAlias\",\r\n \"id\": \"fe1d5c3c-e02a-11e7-9d18-d9340e1d9bce\",\r\n \"status\": \"Failed\",\r\n \"explanation\": \"Asset already exists.\",\r\n \"overwritten\": false,\r\n \"dependencyFailed\": false\r\n }\r\n },\r\n {\r\n \"PolicyAction\": {\r\n \"name\": \"Policy Action [Service Result Cache] -> Policy For API LabCaseTestService_VS[2.0]\",\r\n \"id\": \"0fc7967a-0c31-4ba2-bc8a-a70f059d3ef0\",\r\n \"status\": \"Failed\",\r\n \"explanation\": \"Asset already exists.\",\r\n \"overwritten\": false,\r\n \"dependencyFailed\": false\r\n }\r\n },\r\n {\r\n \"PolicyAction\": {\r\n \"name\": \"Policy Action [Straight Through Routing] -> Policy For API LabCaseTestService_VS[2.0]\",\r\n \"id\": \"fa476c9d-b30c-4d51-b7c5-80a824723f4f\",\r\n \"status\": \"Failed\",\r\n \"explanation\": \"Asset already exists.\",\r\n \"overwritten\": false,\r\n \"dependencyFailed\": false\r\n }\r\n },\r\n {\r\n \"PolicyAction\": {\r\n \"name\": \"Policy Action [Outbound Authentication - Transport] -> Policy For API LabCaseTestService_VS[2.0]\",\r\n \"id\": \"a2947928-5a38-49a0-b0bb-2076800987a1\",\r\n \"status\": \"Failed\",\r\n \"explanation\": \"Asset already exists.\",\r\n \"overwritten\": false,\r\n \"dependencyFailed\": false\r\n }\r\n },\r\n {\r\n \"PolicyAction\": {\r\n \"name\": \"Policy Action [Identify & Authorize Application] -> Policy For API LabCaseTestService_VS[2.0]\",\r\n \"id\": \"f37af4f0-1304-4cf2-b6ea-dc19b012f537\",\r\n \"status\": \"Failed\",\r\n \"explanation\": \"Asset already exists.\",\r\n \"overwritten\": false,\r\n \"dependencyFailed\": false\r\n }\r\n }\r\n ]\r\n }\r\n },\r\n \"includeApis\": false,\r\n \"includeApplications\": false,\r\n \"includeSubscriptions\": false\r\n },\r\n {\r\n \"id\": \"917e144e-70cc-4ada-8541-9f68d28483e9\",\r\n \"name\": \"samplePromote_01\",\r\n \"destinationStages\": [\r\n \"2d9e280a-b529-466c-9ec8-d6b0e93026a8\"\r\n ],\r\n \"valueSubstitution\": [],\r\n \"promotedAssets\": {\r\n \"api\": [\r\n \"d033acd7-f935-4d92-8042-b152a992b0cd\"\r\n ]\r\n },\r\n \"creationTime\": \"2018-08-07 07:33:10 GMT\",\r\n \"owner\": \"Administrator\",\r\n \"status\": \"Success\",\r\n \"promotionResults\": {\r\n \"sampleStage\": {\r\n \"status\": \"Success\",\r\n \"ArchiveResult\": [\r\n {\r\n \"Policy\": {\r\n \"name\": \"Policy For API PetStore on Heroku[1.0.0]\",\r\n \"id\": \"629edf16-3a8c-4362-b75c-2a9f9ab27ee0\",\r\n \"status\": \"Failed\",\r\n \"explanation\": \"Asset already exists.\",\r\n \"overwritten\": false,\r\n \"dependencyFailed\": false\r\n }\r\n },\r\n {\r\n \"PolicyAction\": {\r\n \"name\": \"Policy Action [Straight Through Routing] -> Policy For API PetStore on Heroku[1.0.0]\",\r\n \"id\": \"e50eba2b-6f54-4585-9dac-25b20543bf82\",\r\n \"status\": \"Failed\",\r\n \"explanation\": \"Asset already exists.\",\r\n \"overwritten\": false,\r\n \"dependencyFailed\": false\r\n }\r\n },\r\n {\r\n \"PolicyAction\": {\r\n \"name\": \"Policy Action [Enable HTTP / HTTPS] -> Policy For API PetStore on Heroku[1.0.0]\",\r\n \"id\": \"b8b508e0-a61d-49f0-9131-a9379dbd7f6e\",\r\n \"status\": \"Failed\",\r\n \"explanation\": \"Asset already exists.\",\r\n \"overwritten\": false,\r\n \"dependencyFailed\": false\r\n }\r\n },\r\n {\r\n \"API\": {\r\n \"name\": \"PetStore on Heroku[1.0.0]\",\r\n \"id\": \"d033acd7-f935-4d92-8042-b152a992b0cd\",\r\n \"status\": \"Failed\",\r\n \"explanation\": \"Asset already exists.\",\r\n \"overwritten\": false,\r\n \"dependencyFailed\": false\r\n }\r\n }\r\n ]\r\n }\r\n },\r\n \"includeApis\": false,\r\n \"includeApplications\": false,\r\n \"includeSubscriptions\": false\r\n },\r\n {\r\n \"id\": \"025d530f-e8ed-4984-99bf-9d216bd3adc0\",\r\n \"name\": \"samplePromote_01\",\r\n \"destinationStages\": [\r\n \"2d9e280a-b529-466c-9ec8-d6b0e93026a8\"\r\n ],\r\n \"valueSubstitution\": [],\r\n \"promotedAssets\": {\r\n \"api\": [\r\n \"d033acd7-f935-4d92-8042-b152a992b0cd\"\r\n ]\r\n },\r\n \"creationTime\": \"2018-08-07 07:33:57 GMT\",\r\n \"owner\": \"Administrator\",\r\n \"status\": \"Success\",\r\n \"promotionResults\": {\r\n \"sampleStage\": {\r\n \"status\": \"Success\",\r\n \"ArchiveResult\": [\r\n {\r\n \"PolicyAction\": {\r\n \"name\": \"Policy Action [Enable HTTP / HTTPS] -> Policy For API PetStore on Heroku[1.0.0]\",\r\n \"id\": \"b8b508e0-a61d-49f0-9131-a9379dbd7f6e\",\r\n \"status\": \"Success\",\r\n \"explanation\": \"OK\",\r\n \"overwritten\": true,\r\n \"dependencyFailed\": null\r\n }\r\n },\r\n {\r\n \"API\": {\r\n \"name\": \"PetStore on Heroku[1.0.0]\",\r\n \"id\": \"d033acd7-f935-4d92-8042-b152a992b0cd\",\r\n \"status\": \"Success\",\r\n \"explanation\": \"OK\",\r\n \"overwritten\": true,\r\n \"dependencyFailed\": null\r\n }\r\n },\r\n {\r\n \"Policy\": {\r\n \"name\": \"Policy For API PetStore on Heroku[1.0.0]\",\r\n \"id\": \"629edf16-3a8c-4362-b75c-2a9f9ab27ee0\",\r\n \"status\": \"Success\",\r\n \"explanation\": \"OK\",\r\n \"overwritten\": true,\r\n \"dependencyFailed\": null\r\n }\r\n },\r\n {\r\n \"PolicyAction\": {\r\n \"name\": \"Policy Action [Straight Through Routing] -> Policy For API PetStore on Heroku[1.0.0]\",\r\n \"id\": \"e50eba2b-6f54-4585-9dac-25b20543bf82\",\r\n \"status\": \"Success\",\r\n \"explanation\": \"OK\",\r\n \"overwritten\": true,\r\n \"dependencyFailed\": null\r\n }\r\n }\r\n ]\r\n }\r\n },\r\n \"includeApis\": false,\r\n \"includeApplications\": false,\r\n \"includeSubscriptions\": false\r\n }\r\n ]\r\n}" + } + }, + "401" : { + "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." + } + }, + "security" : [ { + "Basic" : [ ] + } ] + }, + "post" : { + "description" : "This REST operation is used to promote the API Gateway assets from the source machine to destination machine where the destination machine is configured as a stage", + "operationId" : "createPromotion", + "consumes" : [ "application/json" ], + "produces" : [ "application/json" ], + "parameters" : [ { + "in" : "body", + "name" : "body", + "description" : "Promotion request payload", + "required" : true, + "schema" : { + "$ref" : "#/definitions/Promotion" + }, + "x-examples" : { + "application/json" : "{\"description\":\"Promoting the weather API version 2.0 to QA stage so that QA can start testing this API\",\"name\":\"samplePromote\",\"destinationStages\":[\"2d9e280a-b529-466c-9ec8-d6b0e93026a8\"],\"promotedAssets\":{\"api\":[\"9ae31b7f-25e6-11e8-9ed0-e261b16c5360\"],\"application\":[]}}" + } + } ], + "responses" : { + "200" : { + "description" : "Promotion of assets is completed successfully in API Gateway.", + "schema" : { + "$ref" : "#/definitions/Promotion" + }, + "examples" : { + "application/json" : "{\r\n \"promotion\": {\r\n \"id\": \"025d530f-e8ed-4984-99bf-9d216bd3adc0\",\r\n \"name\": \"samplePromote_01\",\r\n \"destinationStages\": [\r\n \"2d9e280a-b529-466c-9ec8-d6b0e93026a8\"\r\n ],\r\n \"valueSubstitution\": [],\r\n \"promotedAssets\": {\r\n \"api\": [\r\n \"d033acd7-f935-4d92-8042-b152a992b0cd\"\r\n ]\r\n },\r\n \"creationTime\": \"2018-08-07 07:33:57 GMT\",\r\n \"owner\": \"Administrator\",\r\n \"status\": \"Success\",\r\n \"promotionResults\": {\r\n \"sampleStage\": {\r\n \"status\": \"Success\",\r\n \"ArchiveResult\": [\r\n {\r\n \"PolicyAction\": {\r\n \"name\": \"Policy Action [Enable HTTP / HTTPS] -> Policy For API PetStore on Heroku[1.0.0]\",\r\n \"id\": \"b8b508e0-a61d-49f0-9131-a9379dbd7f6e\",\r\n \"status\": \"Success\",\r\n \"explanation\": \"OK\",\r\n \"overwritten\": true,\r\n \"dependencyFailed\": null\r\n }\r\n },\r\n {\r\n \"API\": {\r\n \"name\": \"PetStore on Heroku[1.0.0]\",\r\n \"id\": \"d033acd7-f935-4d92-8042-b152a992b0cd\",\r\n \"status\": \"Success\",\r\n \"explanation\": \"OK\",\r\n \"overwritten\": true,\r\n \"dependencyFailed\": null\r\n }\r\n },\r\n {\r\n \"Policy\": {\r\n \"name\": \"Policy For API PetStore on Heroku[1.0.0]\",\r\n \"id\": \"629edf16-3a8c-4362-b75c-2a9f9ab27ee0\",\r\n \"status\": \"Success\",\r\n \"explanation\": \"OK\",\r\n \"overwritten\": true,\r\n \"dependencyFailed\": null\r\n }\r\n },\r\n {\r\n \"PolicyAction\": {\r\n \"name\": \"Policy Action [Straight Through Routing] -> Policy For API PetStore on Heroku[1.0.0]\",\r\n \"id\": \"e50eba2b-6f54-4585-9dac-25b20543bf82\",\r\n \"status\": \"Success\",\r\n \"explanation\": \"OK\",\r\n \"overwritten\": true,\r\n \"dependencyFailed\": null\r\n }\r\n }\r\n ]\r\n }\r\n },\r\n \"includeApis\": false,\r\n \"includeApplications\": false,\r\n \"includeSubscriptions\": false\r\n }\r\n}" + } + }, + "400" : { + "description" : "This status code shows when the user missed the mandatory fields like destinationStages, promotedAssets in the request or provide a invalid request body" + }, + "401" : { + "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to configure a stage." + } + }, + "security" : [ { + "Basic" : [ ] + } ] + } + }, + "/promotion/{promotionId}" : { + "get" : { + "description" : "Retrieve a promotion based on the promotion id.", + "operationId" : "getPromotion", + "produces" : [ "application/json" ], + "parameters" : [ { + "name" : "promotionId", + "in" : "path", + "description" : "Promotion Id for the promotion to be retrieved", + "required" : true, + "type" : "string", + "x-example" : "353bd366-47d4-4703-aecf-9cb40cdcc864" + } ], + "responses" : { + "200" : { + "description" : "Returns the promotion based on the promotionId.", + "schema" : { + "$ref" : "#/definitions/Promotion" + }, + "examples" : { + "application/json" : "{\r\n \"promotion\": {\r\n \"id\": \"025d530f-e8ed-4984-99bf-9d216bd3adc0\",\r\n \"name\": \"samplePromote_01\",\r\n \"destinationStages\": [\r\n \"2d9e280a-b529-466c-9ec8-d6b0e93026a8\"\r\n ],\r\n \"valueSubstitution\": [],\r\n \"promotedAssets\": {\r\n \"api\": [\r\n \"d033acd7-f935-4d92-8042-b152a992b0cd\"\r\n ]\r\n },\r\n \"creationTime\": \"2018-08-07 07:33:57 GMT\",\r\n \"owner\": \"Administrator\",\r\n \"status\": \"Success\",\r\n \"promotionResults\": {\r\n \"sampleStage\": {\r\n \"status\": \"Success\",\r\n \"ArchiveResult\": [\r\n {\r\n \"PolicyAction\": {\r\n \"name\": \"Policy Action [Enable HTTP / HTTPS] -> Policy For API PetStore on Heroku[1.0.0]\",\r\n \"id\": \"b8b508e0-a61d-49f0-9131-a9379dbd7f6e\",\r\n \"status\": \"Success\",\r\n \"explanation\": \"OK\",\r\n \"overwritten\": true,\r\n \"dependencyFailed\": null\r\n }\r\n },\r\n {\r\n \"API\": {\r\n \"name\": \"PetStore on Heroku[1.0.0]\",\r\n \"id\": \"d033acd7-f935-4d92-8042-b152a992b0cd\",\r\n \"status\": \"Success\",\r\n \"explanation\": \"OK\",\r\n \"overwritten\": true,\r\n \"dependencyFailed\": null\r\n }\r\n },\r\n {\r\n \"Policy\": {\r\n \"name\": \"Policy For API PetStore on Heroku[1.0.0]\",\r\n \"id\": \"629edf16-3a8c-4362-b75c-2a9f9ab27ee0\",\r\n \"status\": \"Success\",\r\n \"explanation\": \"OK\",\r\n \"overwritten\": true,\r\n \"dependencyFailed\": null\r\n }\r\n },\r\n {\r\n \"PolicyAction\": {\r\n \"name\": \"Policy Action [Straight Through Routing] -> Policy For API PetStore on Heroku[1.0.0]\",\r\n \"id\": \"e50eba2b-6f54-4585-9dac-25b20543bf82\",\r\n \"status\": \"Success\",\r\n \"explanation\": \"OK\",\r\n \"overwritten\": true,\r\n \"dependencyFailed\": null\r\n }\r\n }\r\n ]\r\n }\r\n },\r\n \"includeApis\": false,\r\n \"includeApplications\": false,\r\n \"includeSubscriptions\": false\r\n }\r\n}" + } + }, + "404" : { + "description" : "This status code indicates that the promotionId specified is not found in the API Gateway" + }, + "401" : { + "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." + } + }, + "security" : [ { + "Basic" : [ ] + } ] + }, + "delete" : { + "description" : "Delete the promotion", + "operationId" : "deletePromotion", + "parameters" : [ { + "name" : "promotionId", + "in" : "path", + "description" : "Promotion Id for the promotion to be deleted", + "required" : true, + "type" : "string", + "x-example" : "353bd366-47d4-4703-aecf-9cb40cdcc864" + } ], + "responses" : { + "404" : { + "description" : "This status code indicates that the promotionId specified is not found in the API Gateway" + }, + "401" : { + "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API" + }, + "204" : { + "description" : "Success" + } + }, + "security" : [ { + "Basic" : [ ] + } ] + } + }, + "/rollback" : { + "get" : { + "description" : "This REST operation is used to retrieve the list of possible rollbacks a user can do from the local (target) API Gateway instance. Each rollback entry was created when a promotion of assets to the local (target) API Gateway instance from another stage", + "operationId" : "getRollbacks", + "produces" : [ "application/json" ], + "parameters" : [ ], + "responses" : { + "200" : { + "description" : "Returns the list of all rollbacks", + "schema" : { + "type" : "array", + "items" : { + "$ref" : "#/definitions/Rollback" + } + }, + "examples" : { + "application/json" : "{\r\n \"rollback\": [\r\n {\r\n \"id\": \"b3c038d6-84a8-4b35-93af-21ab4151c1d4\",\r\n \"name\": \"testP2\",\r\n \"description\": \"\",\r\n\t\t\t\"promotionTime\": \"2018-12-04 09:07:43 GMT\"\r\n },\r\n {\r\n \"id\": \"01faa8db-1213-44c3-9b4a-cda173f00b4a\",\r\n \"name\": \"testP3\",\r\n \"status\": \"Success\",\r\n \"promotionTime\": \"2018-12-04 09:08:31 GMT\",\r\n \"lastRollbackTime\": \"2018-12-04 09:18:27 GMT\"\r\n }\r\n ]\r\n}" + } + }, + "401" : { + "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." + } + }, + "security" : [ { + "Basic" : [ ] + } ] + } + }, + "/rollback/{rollbackId}" : { + "get" : { + "description" : "Retrieve a rollback based on the rollback id.", + "operationId" : "getRollback", + "produces" : [ "application/json" ], + "parameters" : [ { + "name" : "rollbackId", + "in" : "path", + "description" : "Rollback Id for the rollback to be retrieved", + "required" : true, + "type" : "string", + "x-example" : "353bd366-47d4-4703-aecf-9cb40cdcc864" + } ], + "responses" : { + "200" : { + "description" : "Returns the rollback based on the rollbackId.", + "schema" : { + "$ref" : "#/definitions/Rollback" + }, + "examples" : { + "application/json" : "{\r\n \"rollback\": \r\n {\r\n \"id\": \"01faa8db-1213-44c3-9b4a-cda173f00b4a\",\r\n \"name\": \"testP3\",\r\n \"status\": \"Success\",\r\n \"promotionTime\": \"2018-12-04 09:08:31 GMT\",\r\n \"lastRollbackTime\": \"2018-12-04 09:18:27 GMT\"\r\n }\r\n}" + } + }, + "404" : { + "description" : "This status code indicates that the rollbackId specified is not found in the API Gateway" + }, + "401" : { + "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." + } + }, + "security" : [ { + "Basic" : [ ] + } ] + }, + "put" : { + "description" : "This REST operation is used to rollback the assets to the previous state i.e the state prior to promotion. Rollback should be initiated from the local gateway instance.", + "operationId" : "doRollback", + "consumes" : [ "application/json" ], + "produces" : [ "application/json" ], + "parameters" : [ { + "name" : "rollbackId", + "in" : "path", + "description" : "Rollback Id for the promotion to be rollbacked", + "required" : true, + "type" : "string", + "x-example" : "353bd366-47d4-4703-aecf-9cb40cdcc864" + } ], + "responses" : { + "200" : { + "description" : "Returns the rollback object", + "schema" : { + "$ref" : "#/definitions/Rollback" + }, + "examples" : { + "application/json" : "{\r\n \"rollback\": \r\n {\r\n \"id\": \"01faa8db-1213-44c3-9b4a-cda173f00b4a\",\r\n \"name\": \"testP3\",\r\n \"status\": \"Success\",\r\n \"promotionTime\": \"2018-12-04 09:08:31 GMT\",\r\n \"lastRollbackTime\": \"2018-12-04 09:18:27 GMT\"\r\n }\r\n}" + } + }, + "404" : { + "description" : "This status code indicates that the rollbackId specified is not found in the API Gateway" + }, + "401" : { + "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." + } + }, + "security" : [ { + "Basic" : [ ] + } ] + }, + "delete" : { + "description" : "Delete the rollback", + "operationId" : "deleteRollback", + "parameters" : [ { + "name" : "rollbackId", + "in" : "path", + "description" : "Rollback Id for the rollback to be deleted", + "required" : true, + "type" : "string", + "x-example" : "353bd366-47d4-4703-aecf-9cb40cdcc864" + } ], + "responses" : { + "404" : { + "description" : "This status code indicates that the rollbackId specified is not found in the API Gateway" + }, + "401" : { + "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API" + }, + "204" : { + "description" : "Success" + } + }, + "security" : [ { + "Basic" : [ ] + } ] + } + } + }, + "securityDefinitions" : { + "Basic" : { + "description" : "API Gateway Administrator and API Gateway provider", + "type" : "basic" + } + }, + "definitions" : { + "Stage" : { + "type" : "object", + "properties" : { + "id" : { + "type" : "string", + "readOnly" : true + }, + "name" : { + "type" : "string", + "description" : "Unique name for the stage" + }, + "description" : { + "type" : "string", + "description" : "Description for the stage" + }, + "url" : { + "type" : "string", + "description" : "The URL of the host machine where the stage is deployed on an API Gateway installation" + }, + "username" : { + "type" : "string", + "description" : "The username of a registered API Gateway user who has the Manage promotions functional privilege in the target API Gateway instance" + }, + "password" : { + "type" : "string", + "description" : "A valid password of the API Gateway user identified by the attribute Username" + }, + "keystoreAlias" : { + "type" : "string", + "description" : "The alias of the keystore containing the private key that is used for performing asset promotion from one (source) stage to another (target) stage.\nThe Keystore alias field contains a list of the available keystore aliases in API Gateway. If there are no configured keystore aliases, this field lists the default Integration Server keystore, DEFAULT_IS_KEYSTORE ." + }, + "keyAlias" : { + "type" : "string", + "description" : "The alias of the private key that is stored in the keystore specified by the keystore alias.\nThe Key alias field contains a list of the available aliases in the selected keystore. If there are no configured keystores, this field is empty" + } + } + }, + "AssetObject" : { + "type" : "object", + "properties" : { + "name" : { + "type" : "string", + "description" : "Name of the API gateway asset", + "readOnly" : true + }, + "id" : { + "type" : "string", + "description" : "Id of the API gateway asset", + "readOnly" : true + }, + "status" : { + "type" : "string", + "description" : "Status of the API gateway asset i.e success or failure", + "readOnly" : true + }, + "explanation" : { + "type" : "string", + "description" : "Explanation for the failure", + "readOnly" : true + }, + "overwritten" : { + "type" : "boolean", + "description" : "Specifies whether the promoted asset overwrite any existing asset or not", + "readOnly" : true + }, + "dependencyFailed" : { + "type" : "boolean", + "description" : "Specified whether the dependency asset is failed or not", + "readOnly" : true + } + } + }, + "PrintArchiveResults" : { + "type" : "object", + "properties" : { + "status" : { + "type" : "string", + "description" : "Status of the promotion of assets", + "readOnly" : true + }, + "errorReason" : { + "type" : "string", + "description" : "Error reason for the promotion of assets, if the promotion is failed", + "readOnly" : true + }, + "ArchiveResult" : { + "type" : "array", + "description" : "List of the result of the promotion of all selected assets where key in the each element is the asset type", + "readOnly" : true, + "items" : { + "type" : "object", + "additionalProperties" : { + "$ref" : "#/definitions/AssetObject" + } + } + } + } + }, + "Promotion" : { + "type" : "object", + "properties" : { + "id" : { + "type" : "string", + "readOnly" : true + }, + "description" : { + "type" : "string", + "description" : "Description for the promotion" + }, + "name" : { + "type" : "string", + "description" : "Name for the promotion" + }, + "destinationStages" : { + "type" : "array", + "description" : "List of target stages (specified by stage ids) that you want to promote the assets", + "items" : { + "type" : "string" + } + }, + "promotedAssets" : { + "type" : "object", + "description" : "Map of assets with its associated asset ids to be promoted where key is the asset type and value is the list of asset ids. Possible asset types are \"USER\", \"GROUP\", \"USERS\", \"GROUPS\", \"ACCESSPROFILES\", \"LDAPGROUPS\", \"CDSGROUPS\", \"ASSERTION\", \"APPLICATION\", \"API\", \"ALIAS\", \"POLICY\", \"POLICY_ACTION\", \"PLAN\", \"PACKAGE\", \"ADMINISTRATOR_SETTING\", \"PORTAL_GATEWAY\", \"OAUTH2_SCOPE_DATA\", \"SUBSCRIPTION\", \"API_DOCUMENT\", \"APPROVAL_CONFIGURATION\", \"OUTBOUND_PROXY\", \"URL_ALIAS\", \"KEYSTORE\", \"TRUSTSTORE\", \"KERBEROS_SETTING\", \"JNDI_PROVIDER_ALIAS\", \"JMS_CONNECTION_ALIAS\", \"JMS_TRIGGER\", \"WEB_SERVICE_ENDPOINT_ALIAS\".", + "additionalProperties" : { + "type" : "array", + "items" : { + "type" : "string" + } + } + }, + "creationTime" : { + "type" : "string", + "readOnly" : true + }, + "owner" : { + "type" : "string", + "description" : "The user who initiates this promotion", + "readOnly" : true + }, + "status" : { + "type" : "string", + "description" : "Overall status of the promotion whether it's success or failure", + "readOnly" : true + }, + "errorReason" : { + "type" : "string", + "description" : "Reason for the promotion if it's failed", + "readOnly" : true + }, + "promotionResults" : { + "type" : "object", + "description" : "Result of the individual assets that is promoted to all destination stages along with the reason where key is the stage name", + "readOnly" : true, + "additionalProperties" : { + "$ref" : "#/definitions/PrintArchiveResults" + } + }, + "includeApis" : { + "type" : "boolean", + "description" : "Include the APIs associated with the applications during the promotion of applications" + }, + "includeApplications" : { + "type" : "boolean", + "description" : "Include the applications associated with the APIs during the promotion of APIs" + }, + "includeSubscriptions" : { + "type" : "boolean", + "description" : "Include the subscriptions associated with the packages during the promotion of packages" + } + } + }, + "Rollback" : { + "type" : "object", + "properties" : { + "id" : { + "type" : "string", + "readOnly" : true + }, + "name" : { + "type" : "string", + "description" : "Name for the rollback" + }, + "description" : { + "type" : "string", + "description" : "Description for the rollback" + }, + "status" : { + "type" : "string", + "description" : "Overall status of the rollback whether it's success or failure", + "readOnly" : true + }, + "sourceStage" : { + "type" : "string", + "description" : "Source stage of the promotion", + "readOnly" : true + }, + "promotedBy" : { + "type" : "string", + "description" : "User who initiated the promotion", + "readOnly" : true + }, + "promotionTime" : { + "type" : "string", + "description" : "Actual time of the promotion", + "readOnly" : true + }, + "lastRollbackTime" : { + "type" : "string", + "description" : "The time at which the asset promotion was rolled back", + "readOnly" : true + } + } + } + } +} \ No newline at end of file diff --git a/apigatewayservices/APIGatewayPublicServices.json b/apigatewayservices/APIGatewayPublicServices.json new file mode 100644 index 0000000..e74e525 --- /dev/null +++ b/apigatewayservices/APIGatewayPublicServices.json @@ -0,0 +1,97 @@ +{ + "swagger" : "2.0", + "info" : { + "description" : "API Gateway public services contains the list of all the public services. \n1. JWT: JSON Web Token (JWT) is a JSON-based open standard (RFC 7519) means of representing a set of information to be securely transmitted between two parties. A set of information is the set of claims (claim set) represented by the JWT. A claim set consists of zero or more claims represented by the name-value pairs, where the names are strings and the values are arbitrary JSON values.API Gateway can generate a JWT token itself or validate the JWT token generated by a trusted third party server.This API allows you to fetch a JWT from API Gateway and also fetch JSON Web key URI of the APIGateway.", + "version" : "10.3", + "title" : "API Gateway Public services" + }, + "host" : "localhost:5555", + "basePath" : "/rest/pub/apigateway", + "schemes" : [ "http" ], + "consumes" : [ "plain/text" ], + "produces" : [ "application/json" ], + "paths" : { + "/jwt/getJsonWebToken" : { + "get" : { + "description" : "This operation fetches JWT from APIGateway.To obtain the JWT from APIGateway the client has to has to pass the basic authentication credentials.", + "operationId" : "getJsonWebToken", + "produces" : [ "application/json" ], + "parameters" : [ { + "name" : "app_id", + "in" : "query", + "description" : "This parameter is used to specify an application id for which APIGateway generates a JWT", + "required" : false, + "type" : "string" + } ], + "responses" : { + "200" : { + "description" : "This response indicates that the client is able to fetch the JWT successfuly.", + "schema" : { + "$ref" : "#/definitions/JWT" + }, + "examples" : { + "application/json" : "{\r\n \"jwt\":\"eyJraWQiOiJzc29zIiwiYWxnIjoiUlMyNTYifQ.eyJzdWIiOiJBZG1pbmlzdHJhdG9yIiwiYXVkIjoiIiwibmJmIjoxNTIyNjcxMDMyLCJpc3MiOiJBQUEiLCJleHAiOjE1MjI2OTEwMTIsImlhdCI6MTUyMjY3MTAzMn0.C3ZtttnEPgIT9F1rvLzxjrbVr5AWDqGgicdt7O_bP2qYEgaQ3daBkGAHZeRwDPtijfzC7uL0WdEeqzUwC8ybbX-7dqz76yUhhLIeTl7O1qJj2uT8KNKUJC93-hL_SwzbQfO61rW_dHDYeXgnldZltxHE66HUU3mQOjSvQ_GuOfDdzACyMPcfVuW2_uYcT2HfxBI4l5GCIVVKI92E2JG1-Edm9A7PL8L435i64onotVl-QEaMMGMc6LqaY-pOKz6xflJQ06tt2woMhsqVf2iyNr0P8849fBCHXZkghX2is8cYaQQw2Y6cKDEtWA9ueWsPprvIGiWkyHVtUD3Jv4Gymg\" \r\n}" + } + }, + "400" : { + "description" : "This status code indicates that the requested URI is not valid " + }, + "401" : { + "description" : "This response indicates that invalid credentials have been provided while fetching the JWT." + }, + "500" : { + "description" : "This response indicates that the server has encountered an error while fetching JWT" + } + }, + "security" : [ { + "Basic" : [ ] + } ] + } + }, + "/jwt/certs" : { + "get" : { + "description" : "This is the JWKS uri of the API Gateway. It fetches all the public keys of APIGateway, which can be used by to validate the JWT generated by API Gateway. The response will be in the JWK format", + "operationId" : "JWKSUri", + "produces" : [ "application/json" ], + "parameters" : [ ], + "responses" : { + "200" : { + "description" : "This response indicates that the client is able to fetch the JWKS uri of the API Gateway.", + "schema" : { + "$ref" : "#/definitions/JWKSResponse" + }, + "examples" : { + "application/json" : "{\r\n \"keys\": [{\r\n \"kty\": \"RSA\",\r\n \"e\": \"AQAB\",\r\n \"use\": \"sig\",\r\n \"kid\": \"ssos\",\r\n \"alg\": \"RSA\",\r\n \"n\": \"oIFE3wNHbGNFYOX_Bc4Xp38atxOoGy6dfZRiykqBWWFX5UZ3Cyb_1sxvHyXUuwCqvL482gB8piaAyY1UVLZgCB9W6wUmHNR_ZADJFXchh_r51RyFTf7RG22YPQSoHaV0ei0A5A9q8cC7CfjqWH9dGfJ01kNJaXsNGlrySMga23r6NwENbIa8rUmKuSfPi5XpOmcXKcbZhNrgdMsu_0RIbjMk0wROtSV6bZHCx6SZABvdAybz2ZwBmgP6yuTNWW_wICByP1cZnLXCYC-sRkN-cDV7xtViOrbyBKI1SfFeEAVPvwxHngBQm1NCzRaRwPJ7ChOx1POdBW5wQsYjvhjTFQ\"\r\n }]\r\n}" + } + }, + "400" : { + "description" : "This status code indicates that the requested URI is not valid " + }, + "500" : { + "description" : "This response indicates that the server has encountered an error while fetching the JWKS uri of the API Gateway" + } + } + } + } + }, + "securityDefinitions" : { + "Basic" : { + "description" : "API Gateway Administrator", + "type" : "basic" + } + }, + "definitions" : { + "JWT" : { + "type" : "object", + "properties" : { + "jwt" : { + "type" : "string", + "description" : "Json Web Token (JWT) generated by APIGateway" + } + } + }, + "JWKSResponse" : { + "type" : "object" + } + } +} \ No newline at end of file diff --git a/apigatewayservices/APIGatewaySearch.json b/apigatewayservices/APIGatewaySearch.json new file mode 100644 index 0000000..7abc88f --- /dev/null +++ b/apigatewayservices/APIGatewaySearch.json @@ -0,0 +1,188 @@ +{ + "swagger" : "2.0", + "info" : { + "description" : "The search API allows you to execute a search query in API Gateway and receive search results that match the search query. You can perform search across different objects such as API, Application, Alias, Assertions, Users and User Groups.", + "version" : "10.3", + "title" : "API Gateway Search Service" + }, + "host" : "localhost:5555", + "basePath" : "/rest/apigateway", + "schemes" : [ "http" ], + "consumes" : [ "application/json" ], + "produces" : [ "application/json" ], + "paths" : { + "/search" : { + "post" : { + "description" : "The search API allows you to execute a search query in API Gateway and get back search results that match the query. You can perform search across different objects such as API, Application, Alias, Assertions, Policies, Administrator Settings, Policy Action, Packages, Plans, Subscriptions, Users and User Groups. Following are the type of searches that does not require scope or fields. \n 1. Users - This type is used to get the list of users from IS. \n 2. User Groups - This type is used to get the list of user groups from IS. \n\n Following are the type of searches for which you can specify the scope and fields. \n 1. API - This type is used to search the APIs in API Gateway. \n 2. Application - This type is used to search the Applications created in API Gateway. \n 3. Alias - This type is used to search aliases created in API Gateway. \n 4. Assertions - This type is used to search custom assertions created in API Gateway. \n 5. Policy - This type is used to search policies in API Gateway. \n 6. Policy Action - This type is used to search policy actions in API Gateway. \n 7. Package - This type is used to search packages in API Gateway. \n 8. Plan - This type is used to search plans in API Gateway. \n 9. Administrator Setting - This type is used to search the administrator settings in API Gateway. \n 10. Subscription - This type is used to search subscriptions in API Gateway. \n 11. Access Profiles - This type is used to search the access profiles in API Gateway. \n 12. Portal Gateway - This type is used to search the API portal configuration in API Gateway. \n 13. API Document - This type is used to search the API Documents added for APIs in API Gateway. \n \n For the above ten types, if a scope is specified, then the scope is applicable for all types regardless whether it is applicable for that or not. Also if the required fields are specified and it is not available in any other types, then the search result corresponds to that type does not have the fields. \n If from and size are specified then it skips first n records specified in from for all types and it fetches the number of records specified in size.", + "operationId" : "searchByType", + "consumes" : [ "application/json" ], + "produces" : [ "application/json" ], + "parameters" : [ { + "in" : "body", + "name" : "body", + "description" : "Search Parameters to search for specific set of results on specified types", + "required" : true, + "schema" : { + "$ref" : "#/definitions/SearchContext" + }, + "x-examples" : { + "application/json" : "{\r\n\t\"types\": [\"user\",\r\n\t\"group\",\r\n\t\"api\",\r\n\t\"alias\",\r\n\t\"application\",\r\n\t\"policy\"],\r\n\t\"condition\": \"or\",\r\n\t\"scope\": [{\r\n\t\t\"attributeName\": \"apiName\",\r\n\t\t\"keyword\": \".*api.*\"\r\n\t},\r\n\t{\r\n\t\t\"attributeName\": \"names.value\",\r\n\t\t\"keyword\": \"Default Policy for API EMP\"\r\n\t},\r\n\t{\r\n\t\t\"attributeName\": \"name\",\r\n\t\t\"keyword\": \".*app.*\"\r\n\t},\r\n\t{\r\n\t\t\"attributeName\" : \"type\",\r\n\t\t\"keyword\" : \"simple\"\r\n\t},\r\n\t{\r\n\t\t\"attributeName\" : \"policyScope\",\r\n\t\t\"keyword\" : \"global\"\r\n\t}\r\n\t],\r\n\t\"responseFields\": [\"apiName\",\r\n\t\"id\",\r\n\t\"name\",\r\n\t\"owner\",\"policyScope\",\"names\"],\r\n\t\"from\": 0,\r\n\t\"size\": -1\r\n}" + } + } ], + "responses" : { + "200" : { + "description" : "This status code indicates that the search process is successful. The result is a map of type and object. Each type has it's respective search results mapped.", + "schema" : { + "type" : "object", + "additionalProperties" : { + "type" : "object" + } + }, + "examples" : { + "application/json" : "{\r\n\t\"GROUP\": [\"API-Gateway-Administrators\",\r\n\t\"API-Gateway-Providers\",\r\n\t\"Administrators\",\r\n\t\"Anonymous\",\r\n\t\"Developers\",\r\n\t\"Everybody\",\r\n\t\"Replicators\"],\r\n\t\"POLICY\": [{\r\n\t\t\"id\": \"GlobalLogInvocationPolicy\",\r\n\t\t\"names\": [{\r\n\t\t\t\"value\": \"Transaction logging\",\r\n\t\t\t\"locale\": \"English\"\r\n\t\t}],\r\n\t\t\"policyEnforcements\": [],\r\n\t\t\"policyScope\": \"GLOBAL\",\r\n\t\t\"global\": false,\r\n\t\t\"active\": false,\r\n\t\t\"systemPolicy\": false\r\n\t},\r\n\t{\r\n\t\t\"id\": \"3808db1a-8577-41e5-af6b-dcdac470524c\",\r\n\t\t\"names\": [{\r\n\t\t\t\"value\": \"Transport Policy\",\r\n\t\t\t\"locale\": \"English\"\r\n\t\t}],\r\n\t\t\"policyEnforcements\": [],\r\n\t\t\"policyScope\": \"GLOBAL\",\r\n\t\t\"global\": false,\r\n\t\t\"active\": false,\r\n\t\t\"systemPolicy\": false\r\n\t}],\r\n\t\"ALIAS\": [{\r\n\t\t\"name\": \"Myname\",\r\n\t\t\"value\": \"API Gateway N\"\r\n\t}],\r\n\t\"APPLICATION\": [{\r\n\t\t\"name\": \"Application\",\r\n\t\t\"owner\": \"Administrator\",\r\n\t\t\"identifiers\": [],\r\n\t\t\"siteURLs\": [],\r\n\t\t\"subscription\": false\r\n\t}],\r\n\t\"API\": [{\r\n\t\t\"apiName\": \"API Gateway\",\r\n\t\t\"isActive\": false,\r\n\t\t\"policies\": [],\r\n\t\t\"publishedPortals\": [],\r\n\t\t\"systemVersion\": 1,\r\n\t\t\"id\": \"1ac48246-80eb-44c8-8901-564e025dbbde\"\r\n\t},\r\n\t{\r\n\t\t\"apiName\": \"API Gateway Policy Management\",\r\n\t\t\"isActive\": false,\r\n\t\t\"owner\": \"Administrator\",\r\n\t\t\"policies\": [],\r\n\t\t\"publishedPortals\": [],\r\n\t\t\"systemVersion\": 1,\r\n\t\t\"id\": \"7b2166a6-cf3c-4f72-a04b-72c110c302d2\"\r\n\t}],\r\n\t\"USER\": [\"Administrator\",\r\n\t\"Default\",\r\n\t\"Developer\",\r\n\t\"Replicator\",\r\n\t\"apigateway\"]\r\n}" + } + }, + "401" : { + "description" : "This status code indicates that either the user did not provide any user credentials or user does not have API Gateway Administrator or API Gateway provider access rights for search." + }, + "400" : { + "description" : "This status code indicates either error occurred during the search process or user has missed some mandatory field that is required to do the search. The examples shows user missed a mandatory field \"condition\" in request body", + "examples" : { + "application/json" : "{\r\n \"errorDetails\": \" Mandatory field condition is missing in the input request body\"\r\n}" + } + }, + "500" : { + "description" : "This status code indicates that the search process is not successful and has failed due to some internal server error." + } + }, + "security" : [ { + "Basic" : [ ] + } ] + } + }, + "/search/_count" : { + "post" : { + "description" : "This REST call is intent to get the total number of records for the specified scope and types. If the scope is not specified it returns total number of assets for the specified type. Both /search and /search/_count shares the same payload. Except types,scope and condition other attributes are not considered during the REST API call.", + "operationId" : "countByType", + "consumes" : [ "application/json" ], + "produces" : [ "application/json" ], + "parameters" : [ { + "in" : "body", + "name" : "body", + "description" : "Search Parameters to search for specific set of results on specified types", + "required" : true, + "schema" : { + "$ref" : "#/definitions/SearchContext" + }, + "x-examples" : { + "application/json" : "{\r\n\t\"types\": [\"user\",\r\n\t\"group\",\r\n\t\"api\",\r\n\t\"alias\",\r\n\t\"application\",\r\n\t\"policy\"],\r\n\t\"condition\": \"or\",\r\n\t\"scope\": [{\r\n\t\t\"attributeName\": \"apiName\",\r\n\t\t\"keyword\": \".*api.*\"\r\n\t},\r\n\t{\r\n\t\t\"attributeName\": \"names.value\",\r\n\t\t\"keyword\": \"Default Policy for API EMP\"\r\n\t},\r\n\t{\r\n\t\t\"attributeName\": \"name\",\r\n\t\t\"keyword\": \".*app.*\"\r\n\t},\r\n\t{\r\n\t\t\"attributeName\" : \"type\",\r\n\t\t\"keyword\" : \"simple\"\r\n\t},\r\n\t{\r\n\t\t\"attributeName\" : \"policyScope\",\r\n\t\t\"keyword\" : \"global\"\r\n\t}\r\n\t]}" + } + } ], + "responses" : { + "200" : { + "description" : "This status code indicates the count for the specified scope is success. The result will be a map of type and count for each type.", + "schema" : { + "type" : "object", + "additionalProperties" : { + "type" : "integer", + "format" : "int32" + } + }, + "examples" : { + "application/json" : "{\r\n\t\"group\":12,\r\n\t\"policy\":13,\r\n\t\"user\":4,\r\n\t\"api\":5\r\n}" + } + }, + "401" : { + "description" : "This status code indicates that the user did not provide any user credential or user does not have API Gateway Administrator or API Gateway provider access for search." + }, + "400" : { + "description" : "This status code indicates either error occurred during the search process or user has missed some mandatory field that is required to do the search. The examples shows user missed a mandatory field \"condition\" in request body", + "examples" : { + "application/json" : "{\r\n \"errorDetails\": \" Mandatory field condition is missing in the input request body\"\r\n}" + } + }, + "500" : { + "description" : "This status code indicates the search process is not success and failed due to some internal server error." + } + }, + "security" : [ { + "Basic" : [ ] + } ] + } + } + }, + "securityDefinitions" : { + "Basic" : { + "description" : "API Gateway Administrator and API Gateway provider", + "type" : "basic" + } + }, + "definitions" : { + "SearchContext" : { + "type" : "object", + "required" : [ "types" ], + "properties" : { + "types" : { + "type" : "string", + "description" : "List of allowed types that can be searched across API Gateway.", + "enum" : [ "USER", "GROUP", "USERS", "GROUPS", "ACCESSPROFILES", "LDAPGROUPS", "CDSGROUPS", "ASSERTION", "APPLICATION", "API", "ALIAS", "POLICY", "POLICY_ACTION", "PLAN", "PACKAGE", "ADMINISTRATOR_SETTING", "PORTAL_GATEWAY", "OAUTH2_SCOPE_DATA", "SUBSCRIPTION", "API_DOCUMENT" ] + }, + "scope" : { + "$ref" : "#/definitions/SearchField" + }, + "condition" : { + "type" : "string", + "description" : "Condition between scope specified. The value can be either 'and' or 'or'", + "enum" : [ "and", "or" ] + }, + "responseFields" : { + "type" : "array", + "description" : "List of fields to be fetched for the specified types.", + "items" : { + "type" : "string" + } + }, + "from" : { + "type" : "integer", + "format" : "int32", + "description" : "The starting index of the record to be fetched. Default value is 0 which fetches from the start. The index is applied to each type separately. For each type the first n records are skipped as specified in from field. If the value specified is less than zero then the default value is taken for fetching records" + }, + "size" : { + "type" : "integer", + "format" : "int32", + "description" : "Number of records to be fetched. Default value is -1, which fetches all the records. The size is applied to each type separately. Each type has the records less than or equal to the size specified. If the value specified is less than zero then the default value is taken for fetching records" + }, + "sortByField" : { + "type" : "string", + "description" : "Field name on which the sorting needs to be applied." + }, + "sortOrder" : { + "type" : "string", + "description" : "Sort order for the records", + "enum" : [ "ASC", "DESC" ] + } + }, + "description" : "This defines the request structure to search across API Gateway" + }, + "SearchField" : { + "type" : "object", + "properties" : { + "attributeName" : { + "type" : "string", + "description" : "Field name to be searched for the list of types specified" + }, + "keyword" : { + "type" : "string", + "description" : "Value of the corresponding field to be matched. User can use regular expression to specify the multiple values for single attributeName. For example to find \n 1. apiDescription contains \"weather\" or equals \"country\" , we can use {\"attributeName\" : \"apiDescription\", \"keyword\" : \".*weather.*|country\"}. \n 2. apiName starts with weather - {\"attributeName\" : \"apiName\", \"keyword\" : \"weather.*\"}. \n 3. api type is REST or SOAP - {\"attributeName\" : \"type\", \"keyword\" : \"REST|SOAP\"}." + }, + "rawFieldKey" : { + "type" : "string" + }, + "orTokenKey" : { + "type" : "boolean" + } + }, + "description" : "A scope is filtering criteria for the list of types specified in search.It is a key/value pair. key is the field name on which the search is being done and value contains the search string to be searched on the field specified.To get the field name for a type, user needs to access the corresponding API Gateway REST service to know about the fields available for a particular type. " + } + } +} \ No newline at end of file diff --git a/apigatewayservices/APIGatewayServiceManagement.json b/apigatewayservices/APIGatewayServiceManagement.json new file mode 100644 index 0000000..1a6cee6 --- /dev/null +++ b/apigatewayservices/APIGatewayServiceManagement.json @@ -0,0 +1,4947 @@ +{ + "swagger" : "2.0", + "info" : { + "description" : "API Gateway Service Management Service allows you to manage the APIs in the API Gateway. Any user with the 'Manage APIs' functional privilege can manage the APIs in the API Gateway. By default, the users who are part of either API-Gateway-Providers or API-Gateway-Administrators groups will have this privilege.\n\nAPI Gateway supports four types of APIs - REST APIs, SOAP APIs, WebSocket APIs and OData APIs. REST APIs can be created by providing the swagger (file/url), openAPI (file/url), raml (file/url) or can be created from scratch. SOAP APIs can be created using the WSDL (file/url). If the API definitions has reference schemas, then an archive containing all the definitions can be provided as an input. WebSocket APIs can be created from scratch. OData APIs can be created using their service document or metadata document url.\n\nThis service provides you with the options to create, update, read and delete of all the above API types.\n\nAn API can either be in an Active or an InActive state. An Active state indicates that the API is available for consumers. The users can use this service to activate or deactivate the API. Post activation, API Gateway generates 'Gateway Endpoints' which can be used by the API consumers to access the API. Generally API consumers use their applications to consume the APIs.\n\nThis service can also be used to manage the API Scopes. An API Scope is a collection of resources or operations in the API. Users can create multiple scopes for a single API.\n\nOnce the API is created, users can enforce the access restrictions and other rules on the API by add the policies to the API. Policies can be attached to REST, SOAP and OData APIs. Refer to the Policy Management API documentation for more details on the policies. Refer to the Document Management API documentation for more details on attaching documents to an API.\n\nThis service can also be used to publish/unpublish the APIs to/from a service registry. An API in an active state can be registered (published) to one or more service registries.", + "version" : "10.3", + "title" : "API Gateway Service Management Service" + }, + "host" : "localhost:5555", + "basePath" : "/rest/apigateway", + "schemes" : [ "http" ], + "consumes" : [ "application/json" ], + "produces" : [ "application/json" ], + "paths" : { + "/apis" : { + "get" : { + "description" : "Get all APIs or subset of APIs", + "operationId" : "getAPIs", + "produces" : [ "application/json" ], + "parameters" : [ { + "name" : "apiIds", + "in" : "query", + "description" : "API Ids for the API to be retrieved", + "required" : false, + "type" : "string", + "x-example" : "353bd366-47d4-4703-aecf-9cb40cdcc864,353bd366-47d4-4703-aecf-9cb40cdcc345" + }, { + "name" : "from", + "in" : "query", + "description" : "Starting index from the list of APIs to be retrieved", + "required" : false, + "type" : "integer" + }, { + "name" : "size", + "in" : "query", + "description" : "Number of APIs to be retrieved", + "required" : false, + "type" : "integer" + } ], + "responses" : { + "200" : { + "description" : "Returns the list of all APIs", + "schema" : { + "type" : "array", + "items" : { + "$ref" : "#/definitions/APIResponseDelete" + } + }, + "examples" : { + "application/json" : "{\r\n \"apiResponse\": [\r\n {\r\n \"api\": {\r\n \"apiName\": \"ChuckNorrisAPI\",\r\n \"apiVersion\": \"v2\",\r\n \"apiDescription\": \"Chuck Norris facts are satirical factoids about martial artist and actor Chuck Norris that have become an Internet phenomenon and as a result have become widespread in popular culture. The 'facts' are normally absurd hyperbolic claims about Norris' toughness, attitude, virility, sophistication, and masculinity.\",\r\n \"isActive\": false,\r\n \"type\": \"REST\",\r\n \"publishedPortals\": [],\r\n \"systemVersion\": 2,\r\n \"id\": \"46df4227-a100-486c-9580-0bf388ec6ec7\"\r\n },\r\n \"responseStatus\": \"SUCCESS\"\r\n },\r\n {\r\n \"api\": {\r\n \"apiName\": \"ChuckNorrisAPI\",\r\n \"apiVersion\": \"1.0\",\r\n \"apiDescription\": \"Chuck Norris facts are satirical factoids about martial artist and actor Chuck Norris that have become an Internet phenomenon and as a result have become widespread in popular culture. The 'facts' are normally absurd hyperbolic claims about Norris' toughness, attitude, virility, sophistication, and masculinity.\",\r\n \"isActive\": false,\r\n \"type\": \"REST\",\r\n \"publishedPortals\": [],\r\n \"systemVersion\": 1,\r\n \"id\": \"25fb937a-8360-41ab-8be5-987b14fe631d\"\r\n },\r\n \"responseStatus\": \"SUCCESS\"\r\n }\r\n ]\r\n}" + } + }, + "401" : { + "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." + } + }, + "security" : [ { + "Basic" : [ ] + } ] + }, + "post" : { + "description" : "This REST operation is used to create an API by importing a file, url or from scratch", + "operationId" : "createAPI", + "consumes" : [ "application/json", "multipart/form-data" ], + "produces" : [ "application/json" ], + "parameters" : [ { + "name" : "file", + "in" : "formData", + "description" : "Input swagger / raml / wsdl file to be imported", + "required" : true, + "type" : "file", + "x-example" : "petstore.json" + }, { + "name" : "apiName", + "in" : "formData", + "description" : "Name of the API", + "required" : true, + "type" : "string", + "x-example" : "Swagger Petstore" + }, { + "name" : "apiDescription", + "in" : "formData", + "description" : "Description of the API", + "required" : false, + "type" : "string", + "x-example" : "This is a sample server Petstore server" + }, { + "name" : "apiVersion", + "in" : "formData", + "description" : "Version of the API", + "required" : false, + "type" : "string", + "x-example" : "V1" + }, { + "name" : "type", + "in" : "formData", + "description" : "Input file type", + "required" : true, + "type" : "string", + "x-example" : "swagger", + "enum" : [ "swagger", "raml", "wsdl", "openapi" ] + }, { + "name" : "rootFileName", + "in" : "formData", + "description" : "Name of the main file in the zip. Required only when the input file is zip format", + "required" : false, + "type" : "string", + "x-example" : "mainFile.wsdl" + }, { + "in" : "body", + "name" : "body", + "description" : "API request payload", + "required" : true, + "schema" : { + "$ref" : "#/definitions/InputAPI" + }, + "x-examples" : { + "application/json" : "{\r\n \"apiDefinition\": {\r\n \"type\": \"rest\",\r\n \"info\": {\r\n \"description\": \"Chuck Norris facts are satirical factoids about martial artist and actor Chuck Norris that have become an Internet phenomenon and as a result have become widespread in popular culture. The 'facts' are normally absurd hyperbolic claims about Norris' toughness, attitude, virility, sophistication, and masculinity.\",\r\n \"version\": \"1.0\",\r\n \"title\": \"ChuckNorrisAPI\"\r\n },\r\n \"host\": \"api.chucknorris.io\",\r\n \"basePath\": \"/jokes\",\r\n \"schemes\": [\r\n \"https\"\r\n ],\r\n \"security\": [],\r\n \"paths\": {\r\n \"/random\": {\r\n \"get\": {\r\n \"summary\": \"GET\",\r\n \"description\": \"\",\r\n \"operationId\": \"GET\",\r\n \"produces\": [\r\n \"application/json\"\r\n ],\r\n \"responses\": {},\r\n \"enabled\": true\r\n },\r\n \"enabled\": true\r\n }\r\n },\r\n \"securityDefinitions\": {},\r\n \"definitions\": {},\r\n \"baseUriParameters\": [],\r\n \"externalDocs\": [],\r\n \"servers\": [\r\n {\r\n \"url\": \"https://api.chucknorris.io/jokes\"\r\n }\r\n ],\r\n \"components\": {\r\n \"schemas\": {}\r\n }\r\n },\r\n \"nativeEndpoint\": [\r\n {\r\n \"passSecurityHeaders\": true,\r\n \"uri\": \"https://api.chucknorris.io/jokes\",\r\n \"connectionTimeoutDuration\": 0,\r\n \"alias\": false\r\n }\r\n ],\r\n \"apiName\": \"ChuckNorris\",\r\n \"apiVersion\": \"1.0\",\r\n \"apiDescription\": \"Chuck Norris facts are satirical factoids about martial artist and actor Chuck Norris that have become an Internet phenomenon and as a result have become widespread in popular culture. The 'facts' are normally absurd hyperbolic claims about Norris' toughness, attitude, virility, sophistication, and masculinity.\",\r\n \"maturityState\": \"Beta\",\r\n \"isActive\": false,\r\n \"type\": \"REST\",\r\n \"owner\": \"Administrator\",\r\n \"policies\": [\r\n \"08afbfa9-78e1-4c23-bb19-c0012464047e\"\r\n ],\r\n \"scopes\": [],\r\n \"publishedPortals\": [],\r\n \"creationDate\": \"2018-09-03 11:56:21 GMT\",\r\n \"systemVersion\": 1,\r\n \"id\": \"badc18e6-446f-4aa3-96cd-33e46bd40fb5\"\r\n }" + } + } ], + "responses" : { + "200" : { + "description" : "Returns the created API object", + "schema" : { + "$ref" : "#/definitions/APIResponseCreate" + }, + "examples" : { + "application/json" : "{\r\n \"apiResponse\": {\r\n \"api\": {\r\n \"apiDefinition\": {\r\n \"type\": \"rest\",\r\n \"info\": {\r\n \"description\": \"Chuck Norris facts are satirical factoids about martial artist and actor Chuck Norris that have become an Internet phenomenon and as a result have become widespread in popular culture. The 'facts' are normally absurd hyperbolic claims about Norris' toughness, attitude, virility, sophistication, and masculinity.\",\r\n \"version\": \"1.0\",\r\n \"title\": \"ChuckNorrisAPI\"\r\n },\r\n \"host\": \"api.chucknorris.io\",\r\n \"basePath\": \"/jokes\",\r\n \"schemes\": [\r\n \"https\"\r\n ],\r\n \"security\": [],\r\n \"paths\": {\r\n \"/random\": {\r\n \"get\": {\r\n \"summary\": \"GET\",\r\n \"description\": \"\",\r\n \"operationId\": \"GET\",\r\n \"produces\": [\r\n \"application/json\"\r\n ],\r\n \"responses\": {},\r\n \"enabled\": true\r\n },\r\n \"enabled\": true\r\n }\r\n },\r\n \"securityDefinitions\": {},\r\n \"definitions\": {},\r\n \"baseUriParameters\": [],\r\n \"externalDocs\": [],\r\n \"servers\": [\r\n {\r\n \"url\": \"https://api.chucknorris.io/jokes\"\r\n }\r\n ],\r\n \"components\": {\r\n \"schemas\": {}\r\n }\r\n },\r\n \"nativeEndpoint\": [\r\n {\r\n \"passSecurityHeaders\": true,\r\n \"uri\": \"https://api.chucknorris.io/jokes\",\r\n \"connectionTimeoutDuration\": 0,\r\n \"alias\": false\r\n }\r\n ],\r\n \"apiName\": \"ChuckNorris\",\r\n \"apiVersion\": \"1.0\",\r\n \"apiDescription\": \"Chuck Norris facts are satirical factoids about martial artist and actor Chuck Norris that have become an Internet phenomenon and as a result have become widespread in popular culture. The 'facts' are normally absurd hyperbolic claims about Norris' toughness, attitude, virility, sophistication, and masculinity.\",\r\n \"maturityState\": \"Beta\",\r\n \"isActive\": false,\r\n \"type\": \"REST\",\r\n \"owner\": \"Administrator\",\r\n \"policies\": [\r\n \"08afbfa9-78e1-4c23-bb19-c0012464047e\"\r\n ],\r\n \"scopes\": [],\r\n \"publishedPortals\": [],\r\n \"creationDate\": \"2018-09-03 11:56:21 GMT\",\r\n \"systemVersion\": 1,\r\n \"id\": \"badc18e6-446f-4aa3-96cd-33e46bd40fb5\"\r\n },\r\n \"responseStatus\": \"SUCCESS\",\r\n \"versions\": [\r\n {\r\n \"versionNumber\": \"1.0\",\r\n \"apiId\": \"badc18e6-446f-4aa3-96cd-33e46bd40fb5\"\r\n }\r\n ]\r\n }\r\n}" + } + }, + "400" : { + "description" : "This status code shows when the user missed the mandatory fields like type, file/url/apiDefinition in the request or provide a invalid request body" + }, + "401" : { + "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." + } + }, + "security" : [ { + "Basic" : [ ] + } ] + }, + "delete" : { + "description" : "Delete the inactive APIs", + "operationId" : "deleteAPIs", + "produces" : [ "application/json" ], + "parameters" : [ { + "name" : "apiIds", + "in" : "query", + "description" : "API Ids for the APIs to be deleted. Multiple API ids combined by comma", + "required" : true, + "type" : "string", + "x-example" : "353bd366-47d4-4703-aecf-9cb40cdcc864,353bd366-47d4-4703-aecf-9cb40cdcc854" + }, { + "name" : "forceDelete", + "in" : "query", + "description" : "Flag for force delete. Required when API is associated with some applications", + "required" : false, + "type" : "boolean", + "default" : true, + "x-example" : true + } ], + "responses" : { + "200" : { + "description" : "Returns the apiId along with the error when unsuccessful", + "schema" : { + "type" : "array", + "items" : { + "$ref" : "#/definitions/APIResponseDelete" + } + } + }, + "400" : { + "description" : "This response code returns when the mandatory parameter apiIds is missing in the query parameter" + }, + "401" : { + "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." + }, + "204" : { + "description" : "Success" + } + }, + "security" : [ { + "Basic" : [ ] + } ] + } + }, + "/apis/{apiId}" : { + "get" : { + "description" : "Retrieve an API based on the API id.", + "operationId" : "getAPI", + "produces" : [ "application/json" ], + "parameters" : [ { + "name" : "apiId", + "in" : "path", + "description" : "API Id for the API to be retrieved", + "required" : true, + "type" : "string", + "x-example" : "353bd366-47d4-4703-aecf-9cb40cdcc864" + }, { + "name" : "format", + "in" : "query", + "description" : "Output format of the API. If the value is 'swagger', you get a API definition in swagger format. If the value is 'raml', you get a raml document. If the value is 'openapi', you get a open API document. If the value is 'odata', you get a zip file holding the OData metadata and service document.", + "required" : false, + "type" : "string", + "x-example" : "raml" + }, { + "name" : "url", + "in" : "query", + "description" : "User selected endpoint for API definition in swagger/raml format.", + "required" : false, + "type" : "string", + "x-example" : "http://hostname:5555/gateway/servicename/1.0" + } ], + "responses" : { + "200" : { + "description" : "If the format is swagger, returns the swagger content in json and raml returns the raml content in yaml. If the format is openapi, returns the open api content in json. If the format is odata, you get a zip file holding the OData metadata and service document.", + "schema" : { + "$ref" : "#/definitions/APIResponseGetAPI" + }, + "examples" : { + "application/json" : "{\r\n \"apiResponse\": {\r\n \"api\": {\r\n \"apiDefinition\": {\r\n \"type\": \"rest\",\r\n \"info\": {\r\n \"description\": \"Chuck Norris facts are satirical factoids about martial artist and actor Chuck Norris that have become an Internet phenomenon and as a result have become widespread in popular culture. The 'facts' are normally absurd hyperbolic claims about Norris' toughness, attitude, virility, sophistication, and masculinity.\",\r\n \"version\": \"1.0\",\r\n \"title\": \"ChuckNorrisAPI\"\r\n },\r\n \"host\": \"api.chucknorris.io\",\r\n \"basePath\": \"/jokes\",\r\n \"schemes\": [\r\n \"https\"\r\n ],\r\n \"security\": [],\r\n \"paths\": {\r\n \"/random\": {\r\n \"get\": {\r\n \"summary\": \"GET\",\r\n \"description\": \"\",\r\n \"operationId\": \"GET\",\r\n \"produces\": [\r\n \"application/json\"\r\n ],\r\n \"responses\": {},\r\n \"enabled\": true\r\n },\r\n \"enabled\": true\r\n }\r\n },\r\n \"securityDefinitions\": {},\r\n \"definitions\": {},\r\n \"baseUriParameters\": [],\r\n \"externalDocs\": [],\r\n \"servers\": [\r\n {\r\n \"url\": \"https://api.chucknorris.io/jokes\"\r\n }\r\n ],\r\n \"components\": {\r\n \"schemas\": {}\r\n }\r\n },\r\n \"nativeEndpoint\": [\r\n {\r\n \"passSecurityHeaders\": true,\r\n \"uri\": \"https://api.chucknorris.io/jokes\",\r\n \"connectionTimeoutDuration\": 0,\r\n \"alias\": false\r\n }\r\n ],\r\n \"apiName\": \"ChuckNorris\",\r\n \"apiVersion\": \"1.0\",\r\n \"apiDescription\": \"Chuck Norris facts are satirical factoids about martial artist and actor Chuck Norris that have become an Internet phenomenon and as a result have become widespread in popular culture. The 'facts' are normally absurd hyperbolic claims about Norris' toughness, attitude, virility, sophistication, and masculinity.\",\r\n \"maturityState\": \"Beta\",\r\n \"isActive\": false,\r\n \"type\": \"REST\",\r\n \"owner\": \"Administrator\",\r\n \"policies\": [\r\n \"08afbfa9-78e1-4c23-bb19-c0012464047e\"\r\n ],\r\n \"scopes\": [],\r\n \"publishedPortals\": [],\r\n \"creationDate\": \"2018-09-03 11:56:21 GMT\",\r\n \"systemVersion\": 1,\r\n \"id\": \"badc18e6-446f-4aa3-96cd-33e46bd40fb5\"\r\n },\r\n \"responseStatus\": \"SUCCESS\",\r\n \"versions\": [\r\n {\r\n \"versionNumber\": \"1.0\",\r\n \"apiId\": \"badc18e6-446f-4aa3-96cd-33e46bd40fb5\"\r\n }\r\n ]\r\n }\r\n}" + } + }, + "404" : { + "description" : "This status code indicates that the apiId specified is not found in the API Gateway" + }, + "401" : { + "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." + } + }, + "security" : [ { + "Basic" : [ ] + } ] + }, + "put" : { + "description" : "This REST operation is used to update an API by importing a file, url or inline.\n\nWhile updating the API, visibility of the operations can be set by enabling or disabling the operations. Disabled operations will not be exposed to the customers. By default, all the operations are exposed to the consumers.\n\nWhen updating the API using file or url, API Gateway overwrite the resources/operations for the API. But it will retain the maturity state, scopes, visibility and if API mocking is enabled, then default mocked responses, mocked conditions and IS services will also be retained.", + "operationId" : "updateAPI", + "consumes" : [ "application/json", "multipart/form-data" ], + "produces" : [ "application/json" ], + "parameters" : [ { + "name" : "apiId", + "in" : "path", + "description" : "API Id for the API to be updated", + "required" : true, + "type" : "string", + "x-example" : "353bd366-47d4-4703-aecf-9cb40cdcc864" + }, { + "name" : "file", + "in" : "formData", + "description" : "Input swagger / raml / wsdl file", + "required" : true, + "type" : "file", + "x-example" : "petstore.json" + }, { + "name" : "apiName", + "in" : "formData", + "description" : "Name of the API", + "required" : true, + "type" : "string", + "x-example" : "Swagger Petstore" + }, { + "name" : "apiDescription", + "in" : "formData", + "description" : "Description of the API", + "required" : false, + "type" : "string", + "x-example" : "This is a sample server Petstore server" + }, { + "name" : "apiVersion", + "in" : "formData", + "description" : "Version of the API", + "required" : false, + "type" : "string", + "x-example" : "V1" + }, { + "name" : "type", + "in" : "formData", + "description" : "Input file type", + "required" : true, + "type" : "string", + "x-example" : "swagger", + "enum" : [ "swagger", "raml", "wsdl", "openapi" ] + }, { + "name" : "rootFileName", + "in" : "formData", + "description" : "Name of the main file in the zip. Required when the input file is zip format", + "required" : false, + "type" : "string", + "x-example" : "mainFile.wsdl" + }, { + "in" : "body", + "name" : "body", + "description" : "API request payload", + "required" : true, + "schema" : { + "$ref" : "#/definitions/GatewayAPI" + }, + "x-examples" : { + "application/json" : "{\r\n \"apiDefinition\": {\r\n \"type\": \"rest\",\r\n \"info\": {\r\n \"description\": \"Chuck Norris facts are satirical factoids about martial artist and actor Chuck Norris that have become an Internet phenomenon and as a result have become widespread in popular culture. The 'facts' are normally absurd hyperbolic claims about Norris' toughness, attitude, virility, sophistication, and masculinity.\",\r\n \"version\": \"1.0\",\r\n \"title\": \"ChuckNorrisAPI\"\r\n },\r\n \"host\": \"api.chucknorris.io\",\r\n \"basePath\": \"/jokes\",\r\n \"schemes\": [\r\n \"https\"\r\n ],\r\n \"security\": [],\r\n \"paths\": {\r\n \"/random\": {\r\n \"get\": {\r\n \"summary\": \"GET\",\r\n \"description\": \"\",\r\n \"operationId\": \"GET\",\r\n \"produces\": [\r\n \"application/json\"\r\n ],\r\n \"responses\": {},\r\n \"enabled\": true\r\n },\r\n \"enabled\": true\r\n }\r\n },\r\n \"securityDefinitions\": {},\r\n \"definitions\": {},\r\n \"baseUriParameters\": [],\r\n \"externalDocs\": [],\r\n \"servers\": [\r\n {\r\n \"url\": \"https://api.chucknorris.io/jokes\"\r\n }\r\n ],\r\n \"components\": {\r\n \"schemas\": {}\r\n }\r\n },\r\n \"nativeEndpoint\": [\r\n {\r\n \"passSecurityHeaders\": true,\r\n \"uri\": \"https://api.chucknorris.io/jokes\",\r\n \"connectionTimeoutDuration\": 0,\r\n \"alias\": false\r\n }\r\n ],\r\n \"apiName\": \"ChuckNorris\",\r\n \"apiVersion\": \"1.0\",\r\n \"apiDescription\": \"Chuck Norris facts are satirical factoids about martial artist and actor Chuck Norris that have become an Internet phenomenon and as a result have become widespread in popular culture. The 'facts' are normally absurd hyperbolic claims about Norris' toughness, attitude, virility, sophistication, and masculinity.\",\r\n \"maturityState\": \"Beta\",\r\n \"isActive\": false,\r\n \"type\": \"REST\",\r\n \"owner\": \"Administrator\",\r\n \"policies\": [\r\n \"08afbfa9-78e1-4c23-bb19-c0012464047e\"\r\n ],\r\n \"scopes\": [],\r\n \"publishedPortals\": [],\r\n \"creationDate\": \"2018-09-03 11:56:21 GMT\",\r\n \"systemVersion\": 1,\r\n \"id\": \"badc18e6-446f-4aa3-96cd-33e46bd40fb5\"\r\n }" + } + } ], + "responses" : { + "200" : { + "description" : "Returns the updated API object", + "schema" : { + "$ref" : "#/definitions/APIResponseCreate" + }, + "examples" : { + "application/json" : "{\r\n \"apiResponse\": {\r\n \"api\": {\r\n \"apiDefinition\": {\r\n \"type\": \"rest\",\r\n \"info\": {\r\n \"description\": \"Chuck Norris facts are satirical factoids about martial artist and actor Chuck Norris that have become an Internet phenomenon and as a result have become widespread in popular culture. The 'facts' are normally absurd hyperbolic claims about Norris' toughness, attitude, virility, sophistication, and masculinity.\",\r\n \"version\": \"1.0\",\r\n \"title\": \"ChuckNorrisAPI\"\r\n },\r\n \"host\": \"api.chucknorris.io\",\r\n \"basePath\": \"/jokes\",\r\n \"schemes\": [\r\n \"https\"\r\n ],\r\n \"security\": [],\r\n \"paths\": {\r\n \"/random\": {\r\n \"get\": {\r\n \"summary\": \"GET\",\r\n \"description\": \"\",\r\n \"operationId\": \"GET\",\r\n \"produces\": [\r\n \"application/json\"\r\n ],\r\n \"responses\": {},\r\n \"enabled\": true\r\n },\r\n \"enabled\": true\r\n }\r\n },\r\n \"securityDefinitions\": {},\r\n \"definitions\": {},\r\n \"baseUriParameters\": [],\r\n \"externalDocs\": [],\r\n \"servers\": [\r\n {\r\n \"url\": \"https://api.chucknorris.io/jokes\"\r\n }\r\n ],\r\n \"components\": {\r\n \"schemas\": {}\r\n }\r\n },\r\n \"nativeEndpoint\": [\r\n {\r\n \"passSecurityHeaders\": true,\r\n \"uri\": \"https://api.chucknorris.io/jokes\",\r\n \"connectionTimeoutDuration\": 0,\r\n \"alias\": false\r\n }\r\n ],\r\n \"apiName\": \"ChuckNorris\",\r\n \"apiVersion\": \"1.0\",\r\n \"apiDescription\": \"Chuck Norris facts are satirical factoids about martial artist and actor Chuck Norris that have become an Internet phenomenon and as a result have become widespread in popular culture. The 'facts' are normally absurd hyperbolic claims about Norris' toughness, attitude, virility, sophistication, and masculinity.\",\r\n \"maturityState\": \"Beta\",\r\n \"isActive\": false,\r\n \"type\": \"REST\",\r\n \"owner\": \"Administrator\",\r\n \"policies\": [\r\n \"08afbfa9-78e1-4c23-bb19-c0012464047e\"\r\n ],\r\n \"scopes\": [],\r\n \"publishedPortals\": [],\r\n \"creationDate\": \"2018-09-03 11:56:21 GMT\",\r\n \"systemVersion\": 1,\r\n \"id\": \"badc18e6-446f-4aa3-96cd-33e46bd40fb5\"\r\n },\r\n \"responseStatus\": \"SUCCESS\",\r\n \"versions\": [\r\n {\r\n \"versionNumber\": \"1.0\",\r\n \"apiId\": \"badc18e6-446f-4aa3-96cd-33e46bd40fb5\"\r\n }\r\n ]\r\n }\r\n}" + } + }, + "404" : { + "description" : "This status code indicates that the apiId specified is not found in the API Gateway" + }, + "400" : { + "description" : "This status code shows when the user missed the mandatory fields like type, file/url/apiDefinition in the request or provide a invalid request body" + }, + "401" : { + "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." + } + }, + "security" : [ { + "Basic" : [ ] + } ] + }, + "delete" : { + "description" : "Delete the inactive API", + "operationId" : "deleteAPI", + "parameters" : [ { + "name" : "apiId", + "in" : "path", + "description" : "API Id for the API to be deleted", + "required" : true, + "type" : "string", + "x-example" : "353bd366-47d4-4703-aecf-9cb40cdcc864" + }, { + "name" : "forceDelete", + "in" : "query", + "description" : "Flag for force delete. Required when API is associated with some applications", + "required" : false, + "type" : "boolean", + "default" : true, + "x-example" : true + } ], + "responses" : { + "200" : { + "description" : "Returns the apiId along with the error when unsuccessful", + "schema" : { + "$ref" : "#/definitions/APIResponseDelete" + } + }, + "400" : { + "description" : "This response code returns when the deleted API is published to API portal or in active state" + }, + "404" : { + "description" : "This status code indicates that the apiId specified is not found in the API Gateway" + }, + "401" : { + "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API" + }, + "204" : { + "description" : "Success" + } + }, + "security" : [ { + "Basic" : [ ] + } ] + } + }, + "/apis/{apiId}/applications" : { + "get" : { + "description" : "Retrieves the list of registered applications of an API", + "operationId" : "getApplications", + "produces" : [ "application/json" ], + "parameters" : [ { + "name" : "apiId", + "in" : "path", + "description" : "API Id for the API to find the associated applications", + "required" : true, + "type" : "string", + "x-example" : "353bd366-47d4-4703-aecf-9cb40cdcc864" + } ], + "responses" : { + "200" : { + "description" : "Returns the list of associated applications", + "schema" : { + "type" : "array", + "items" : { + "$ref" : "#/definitions/Application" + } + }, + "examples" : { + "application/json" : "{\r\n \"applications\": [\r\n {\r\n \"name\": \"app1\",\r\n \"description\": null,\r\n \"contactEmails\": [],\r\n \"identifiers\": [],\r\n \"siteURLs\": [],\r\n \"version\": \"1.0\",\r\n \"id\": \"ae48cd69-421e-4bdf-a4d0-e86996a78f68\",\r\n \"created\": \"2017-03-13 13:12:03 GMT\",\r\n \"lastupdated\": null,\r\n \"consumingAPIs\": [\r\n \"25fb937a-8360-41ab-8be5-987b14fe631d\"\r\n ],\r\n \"accessTokens\": {\r\n \"apiAccessKey_credentials\": {\r\n \"apiAccessKey\": \"cec4b46b-3569-4f73-a561-172dd67c182a\",\r\n \"expirationInterval\": null\r\n },\r\n \"oauth_credentials\": {\r\n \"clientID\": \"40b78ed3-d171-4bd3-99db-51dd2fa71753\",\r\n \"clientSecret\": \"024b9525-6526-45c8-a66c-d192442064e1\",\r\n \"clientName\": \"app1-6b753c2a-0567-462d-a4ea-1b143ab7a381\",\r\n \"scopes\": [\r\n \"25fb937a-8360-41ab-8be5-987b14fe631d\"\r\n ],\r\n \"token_lifetime\": \"3600\",\r\n \"token_refresh_limit\": \"0\",\r\n \"redirect_uris\": [\r\n \"https://placeholder_redirect_uri\"\r\n ],\r\n \"Type\": \"confidential\"\r\n }\r\n }\r\n }\r\n ]\r\n}" + } + }, + "404" : { + "description" : "This status code indicates that the apiId specified is not found in the API Gateway" + }, + "401" : { + "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." + } + }, + "security" : [ { + "Basic" : [ ] + } ] + } + }, + "/apis/{apiId}/source" : { + "get" : { + "description" : "Download the API definition that was used to create the API. This is applicable only for SOAP APIs.", + "operationId" : "getSource", + "produces" : [ "multipart/mixed" ], + "parameters" : [ { + "name" : "apiId", + "in" : "path", + "description" : "API Id for the API to download the source content", + "required" : true, + "type" : "string", + "x-example" : "353bd366-47d4-4703-aecf-9cb40cdcc864" + } ], + "responses" : { + "200" : { + "description" : "Returns the source files along with the root file name", + "schema" : { + "type" : "array", + "items" : { + "$ref" : "#/definitions/Multipart" + } + }, + "examples" : { + "multipart/mixed" : "Message-ID: <296841806.5.1489555643275.JavaMail.MRIZ@MCMRIZ01>\r\nMIME-Version: 1.0\r\nContent-Type: multipart/mixed; \r\n\tboundary=\"----=_Part_4_1098332532.1489555643274\"\r\n\r\n------=_Part_4_1098332532.1489555643274\r\ncontent-type: application/zip\r\nContent-Disposition: attachment; filename=\"echoService.zip\"\r\n\r\nfile content in zip format\r\n------=_Part_4_1098332532.1489555643274\r\ncontent-type: text/plain\r\nContent-Disposition: inline; name=\"rootFileName\"\r\n\r\necho.wsdl\r\n------=_Part_4_1098332532.1489555643274--" + } + }, + "404" : { + "description" : "This status code indicates that the apiId specified is not found in the API Gateway" + }, + "400" : { + "description" : "This status code returns when the specified API is not a SOAP API" + }, + "401" : { + "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." + } + }, + "security" : [ { + "Basic" : [ ] + } ] + } + }, + "/apis/{apiId}/globalPolicies" : { + "get" : { + "description" : "Retrieves the list of active global policies applicable to this API", + "operationId" : "getAssociatedGlobalPolicies", + "produces" : [ "application/json" ], + "parameters" : [ { + "name" : "apiId", + "in" : "path", + "description" : "API Id for the API to find the list of applicable global policies", + "required" : true, + "type" : "string", + "x-example" : "353bd366-47d4-4703-aecf-9cb40cdcc864" + } ], + "responses" : { + "200" : { + "description" : "Returns the list of global policy names", + "schema" : { + "$ref" : "#/definitions/APIResponseGetGlobalPolicies" + }, + "examples" : { + "application/json" : "{\r\n \"globalPolicies\": [\r\n \"GlobalLogInvocationPolicy\"\r\n ]\r\n}" + } + }, + "404" : { + "description" : "This status code indicates that the apiId specified is not found in the API Gateway" + }, + "401" : { + "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." + } + }, + "security" : [ { + "Basic" : [ ] + } ] + } + }, + "/apis/{apiId}/versions" : { + "get" : { + "description" : "Retrieve all the versions of the API", + "operationId" : "getVersions", + "produces" : [ "application/json" ], + "parameters" : [ { + "name" : "apiId", + "in" : "path", + "description" : "API Id for the API to retrieve the versions", + "required" : true, + "type" : "string", + "x-example" : "353bd366-47d4-4703-aecf-9cb40cdcc864" + } ], + "responses" : { + "200" : { + "description" : "Returns the API versions", + "schema" : { + "$ref" : "#/definitions/APIResponseDelete" + }, + "examples" : { + "application/json" : "{\r\n \"apiResponse\": {\r\n \"api\": {\r\n \"apiDefinition\": {\r\n \"type\": \"rest\",\r\n \"info\": {\r\n \"description\": \"Chuck Norris facts are satirical factoids about martial artist and actor Chuck Norris that have become an Internet phenomenon and as a result have become widespread in popular culture. The 'facts' are normally absurd hyperbolic claims about Norris' toughness, attitude, virility, sophistication, and masculinity.\",\r\n \"version\": \"1.0\",\r\n \"title\": \"ChuckNorrisAPI\"\r\n },\r\n \"host\": \"api.chucknorris.io\",\r\n \"basePath\": \"/jokes\",\r\n \"schemes\": [\r\n \"https\"\r\n ],\r\n \"security\": [],\r\n \"paths\": {\r\n \"/random\": {\r\n \"get\": {\r\n \"summary\": \"GET\",\r\n \"description\": \"\",\r\n \"operationId\": \"GET\",\r\n \"produces\": [\r\n \"application/json\"\r\n ],\r\n \"responses\": {},\r\n \"enabled\": true\r\n },\r\n \"enabled\": true\r\n }\r\n },\r\n \"securityDefinitions\": {},\r\n \"definitions\": {},\r\n \"baseUriParameters\": [],\r\n \"externalDocs\": [],\r\n \"servers\": [\r\n {\r\n \"url\": \"https://api.chucknorris.io/jokes\"\r\n }\r\n ],\r\n \"components\": {\r\n \"schemas\": {}\r\n }\r\n },\r\n \"nativeEndpoint\": [\r\n {\r\n \"passSecurityHeaders\": true,\r\n \"uri\": \"https://api.chucknorris.io/jokes\",\r\n \"connectionTimeoutDuration\": 0,\r\n \"alias\": false\r\n }\r\n ],\r\n \"apiName\": \"ChuckNorris\",\r\n \"apiVersion\": \"1.0\",\r\n \"apiDescription\": \"Chuck Norris facts are satirical factoids about martial artist and actor Chuck Norris that have become an Internet phenomenon and as a result have become widespread in popular culture. The 'facts' are normally absurd hyperbolic claims about Norris' toughness, attitude, virility, sophistication, and masculinity.\",\r\n \"maturityState\": \"Beta\",\r\n \"isActive\": false,\r\n \"type\": \"REST\",\r\n \"owner\": \"Administrator\",\r\n \"policies\": [\r\n \"08afbfa9-78e1-4c23-bb19-c0012464047e\"\r\n ],\r\n \"scopes\": [],\r\n \"publishedPortals\": [],\r\n \"creationDate\": \"2018-09-03 11:56:21 GMT\",\r\n \"systemVersion\": 1,\r\n \"id\": \"badc18e6-446f-4aa3-96cd-33e46bd40fb5\"\r\n },\r\n \"responseStatus\": \"SUCCESS\",\r\n \"versions\": [\r\n {\r\n \"versionNumber\": \"1.0\",\r\n \"apiId\": \"badc18e6-446f-4aa3-96cd-33e46bd40fb5\"\r\n }\r\n ]\r\n }\r\n}" + } + }, + "404" : { + "description" : "This status code indicates that the apiId specified is not found in the API Gateway" + }, + "401" : { + "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." + } + }, + "security" : [ { + "Basic" : [ ] + } ] + }, + "post" : { + "description" : "Create a new version of an API and retain applications if required", + "operationId" : "createVersion", + "consumes" : [ "application/json" ], + "produces" : [ "application/json" ], + "parameters" : [ { + "name" : "apiId", + "in" : "path", + "description" : "API Id for the API to be versioned", + "required" : true, + "type" : "string", + "x-example" : "353bd366-47d4-4703-aecf-9cb40cdcc864" + }, { + "in" : "body", + "name" : "body", + "description" : "Create version request payload", + "required" : true, + "schema" : { + "$ref" : "#/definitions/InputVersion" + }, + "x-examples" : { + "application/json" : "{\r\n\t\"newApiVersion\" : \"v2\",\r\n\t\"retainApplications\" : true\r\n}" + } + } ], + "responses" : { + "200" : { + "description" : "Return the newly created version of the API", + "schema" : { + "$ref" : "#/definitions/APIResponse" + }, + "examples" : { + "application/json" : "{\r\n \"apiResponse\": {\r\n \"api\": {\r\n \"apiDefinition\": {\r\n \"type\": \"rest\",\r\n \"info\": {\r\n \"description\": \"Chuck Norris facts are satirical factoids about martial artist and actor Chuck Norris that have become an Internet phenomenon and as a result have become widespread in popular culture. The 'facts' are normally absurd hyperbolic claims about Norris' toughness, attitude, virility, sophistication, and masculinity.\",\r\n \"version\": \"1.0\",\r\n \"title\": \"ChuckNorrisAPI\"\r\n },\r\n \"host\": \"api.chucknorris.io\",\r\n \"basePath\": \"/jokes\",\r\n \"schemes\": [\r\n \"https\"\r\n ],\r\n \"security\": [],\r\n \"paths\": {\r\n \"/random\": {\r\n \"get\": {\r\n \"summary\": \"GET\",\r\n \"description\": \"\",\r\n \"operationId\": \"GET\",\r\n \"produces\": [\r\n \"application/json\"\r\n ],\r\n \"responses\": {},\r\n \"enabled\": true\r\n },\r\n \"enabled\": true\r\n }\r\n },\r\n \"securityDefinitions\": {},\r\n \"definitions\": {},\r\n \"baseUriParameters\": [],\r\n \"externalDocs\": [],\r\n \"servers\": [\r\n {\r\n \"url\": \"https://api.chucknorris.io/jokes\"\r\n }\r\n ],\r\n \"components\": {\r\n \"schemas\": {}\r\n }\r\n },\r\n \"nativeEndpoint\": [\r\n {\r\n \"passSecurityHeaders\": true,\r\n \"uri\": \"https://api.chucknorris.io/jokes\",\r\n \"connectionTimeoutDuration\": 0,\r\n \"alias\": false\r\n }\r\n ],\r\n \"apiName\": \"ChuckNorris\",\r\n \"apiVersion\": \"1.0\",\r\n \"apiDescription\": \"Chuck Norris facts are satirical factoids about martial artist and actor Chuck Norris that have become an Internet phenomenon and as a result have become widespread in popular culture. The 'facts' are normally absurd hyperbolic claims about Norris' toughness, attitude, virility, sophistication, and masculinity.\",\r\n \"maturityState\": \"Beta\",\r\n \"isActive\": false,\r\n \"type\": \"REST\",\r\n \"owner\": \"Administrator\",\r\n \"policies\": [\r\n \"08afbfa9-78e1-4c23-bb19-c0012464047e\"\r\n ],\r\n \"scopes\": [],\r\n \"publishedPortals\": [],\r\n \"creationDate\": \"2018-09-03 11:56:21 GMT\",\r\n \"systemVersion\": 1,\r\n \"id\": \"badc18e6-446f-4aa3-96cd-33e46bd40fb5\"\r\n },\r\n \"responseStatus\": \"SUCCESS\",\r\n \"versions\": [\r\n {\r\n \"versionNumber\": \"1.0\",\r\n \"apiId\": \"badc18e6-446f-4aa3-96cd-33e46bd40fb5\"\r\n }\r\n ]\r\n }\r\n}" + } + }, + "400" : { + "description" : "This status code returns when the specified api is not the latest version or if the newApiVersion is empty" + }, + "404" : { + "description" : "Not Found" + }, + "401" : { + "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." + } + }, + "security" : [ { + "Basic" : [ ] + } ] + } + }, + "/apis/{apiId}/scopes" : { + "get" : { + "description" : "An API Scope is a collection of resources or operations in an API. Users can create multiple scopes for a single API. Policies can be attached to an API level or scope level. This method retrieves the scopes of an API.\n\nYou can create, modify or delete the scopes in the update API operation using PUT /api/{apiId}", + "operationId" : "getScopes", + "produces" : [ "application/json" ], + "parameters" : [ { + "name" : "apiId", + "in" : "path", + "description" : "API Id for the API to retrieve the versions", + "required" : true, + "type" : "string", + "x-example" : "353bd366-47d4-4703-aecf-9cb40cdcc864" + } ], + "responses" : { + "200" : { + "description" : "Returns API scopes", + "schema" : { + "type" : "array", + "items" : { + "$ref" : "#/definitions/ScopeResourceIndex" + } + }, + "examples" : { + "application/json" : "{\r\n \"scopeReferences\": [\r\n {\r\n \"references\": [\r\n {\r\n \"resourcePath\": \"/random\",\r\n \"supportedOperations\": []\r\n }\r\n ],\r\n \"scope\": {\r\n \"name\": \"Get_Scopes\",\r\n \"description\": \"Dummy description of the scope\",\r\n \"policies\": [\r\n \"db1a42f4-e038-4a1b-82f4-8fee6fbd5687\"\r\n ]\r\n }\r\n }\r\n ]\r\n}" + } + }, + "404" : { + "description" : "This status code indicates that the apiId specified is not found in the API Gateway" + }, + "401" : { + "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." + } + }, + "security" : [ { + "Basic" : [ ] + } ] + } + }, + "/apis/{apiId}/scopes/{scopeName}" : { + "get" : { + "description" : "Retrieve scopes of an API based on the scope name", + "operationId" : "getScopeByScopeName", + "produces" : [ "application/json" ], + "parameters" : [ { + "name" : "apiId", + "in" : "path", + "description" : "API Id for the API to retrieve the versions", + "required" : true, + "type" : "string", + "x-example" : "353bd366-47d4-4703-aecf-9cb40cdcc864" + }, { + "name" : "scopeName", + "in" : "path", + "description" : "Name of the scope", + "required" : true, + "type" : "string", + "x-example" : "getScope" + } ], + "responses" : { + "200" : { + "description" : "Returns API scopes", + "schema" : { + "type" : "array", + "items" : { + "$ref" : "#/definitions/ScopeResourceIndex" + } + }, + "examples" : { + "application/json" : "{\r\n \"scopeReferences\": [\r\n {\r\n \"references\": [\r\n {\r\n \"resourcePath\": \"/random\",\r\n \"supportedOperations\": []\r\n }\r\n ],\r\n \"scope\": {\r\n \"name\": \"Get_Scopes\",\r\n \"description\": \"Dummy description of the scope\",\r\n \"policies\": [\r\n \"db1a42f4-e038-4a1b-82f4-8fee6fbd5687\"\r\n ]\r\n }\r\n }\r\n ]\r\n}" + } + }, + "404" : { + "description" : "This status code indicates that the apiId specified is not found in the API Gateway or scopeName is not found in the list of scopes" + }, + "401" : { + "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." + } + }, + "security" : [ { + "Basic" : [ ] + } ] + } + }, + "/apis/{apiId}/activate" : { + "put" : { + "description" : "Activate an API so that API is exposed to consumers", + "operationId" : "activateAPI", + "produces" : [ "application/json" ], + "parameters" : [ { + "name" : "apiId", + "in" : "path", + "description" : "API Id for the API to be activated", + "required" : true, + "type" : "string", + "x-example" : "353bd366-47d4-4703-aecf-9cb40cdcc864" + } ], + "responses" : { + "200" : { + "description" : "Returns the API object after successful activation", + "schema" : { + "$ref" : "#/definitions/APIResponse" + }, + "examples" : { + "application/json" : "{\r\n \"apiResponse\": {\r\n \"api\": {\r\n \"apiDefinition\": {\r\n \"type\": \"rest\",\r\n \"info\": {\r\n \"description\": \"Chuck Norris facts are satirical factoids about martial artist and actor Chuck Norris that have become an Internet phenomenon and as a result have become widespread in popular culture. The 'facts' are normally absurd hyperbolic claims about Norris' toughness, attitude, virility, sophistication, and masculinity.\",\r\n \"version\": \"1.0\",\r\n \"title\": \"ChuckNorrisAPI\"\r\n },\r\n \"host\": \"api.chucknorris.io\",\r\n \"basePath\": \"/jokes\",\r\n \"schemes\": [\r\n \"https\"\r\n ],\r\n \"security\": [],\r\n \"paths\": {\r\n \"/random\": {\r\n \"get\": {\r\n \"summary\": \"GET\",\r\n \"description\": \"\",\r\n \"operationId\": \"GET\",\r\n \"produces\": [\r\n \"application/json\"\r\n ],\r\n \"responses\": {},\r\n \"enabled\": true\r\n },\r\n \"enabled\": true\r\n }\r\n },\r\n \"securityDefinitions\": {},\r\n \"definitions\": {},\r\n \"baseUriParameters\": [],\r\n \"externalDocs\": [],\r\n \"servers\": [\r\n {\r\n \"url\": \"https://api.chucknorris.io/jokes\"\r\n }\r\n ],\r\n \"components\": {\r\n \"schemas\": {}\r\n }\r\n },\r\n \"nativeEndpoint\": [\r\n {\r\n \"passSecurityHeaders\": true,\r\n \"uri\": \"https://api.chucknorris.io/jokes\",\r\n \"connectionTimeoutDuration\": 0,\r\n \"alias\": false\r\n }\r\n ],\r\n \"apiName\": \"ChuckNorris\",\r\n \"apiVersion\": \"1.0\",\r\n \"apiDescription\": \"Chuck Norris facts are satirical factoids about martial artist and actor Chuck Norris that have become an Internet phenomenon and as a result have become widespread in popular culture. The 'facts' are normally absurd hyperbolic claims about Norris' toughness, attitude, virility, sophistication, and masculinity.\",\r\n \"maturityState\": \"Beta\",\r\n \"isActive\": false,\r\n \"type\": \"REST\",\r\n \"owner\": \"Administrator\",\r\n \"policies\": [\r\n \"08afbfa9-78e1-4c23-bb19-c0012464047e\"\r\n ],\r\n \"scopes\": [],\r\n \"publishedPortals\": [],\r\n \"creationDate\": \"2018-09-03 11:56:21 GMT\",\r\n \"systemVersion\": 1,\r\n \"id\": \"badc18e6-446f-4aa3-96cd-33e46bd40fb5\"\r\n },\r\n \"responseStatus\": \"SUCCESS\",\r\n \"versions\": [\r\n {\r\n \"versionNumber\": \"1.0\",\r\n \"apiId\": \"badc18e6-446f-4aa3-96cd-33e46bd40fb5\"\r\n }\r\n ]\r\n }\r\n}" + } + }, + "400" : { + "description" : "This status code shows when the API is already in activated state or when no operations/resources are present or none are enabled" + }, + "404" : { + "description" : "This status code indicates that the apiId specified is not found in the API Gateway" + }, + "401" : { + "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." + } + }, + "security" : [ { + "Basic" : [ ] + } ] + } + }, + "/apis/{apiId}/deactivate" : { + "put" : { + "description" : "Deactivate an API so that API is not exposed to consumers", + "operationId" : "deactivateAPI", + "produces" : [ "application/json" ], + "parameters" : [ { + "name" : "apiId", + "in" : "path", + "description" : "API Id for the API to be deactivated", + "required" : true, + "type" : "string", + "x-example" : "353bd366-47d4-4703-aecf-9cb40cdcc864" + } ], + "responses" : { + "200" : { + "description" : "Returns the API object after successful deactivation", + "schema" : { + "$ref" : "#/definitions/APIResponse" + }, + "examples" : { + "application/json" : "{\r\n \"apiResponse\": {\r\n \"api\": {\r\n \"apiDefinition\": {\r\n \"type\": \"rest\",\r\n \"info\": {\r\n \"description\": \"Chuck Norris facts are satirical factoids about martial artist and actor Chuck Norris that have become an Internet phenomenon and as a result have become widespread in popular culture. The 'facts' are normally absurd hyperbolic claims about Norris' toughness, attitude, virility, sophistication, and masculinity.\",\r\n \"version\": \"1.0\",\r\n \"title\": \"ChuckNorrisAPI\"\r\n },\r\n \"host\": \"api.chucknorris.io\",\r\n \"basePath\": \"/jokes\",\r\n \"schemes\": [\r\n \"https\"\r\n ],\r\n \"security\": [],\r\n \"paths\": {\r\n \"/random\": {\r\n \"get\": {\r\n \"summary\": \"GET\",\r\n \"description\": \"\",\r\n \"operationId\": \"GET\",\r\n \"produces\": [\r\n \"application/json\"\r\n ],\r\n \"responses\": {},\r\n \"enabled\": true\r\n },\r\n \"enabled\": true\r\n }\r\n },\r\n \"securityDefinitions\": {},\r\n \"definitions\": {},\r\n \"baseUriParameters\": [],\r\n \"externalDocs\": [],\r\n \"servers\": [\r\n {\r\n \"url\": \"https://api.chucknorris.io/jokes\"\r\n }\r\n ],\r\n \"components\": {\r\n \"schemas\": {}\r\n }\r\n },\r\n \"nativeEndpoint\": [\r\n {\r\n \"passSecurityHeaders\": true,\r\n \"uri\": \"https://api.chucknorris.io/jokes\",\r\n \"connectionTimeoutDuration\": 0,\r\n \"alias\": false\r\n }\r\n ],\r\n \"apiName\": \"ChuckNorris\",\r\n \"apiVersion\": \"1.0\",\r\n \"apiDescription\": \"Chuck Norris facts are satirical factoids about martial artist and actor Chuck Norris that have become an Internet phenomenon and as a result have become widespread in popular culture. The 'facts' are normally absurd hyperbolic claims about Norris' toughness, attitude, virility, sophistication, and masculinity.\",\r\n \"maturityState\": \"Beta\",\r\n \"isActive\": false,\r\n \"type\": \"REST\",\r\n \"owner\": \"Administrator\",\r\n \"policies\": [\r\n \"08afbfa9-78e1-4c23-bb19-c0012464047e\"\r\n ],\r\n \"scopes\": [],\r\n \"publishedPortals\": [],\r\n \"creationDate\": \"2018-09-03 11:56:21 GMT\",\r\n \"systemVersion\": 1,\r\n \"id\": \"badc18e6-446f-4aa3-96cd-33e46bd40fb5\"\r\n },\r\n \"responseStatus\": \"SUCCESS\",\r\n \"versions\": [\r\n {\r\n \"versionNumber\": \"1.0\",\r\n \"apiId\": \"badc18e6-446f-4aa3-96cd-33e46bd40fb5\"\r\n }\r\n ]\r\n }\r\n}" + } + }, + "400" : { + "description" : "This status code shows when the API is already in de-activated state" + }, + "404" : { + "description" : "This status code indicates that the apiId specified is not found in the API Gateway" + }, + "401" : { + "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." + } + }, + "security" : [ { + "Basic" : [ ] + } ] + } + }, + "/apis/{apiId}/publish" : { + "put" : { + "description" : "This REST operation is used to publish API to the registered API Portal", + "operationId" : "publishAPI", + "consumes" : [ "application/json" ], + "produces" : [ "application/json" ], + "parameters" : [ { + "name" : "apiId", + "in" : "path", + "description" : "API Id for the API to be published", + "required" : true, + "type" : "string", + "x-example" : "353bd366-47d4-4703-aecf-9cb40cdcc864" + }, { + "in" : "body", + "name" : "body", + "description" : "API publish request payload", + "required" : true, + "schema" : { + "$ref" : "#/definitions/InputPublish" + }, + "x-examples" : { + "application/json" : "{\r\n\t\"portalGatewayId\" : \"69bac781-6c60-4db3-86f7-50af3ec4963a\",\r\n\t\"communities\" : [\"3bdf8005-5685-3ef5-b132-de4681963fb6\"],\r\n\t\"endpoints\" : [\"https://api.chucknorris.io/jokes\"]\r\n}" + } + } ], + "responses" : { + "200" : { + "description" : "Returns the API object after successful publish", + "schema" : { + "$ref" : "#/definitions/APIResponseCreate" + }, + "examples" : { + "application/json" : "{\r\n \"apiResponse\": {\r\n \"api\": {\r\n \"apiDefinition\": {\r\n \"type\": \"rest\",\r\n \"info\": {\r\n \"vendorExtensions\": {},\r\n \"description\": \"Chuck Norris facts are satirical factoids about martial artist and actor Chuck Norris that have become an Internet phenomenon and as a result have become widespread in popular culture. The 'facts' are normally absurd hyperbolic claims about Norris' toughness, attitude, virility, sophistication, and masculinity.\",\r\n \"version\": \"1.0\",\r\n \"title\": \"ChuckNorrisAPI\"\r\n },\r\n \"host\": \"api.chucknorris.io\",\r\n \"basePath\": \"/jokes\",\r\n \"schemes\": [\r\n \"https\"\r\n ],\r\n \"paths\": {\r\n \"/random\": {\r\n \"get\": {\r\n \"summary\": \"GET\",\r\n \"description\": \"\",\r\n \"operationId\": \"GET\",\r\n \"produces\": [\r\n \"application/json\"\r\n ],\r\n \"parameters\": [],\r\n \"responses\": {},\r\n \"enabled\": true\r\n },\r\n \"enabled\": true\r\n }\r\n },\r\n \"definitions\": {}\r\n },\r\n \"nativeEndpoint\": [\r\n {\r\n \"passSecurityHeaders\": true,\r\n \"uri\": \"https://api.chucknorris.io/jokes\",\r\n \"connectionTimeoutDuration\": 0,\r\n \"alias\": false\r\n }\r\n ],\r\n \"apiName\": \"ChuckNorrisAPI\",\r\n \"apiVersion\": \"1.0\",\r\n \"apiDescription\": \"Chuck Norris facts are satirical factoids about martial artist and actor Chuck Norris that have become an Internet phenomenon and as a result have become widespread in popular culture. The 'facts' are normally absurd hyperbolic claims about Norris' toughness, attitude, virility, sophistication, and masculinity.\",\r\n \"maturityState\": \"Beta\",\r\n \"isActive\": false,\r\n \"type\": \"REST\",\r\n \"owner\": \"Administrator\",\r\n \"policies\": [\r\n \"879068cd-8628-4f2a-b903-4e6613ca12ba\"\r\n ],\r\n \"referencedFiles\": {\r\n \"ChuckNorrisAPI.json\": \"{\\r\\n \\\"swagger\\\": \\\"2.0\\\",\\r\\n \\\"info\\\": {\\r\\n \\\"description\\\": \\\"Chuck Norris facts are satirical factoids about martial artist and actor Chuck Norris that have become an Internet phenomenon and as a result have become widespread in popular culture. The 'facts' are normally absurd hyperbolic claims about Norris' toughness, attitude, virility, sophistication, and masculinity.\\\",\\r\\n \\\"title\\\": \\\"ChuckNorrisAPI\\\",\\r\\n \\\"version\\\": \\\"1.0\\\"\\r\\n },\\r\\n \\\"host\\\": \\\"api.chucknorris.io\\\",\\r\\n \\\"basePath\\\": \\\"/jokes\\\",\\r\\n \\\"schemes\\\": [\\r\\n \\\"https\\\"\\r\\n ],\\r\\n \\\"paths\\\": {\\r\\n \\\"/random\\\": {\\r\\n \\\"get\\\": {\\r\\n \\\"summary\\\": \\\"GET\\\",\\r\\n \\\"deprecated\\\": false,\\r\\n \\\"produces\\\": [\\r\\n \\\"application/json\\\"\\r\\n ],\\r\\n \\\"description\\\": \\\"\\\",\\r\\n \\\"operationId\\\": \\\"GET\\\"\\r\\n }\\r\\n }\\r\\n }\\r\\n}\\r\\n\"\r\n },\r\n \"scopes\": [],\r\n \"publishedPortals\": [],\r\n \"creationDate\": \"2017-03-13 09:38:30 GMT\",\r\n \"systemVersion\": 1,\r\n \"id\": \"25fb937a-8360-41ab-8be5-987b14fe631d\",\r\n \"oauth2ScopeName\": \"25fb937a-8360-41ab-8be5-987b14fe631d\"\r\n },\r\n \"responseStatus\": \"SUCCESS\"\r\n }\r\n}" + } + }, + "400" : { + "description" : "This status code shows when the user missed the mandatory portalGatewayId or invalid portalGatewayId in the request body" + }, + "404" : { + "description" : "This status code indicates that the apiId specified is not found in the API Gateway" + }, + "401" : { + "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." + } + }, + "security" : [ { + "Basic" : [ ] + } ] + } + }, + "/apis/{apiId}/unpublish" : { + "put" : { + "description" : "Unpublish API from the registered API Portal", + "operationId" : "unpublishAPI", + "produces" : [ "application/json" ], + "parameters" : [ { + "name" : "apiId", + "in" : "path", + "description" : "API Id for the API to be unpublished", + "required" : true, + "type" : "string", + "x-example" : "353bd366-47d4-4703-aecf-9cb40cdcc864" + } ], + "responses" : { + "200" : { + "description" : "Returns the API object after successful unpublish", + "schema" : { + "$ref" : "#/definitions/APIResponseCreate" + }, + "examples" : { + "application/json" : "{\r\n \"apiResponse\": {\r\n \"api\": {\r\n \"apiDefinition\": {\r\n \"type\": \"rest\",\r\n \"info\": {\r\n \"vendorExtensions\": {},\r\n \"description\": \"Chuck Norris facts are satirical factoids about martial artist and actor Chuck Norris that have become an Internet phenomenon and as a result have become widespread in popular culture. The 'facts' are normally absurd hyperbolic claims about Norris' toughness, attitude, virility, sophistication, and masculinity.\",\r\n \"version\": \"1.0\",\r\n \"title\": \"ChuckNorrisAPI\"\r\n },\r\n \"host\": \"api.chucknorris.io\",\r\n \"basePath\": \"/jokes\",\r\n \"schemes\": [\r\n \"https\"\r\n ],\r\n \"paths\": {\r\n \"/random\": {\r\n \"get\": {\r\n \"summary\": \"GET\",\r\n \"description\": \"\",\r\n \"operationId\": \"GET\",\r\n \"produces\": [\r\n \"application/json\"\r\n ],\r\n \"parameters\": [],\r\n \"responses\": {},\r\n \"enabled\": true\r\n },\r\n \"enabled\": true\r\n }\r\n },\r\n \"definitions\": {}\r\n },\r\n \"nativeEndpoint\": [\r\n {\r\n \"passSecurityHeaders\": true,\r\n \"uri\": \"https://api.chucknorris.io/jokes\",\r\n \"connectionTimeoutDuration\": 0,\r\n \"alias\": false\r\n }\r\n ],\r\n \"apiName\": \"ChuckNorrisAPI\",\r\n \"apiVersion\": \"1.0\",\r\n \"apiDescription\": \"Chuck Norris facts are satirical factoids about martial artist and actor Chuck Norris that have become an Internet phenomenon and as a result have become widespread in popular culture. The 'facts' are normally absurd hyperbolic claims about Norris' toughness, attitude, virility, sophistication, and masculinity.\",\r\n \"maturityState\": \"Beta\",\r\n \"isActive\": false,\r\n \"type\": \"REST\",\r\n \"owner\": \"Administrator\",\r\n \"policies\": [\r\n \"879068cd-8628-4f2a-b903-4e6613ca12ba\"\r\n ],\r\n \"referencedFiles\": {\r\n \"ChuckNorrisAPI.json\": \"{\\r\\n \\\"swagger\\\": \\\"2.0\\\",\\r\\n \\\"info\\\": {\\r\\n \\\"description\\\": \\\"Chuck Norris facts are satirical factoids about martial artist and actor Chuck Norris that have become an Internet phenomenon and as a result have become widespread in popular culture. The 'facts' are normally absurd hyperbolic claims about Norris' toughness, attitude, virility, sophistication, and masculinity.\\\",\\r\\n \\\"title\\\": \\\"ChuckNorrisAPI\\\",\\r\\n \\\"version\\\": \\\"1.0\\\"\\r\\n },\\r\\n \\\"host\\\": \\\"api.chucknorris.io\\\",\\r\\n \\\"basePath\\\": \\\"/jokes\\\",\\r\\n \\\"schemes\\\": [\\r\\n \\\"https\\\"\\r\\n ],\\r\\n \\\"paths\\\": {\\r\\n \\\"/random\\\": {\\r\\n \\\"get\\\": {\\r\\n \\\"summary\\\": \\\"GET\\\",\\r\\n \\\"deprecated\\\": false,\\r\\n \\\"produces\\\": [\\r\\n \\\"application/json\\\"\\r\\n ],\\r\\n \\\"description\\\": \\\"\\\",\\r\\n \\\"operationId\\\": \\\"GET\\\"\\r\\n }\\r\\n }\\r\\n }\\r\\n}\\r\\n\"\r\n },\r\n \"scopes\": [],\r\n \"publishedPortals\": [],\r\n \"creationDate\": \"2017-03-13 09:38:30 GMT\",\r\n \"systemVersion\": 1,\r\n \"id\": \"25fb937a-8360-41ab-8be5-987b14fe631d\",\r\n \"oauth2ScopeName\": \"25fb937a-8360-41ab-8be5-987b14fe631d\"\r\n },\r\n \"responseStatus\": \"SUCCESS\"\r\n }\r\n}" + } + }, + "400" : { + "description" : "This status code shows when the user missed the mandatory portalGatewayId or invalid portalGatewayId in the request body" + }, + "404" : { + "description" : "This status code indicates that the apiId specified is not found in the API Gateway" + }, + "401" : { + "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." + } + }, + "security" : [ { + "Basic" : [ ] + } ] + } + }, + "/apis/{apiId}/mock/enable" : { + "put" : { + "description" : "In API Gateway, you can mock an API implementation. API Gateway lets you mock an API by simulating the native service. API Mocking is useful feature in API first approach, where in the provider may choose to expose the mocked API to the consumers when the actual API doesn't exist or isn't complete. \n In API Gateway, when you enable mocking for an API, a default mock response is created for each combination of resource, operation, status code and content-type based on the example and schema set in the API definition. As an API Provider, you can add or modify the default mock responses.\n\nYou can specify conditions at the operation level and configure IS services at the API level for a mocked API in the update API operation. At runtime, when the mocked API is invoked instead of calling the native service, API Gateway returns the mocked response to the consumer based on the below priorities:\n1. If any of the conditions for the invoked operation satisfies, API Gateway returns the associated mocked response.\n2. If no condition is specified or none of the condition for the invoked operation is satisfied, then API Gateway will return \na. the response from an IS service, if an IS service is configured b. default mocked response, if no IS services are configured", + "operationId" : "enableMockAPI", + "produces" : [ "application/json" ], + "parameters" : [ { + "name" : "apiId", + "in" : "path", + "description" : "API Id for the API to be activated", + "required" : true, + "type" : "string", + "x-example" : "353bd366-47d4-4703-aecf-9cb40cdcc864" + }, { + "name" : "retainDefaultMockResponses", + "in" : "query", + "description" : "Flag to retain generated mocked responses. When this is set to true, default mocked responses will be retained. If it's set to false, new default mocked responses will be generated using the examples, schema in the API", + "required" : false, + "type" : "boolean", + "default" : false, + "x-example" : true + } ], + "responses" : { + "200" : { + "description" : "Returns the API object after successfully enabling mocking of an API", + "schema" : { + "$ref" : "#/definitions/APIResponse" + }, + "examples" : { + "application/json" : "{\r\n \"apiResponse\": {\r\n \"api\": {\r\n \"apiDefinition\": {\r\n \"type\": \"rest\",\r\n \"info\": {\r\n \"description\": \"API to demonstrate mocking functionality in international developers day\",\r\n \"version\": \"v1\",\r\n \"title\": \"API_MOCKING\"\r\n },\r\n \"host\": \"localhost\",\r\n \"schemes\": [\r\n \"http\"\r\n ],\r\n \"consumes\": [\r\n \"application/json\"\r\n ],\r\n \"security\": [],\r\n \"paths\": {\r\n \"/conditionBasedMockedResponse\": {\r\n \"post\": {\r\n \"summary\": \"Configure condition and mocked response\",\r\n \"operationId\": \"conditionBasedMockedResponse\",\r\n \"produces\": [\r\n \"text/plain\"\r\n ],\r\n \"responses\": {\r\n \"200\": {\r\n \"description\": \"200 response\",\r\n \"content\": {\r\n \"text/plain\": {\r\n \"example\": \"No condition evaluates to true. \\nSo API-Gateway sent this default response.\"\r\n }\r\n }\r\n }\r\n },\r\n \"mockedResponses\": {\r\n \"200\": {\r\n \"responseBody\": {\r\n \"text/plain\": \"No condition evaluates to true. \\nSo API-Gateway sent this default response.\"\r\n }\r\n }\r\n },\r\n \"enabled\": true\r\n },\r\n \"parameters\": [],\r\n \"displayName\": \"/conditionBasedMockedResponse\",\r\n \"enabled\": true\r\n },\r\n \"/customESBMockedResponse\": {\r\n \"post\": {\r\n \"summary\": \"Configure custom ESB mocked response\",\r\n \"operationId\": \"customESBMockedResponse\",\r\n \"produces\": [\r\n \"application/json\"\r\n ],\r\n \"responses\": {\r\n \"200\": {\r\n \"description\": \"200 response\"\r\n }\r\n },\r\n \"mockedResponses\": {\r\n \"200\": {\r\n \"responseBody\": {\r\n \"application/json\": \"\"\r\n }\r\n }\r\n },\r\n \"enabled\": true\r\n },\r\n \"parameters\": [],\r\n \"displayName\": \"/customESBMockedResponse\",\r\n \"enabled\": true\r\n },\r\n \"/dynamicMockedResponse\": {\r\n \"post\": {\r\n \"summary\": \"Dynamic mocked response set\",\r\n \"operationId\": \"dynamicMockedResponse\",\r\n \"produces\": [\r\n \"application/json\"\r\n ],\r\n \"responses\": {\r\n \"200\": {\r\n \"description\": \"200 response\"\r\n }\r\n },\r\n \"mockedResponses\": {\r\n \"200\": {\r\n \"responseBody\": {\r\n \"application/json\": \"\"\r\n }\r\n }\r\n },\r\n \"enabled\": true\r\n },\r\n \"parameters\": [],\r\n \"displayName\": \"/dynamicMockedResponse\",\r\n \"enabled\": true\r\n },\r\n \"/staticMockedResponse\": {\r\n \"post\": {\r\n \"summary\": \"Default mocked response from example\",\r\n \"operationId\": \"generateFromExample\",\r\n \"produces\": [\r\n \"application/json\",\r\n \"application/xml\"\r\n ],\r\n \"responses\": {\r\n \"200\": {\r\n \"description\": \"200 response generated from example\",\r\n \"content\": {\r\n \"application/json\": {\r\n \"example\": \"{\\\"resource\\\" : \\\"/generateFromExample\\\",\\\"description\\\" : \\\"Default mocked response from example for status code 200\\\"}\"\r\n },\r\n \"application/xml\": {\r\n \"example\": \"/generateFromExampleDefault mocked response from example for status code 200\"\r\n }\r\n }\r\n },\r\n \"201\": {\r\n \"description\": \"201 response generated from schema\",\r\n \"content\": {\r\n \"application/json\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/Pet\"\r\n }\r\n },\r\n \"application/xml\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/Pet\"\r\n }\r\n }\r\n }\r\n }\r\n },\r\n \"mockedResponses\": {\r\n \"200\": {\r\n \"responseBody\": {\r\n \"application/json\": \"{\\\"resource\\\" : \\\"/generateFromExample\\\",\\\"description\\\" : \\\"Default mocked response from example for status code 200\\\"}\",\r\n \"application/xml\": \"/generateFromExampleDefault mocked response from example for status code 200\"\r\n }\r\n },\r\n \"201\": {\r\n \"responseBody\": {\r\n \"application/json\": \"{\\\"birthday\\\":2059397944,\\\"name\\\":\\\"\\\"}\",\r\n \"application/xml\": \"921604684\"\r\n }\r\n }\r\n },\r\n \"enabled\": true\r\n },\r\n \"parameters\": [],\r\n \"displayName\": \"/staticMockedResponse\",\r\n \"enabled\": true\r\n }\r\n },\r\n \"securityDefinitions\": {},\r\n \"definitions\": {},\r\n \"baseUriParameters\": [],\r\n \"externalDocs\": [],\r\n \"servers\": [\r\n {\r\n \"url\": \"http://localhost\"\r\n }\r\n ],\r\n \"components\": {\r\n \"schemas\": {\r\n \"Pet\": {\r\n \"required\": [\r\n \"name\"\r\n ],\r\n \"type\": \"object\",\r\n \"properties\": {\r\n \"birthday\": {\r\n \"type\": \"integer\",\r\n \"format\": \"int32\"\r\n },\r\n \"name\": {\r\n \"type\": \"string\"\r\n }\r\n }\r\n }\r\n }\r\n }\r\n },\r\n \"nativeEndpoint\": [\r\n {\r\n \"passSecurityHeaders\": true,\r\n \"uri\": \"http://localhost\",\r\n \"connectionTimeoutDuration\": 0,\r\n \"alias\": false\r\n }\r\n ],\r\n \"apiName\": \"APIMocking\",\r\n \"apiVersion\": \"v1\",\r\n \"apiDescription\": \"API to demonstrate mocking functionality in international developers day\",\r\n \"maturityState\": \"Beta\",\r\n \"isActive\": false,\r\n \"type\": \"REST\",\r\n \"owner\": \"Administrator\",\r\n \"policies\": [\r\n \"19773e29-2838-4efc-aa04-793b48f4d22b\"\r\n ],\r\n \"scopes\": [],\r\n \"publishedPortals\": [],\r\n \"creationDate\": \"2018-11-01 13:44:58 GMT\",\r\n \"systemVersion\": 1,\r\n \"mockService\": {\r\n \"enableMock\": true\r\n },\r\n \"id\": \"afd8eb5e-bba8-447b-8e28-76aac23ba074\"\r\n },\r\n \"responseStatus\": \"SUCCESS\",\r\n \"versions\": [\r\n {\r\n \"versionNumber\": \"v1\",\r\n \"apiId\": \"afd8eb5e-bba8-447b-8e28-76aac23ba074\"\r\n }\r\n ]\r\n }\r\n}" + } + }, + "400" : { + "description" : "This status code shows when the API is already in activated state or when invalid json or xml is provided in the example part of the operation" + }, + "404" : { + "description" : "This status code indicates that the apiId specified is not found in the API Gateway" + }, + "401" : { + "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." + } + }, + "security" : [ { + "Basic" : [ ] + } ] + } + }, + "/apis/{apiId}/mock/disable" : { + "put" : { + "description" : "Once API is disabled from mocking capability, at runtime all the API invocations are redirected to the native service instead of sending the mocked response", + "operationId" : "disableMockAPI", + "produces" : [ "application/json" ], + "parameters" : [ { + "name" : "apiId", + "in" : "path", + "description" : "API Id for the API to be deactivated", + "required" : true, + "type" : "string", + "x-example" : "353bd366-47d4-4703-aecf-9cb40cdcc864" + } ], + "responses" : { + "200" : { + "description" : "Returns the API object after successful disabling mocking of an API", + "schema" : { + "$ref" : "#/definitions/APIResponse" + }, + "examples" : { + "application/json" : "{\r\n \"apiResponse\": {\r\n \"api\": {\r\n \"apiDefinition\": {\r\n \"type\": \"rest\",\r\n \"info\": {\r\n \"description\": \"API to demonstrate mocking functionality in international developers day\",\r\n \"version\": \"v1\",\r\n \"title\": \"API_MOCKING\"\r\n },\r\n \"host\": \"localhost\",\r\n \"schemes\": [\r\n \"http\"\r\n ],\r\n \"consumes\": [\r\n \"application/json\"\r\n ],\r\n \"security\": [],\r\n \"paths\": {\r\n \"/conditionBasedMockedResponse\": {\r\n \"post\": {\r\n \"summary\": \"Configure condition and mocked response\",\r\n \"operationId\": \"conditionBasedMockedResponse\",\r\n \"produces\": [\r\n \"text/plain\"\r\n ],\r\n \"responses\": {\r\n \"200\": {\r\n \"description\": \"200 response\",\r\n \"content\": {\r\n \"text/plain\": {\r\n \"example\": \"No condition evaluates to true. \\nSo API-Gateway sent this default response.\"\r\n }\r\n }\r\n }\r\n },\r\n \"mockedResponses\": {\r\n \"200\": {\r\n \"responseBody\": {\r\n \"text/plain\": \"No condition evaluates to true. \\nSo API-Gateway sent this default response.\"\r\n }\r\n }\r\n },\r\n \"enabled\": true\r\n },\r\n \"parameters\": [],\r\n \"displayName\": \"/conditionBasedMockedResponse\",\r\n \"enabled\": true\r\n },\r\n \"/customESBMockedResponse\": {\r\n \"post\": {\r\n \"summary\": \"Configure custom ESB mocked response\",\r\n \"operationId\": \"customESBMockedResponse\",\r\n \"produces\": [\r\n \"application/json\"\r\n ],\r\n \"responses\": {\r\n \"200\": {\r\n \"description\": \"200 response\"\r\n }\r\n },\r\n \"mockedResponses\": {\r\n \"200\": {\r\n \"responseBody\": {\r\n \"application/json\": \"\"\r\n }\r\n }\r\n },\r\n \"enabled\": true\r\n },\r\n \"parameters\": [],\r\n \"displayName\": \"/customESBMockedResponse\",\r\n \"enabled\": true\r\n },\r\n \"/dynamicMockedResponse\": {\r\n \"post\": {\r\n \"summary\": \"Dynamic mocked response set\",\r\n \"operationId\": \"dynamicMockedResponse\",\r\n \"produces\": [\r\n \"application/json\"\r\n ],\r\n \"responses\": {\r\n \"200\": {\r\n \"description\": \"200 response\"\r\n }\r\n },\r\n \"mockedResponses\": {\r\n \"200\": {\r\n \"responseBody\": {\r\n \"application/json\": \"\"\r\n }\r\n }\r\n },\r\n \"enabled\": true\r\n },\r\n \"parameters\": [],\r\n \"displayName\": \"/dynamicMockedResponse\",\r\n \"enabled\": true\r\n },\r\n \"/staticMockedResponse\": {\r\n \"post\": {\r\n \"summary\": \"Default mocked response from example\",\r\n \"operationId\": \"generateFromExample\",\r\n \"produces\": [\r\n \"application/json\",\r\n \"application/xml\"\r\n ],\r\n \"responses\": {\r\n \"200\": {\r\n \"description\": \"200 response generated from example\",\r\n \"content\": {\r\n \"application/json\": {\r\n \"example\": \"{\\\"resource\\\" : \\\"/generateFromExample\\\",\\\"description\\\" : \\\"Default mocked response from example for status code 200\\\"}\"\r\n },\r\n \"application/xml\": {\r\n \"example\": \"/generateFromExampleDefault mocked response from example for status code 200\"\r\n }\r\n }\r\n },\r\n \"201\": {\r\n \"description\": \"201 response generated from schema\",\r\n \"content\": {\r\n \"application/json\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/Pet\"\r\n }\r\n },\r\n \"application/xml\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/Pet\"\r\n }\r\n }\r\n }\r\n }\r\n },\r\n \"mockedResponses\": {\r\n \"200\": {\r\n \"responseBody\": {\r\n \"application/json\": \"{\\\"resource\\\" : \\\"/generateFromExample\\\",\\\"description\\\" : \\\"Default mocked response from example for status code 200\\\"}\",\r\n \"application/xml\": \"/generateFromExampleDefault mocked response from example for status code 200\"\r\n }\r\n },\r\n \"201\": {\r\n \"responseBody\": {\r\n \"application/json\": \"{\\\"birthday\\\":2059397944,\\\"name\\\":\\\"\\\"}\",\r\n \"application/xml\": \"921604684\"\r\n }\r\n }\r\n },\r\n \"enabled\": true\r\n },\r\n \"parameters\": [],\r\n \"displayName\": \"/staticMockedResponse\",\r\n \"enabled\": true\r\n }\r\n },\r\n \"securityDefinitions\": {},\r\n \"definitions\": {},\r\n \"baseUriParameters\": [],\r\n \"externalDocs\": [],\r\n \"servers\": [\r\n {\r\n \"url\": \"http://localhost\"\r\n }\r\n ],\r\n \"components\": {\r\n \"schemas\": {\r\n \"Pet\": {\r\n \"required\": [\r\n \"name\"\r\n ],\r\n \"type\": \"object\",\r\n \"properties\": {\r\n \"birthday\": {\r\n \"type\": \"integer\",\r\n \"format\": \"int32\"\r\n },\r\n \"name\": {\r\n \"type\": \"string\"\r\n }\r\n }\r\n }\r\n }\r\n }\r\n },\r\n \"nativeEndpoint\": [\r\n {\r\n \"passSecurityHeaders\": true,\r\n \"uri\": \"http://localhost\",\r\n \"connectionTimeoutDuration\": 0,\r\n \"alias\": false\r\n }\r\n ],\r\n \"apiName\": \"APIMocking\",\r\n \"apiVersion\": \"v1\",\r\n \"apiDescription\": \"API to demonstrate mocking functionality in international developers day\",\r\n \"maturityState\": \"Beta\",\r\n \"isActive\": false,\r\n \"type\": \"REST\",\r\n \"owner\": \"Administrator\",\r\n \"policies\": [\r\n \"19773e29-2838-4efc-aa04-793b48f4d22b\"\r\n ],\r\n \"scopes\": [],\r\n \"publishedPortals\": [],\r\n \"creationDate\": \"2018-11-01 13:44:58 GMT\",\r\n \"systemVersion\": 1,\r\n \"mockService\": {\r\n \"enableMock\": false\r\n },\r\n \"id\": \"afd8eb5e-bba8-447b-8e28-76aac23ba074\"\r\n },\r\n \"responseStatus\": \"SUCCESS\",\r\n \"versions\": [\r\n {\r\n \"versionNumber\": \"v1\",\r\n \"apiId\": \"afd8eb5e-bba8-447b-8e28-76aac23ba074\"\r\n }\r\n ]\r\n }\r\n}" + } + }, + "400" : { + "description" : "This status code shows when the API is already in activated state or in mocked state" + }, + "404" : { + "description" : "This status code indicates that the apiId specified is not found in the API Gateway" + }, + "401" : { + "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." + } + }, + "security" : [ { + "Basic" : [ ] + } ] + } + }, + "/serviceRegistry/publish" : { + "get" : { + "description" : "Retrieve the service registry publish information for the API", + "operationId" : "getServiceRegistryPublishInfo", + "produces" : [ "application/json" ], + "parameters" : [ { + "name" : "apiId", + "in" : "query", + "description" : "API Id of the API for which ServiceRegistryPublishInfo is to be fetched", + "required" : true, + "type" : "string", + "x-example" : "353bd366-47d4-4703-aecf-9cb40cdcc864" + } ], + "responses" : { + "200" : { + "description" : "Returns the service registry publish info for the API", + "schema" : { + "$ref" : "#/definitions/ServiceRegistryPublishGetResponse" + }, + "examples" : { + "application/json" : "{\r\n \"publishInfo\": {\r\n \"apiId\": \"afe8b72e-e1a5-47c6-9b43-e7f12858c091\",\r\n \"serviceRegistryPublishInfo\": [\r\n {\r\n \"serviceRegistryId\": \"aec973cd-1e4c-4a93-93a4-950e32d39156\",\r\n \"status\": \"PUBLISHED\",\r\n \"name\": \"MyServiceConsul\",\r\n \"gatewayEndpoints\": [\r\n {\r\n \"gatewayEndpoint\": \"http://localhost:5555/ws/calc/1\",\r\n \"status\": \"PUBLISHED\"\r\n },\r\n {\r\n \"gatewayEndpoint\": \"http://localhost:1111/ws/calc/1\",\r\n \"status\": \"NEW\"\r\n }\r\n ]\r\n }\r\n ]\r\n }\r\n}" + } + }, + "404" : { + "description" : "This status code indicates that Publish Info for the apiId specified is not found in API Gateway" + }, + "401" : { + "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." + } + }, + "security" : [ { + "Basic" : [ ] + } ] + }, + "put" : { + "description" : "Publish one or more APIs to one or more service registries", + "operationId" : "publishToServiceRegistry", + "produces" : [ "application/json" ], + "parameters" : [ { + "in" : "body", + "name" : "body", + "description" : "Service registry publish payload", + "required" : true, + "schema" : { + "$ref" : "#/definitions/InputServiceRegistryPublish" + }, + "x-examples" : { + "application/json" : "{\r\n \"publishInfo\": {\r\n \"serviceRegistryPublishInfo\": [\r\n {\r\n \"gatewayEndpoints\": [\r\n {\r\n \"gatewayEndpoint\": \"http://localhost:5555/ws/calc/1\"\r\n }\r\n ],\r\n \"serviceRegistryId\": \"aec973cd-1e4c-4a93-93a4-950e32d39156\"\r\n }\r\n ],\r\n \"apiId\": \"afe8b72e-e1a5-47c6-9b43-e7f12858c091\"\r\n }\r\n}" + } + } ], + "responses" : { + "200" : { + "description" : "Returns the status of the publish operations given in the request.", + "schema" : { + "$ref" : "#/definitions/ServiceRegistryPublishPutResponse" + }, + "examples" : { + "application/json" : "{\r\n \"publishResponse\": {\r\n \"apiId\": \"afe8b72e-e1a5-47c6-9b43-e7f12858c091\",\r\n \"apiName\": \"CalcService\",\r\n \"apiVersion\": \"10.3\",\r\n \"serviceRegistryPublishResponses\": [\r\n {\r\n \"serviceRegistryId\": \"aec973cd-1e4c-4a93-93a4-950e32d39156\",\r\n \"serviceRegistryName\": \"MyServiceConsul\",\r\n \"status\": \"PUBLISHED\",\r\n \"gatewayEndpoints\": [\r\n {\r\n \"gatewayEndpoint\": \"http://localhost:5555/ws/calc/1\",\r\n \"status\": \"PUBLISHED\",\r\n }\r\n ],\r\n \"success\": true,\r\n \"description\": \"Publish successful\"\r\n }\r\n ]\r\n }\r\n}" + } + }, + "400" : { + "description" : "This status code indicates an invalid request body" + }, + "404" : { + "description" : "This status code indicates that API with given apiId is not found in API Gateway" + }, + "401" : { + "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." + } + }, + "security" : [ { + "Basic" : [ ] + } ] + } + }, + "/serviceRegistry/unpublish" : { + "put" : { + "description" : "Unpublish one or more APIs from one or more service registries", + "operationId" : "unpublishFromServiceRegistry", + "produces" : [ "application/json" ], + "parameters" : [ { + "in" : "body", + "name" : "body", + "description" : "Service registry unpublish payload", + "required" : true, + "schema" : { + "$ref" : "#/definitions/InputServiceRegistryUnpublish" + }, + "x-examples" : { + "application/json" : "{\r\n \"unpublishInfo\": {\r\n \"serviceRegistryIds\": [\r\n \"aec973cd-1e4c-4a93-93a4-950e32d39156\"\r\n ],\r\n \"apiId\": \"afe8b72e-e1a5-47c6-9b43-e7f12858c091\"\r\n },\r\n \"forceUnpublish\": false\r\n}ds" + } + } ], + "responses" : { + "200" : { + "description" : "Returns the service registry unpublish response", + "schema" : { + "$ref" : "#/definitions/ServiceRegistryUnpublishPutResponse" + }, + "examples" : { + "application/json" : "{\r\n \"unpublishResponse\": {\r\n \"apiId\": \"afe8b72e-e1a5-47c6-9b43-e7f12858c091\",\r\n \"apiName\": \"CalcService\",\r\n \"apiVersion\": \"10.3\",\r\n \"serviceRegistryUnpublishResponses\": [\r\n {\r\n \"serviceRegistryId\": \"aec973cd-1e4c-4a93-93a4-950e32d39156\",\r\n \"serviceRegistryName\": \"MyServiceConsul\",\r\n \"success\": true,\r\n \"description\": \" Unpublish successful\"\r\n }\r\n ]\r\n }\r\n}" + } + }, + "401" : { + "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." + } + }, + "security" : [ { + "Basic" : [ ] + } ] + } + } + }, + "securityDefinitions" : { + "Basic" : { + "description" : "API Gateway Administrator and API Gateway provider", + "type" : "basic" + } + }, + "definitions" : { + "APIResponseDelete" : { + "type" : "object", + "properties" : { + "apiId" : { + "type" : "string" + }, + "responseStatus" : { + "type" : "string", + "enum" : [ "SUCCESS", "ERROR", "NOT_FOUND", "BAD_REQUEST", "PARTIAL_SUCCESS" ] + }, + "errorReason" : { + "type" : "string" + } + } + }, + "API" : { + "type" : "object", + "discriminator" : "type", + "properties" : { + "title" : { + "type" : "string" + }, + "version" : { + "type" : "string" + }, + "description" : { + "type" : "string" + }, + "uri" : { + "type" : "array", + "uniqueItems" : true, + "items" : { + "type" : "string" + } + }, + "serviceRegistryDisplayName" : { + "type" : "string" + }, + "type" : { + "type" : "string" + } + } + }, + "APIResponseGetAPI" : { + "type" : "object", + "properties" : { + "versions" : { + "type" : "array", + "items" : { + "$ref" : "#/definitions/Version" + } + }, + "gatewayEndPoints" : { + "type" : "array", + "items" : { + "type" : "string" + } + }, + "api" : { + "$ref" : "#/definitions/GatewayAPI" + }, + "apiId" : { + "type" : "string" + }, + "responseStatus" : { + "type" : "string", + "enum" : [ "SUCCESS", "ERROR", "NOT_FOUND", "BAD_REQUEST", "PARTIAL_SUCCESS" ] + }, + "errorReason" : { + "type" : "string" + } + } + }, + "AbstractParameter" : { + "type" : "object", + "properties" : { + "vendorExtensions" : { + "type" : "object", + "additionalProperties" : { + "type" : "object" + } + }, + "name" : { + "type" : "string", + "description" : "The name of the parameter. Parameter names are case sensitive" + }, + "in" : { + "type" : "string", + "description" : "The location of the parameter. Possible values are \"query\", \"header\", \"path\" or \"cookie\"" + }, + "description" : { + "type" : "string", + "description" : "A brief description of the parameter. This could contain examples of use" + }, + "required" : { + "type" : "boolean", + "description" : "Determines whether this parameter is mandatory. If the parameter location is \"path\", this property is REQUIRED and its value MUST be true. Otherwise, the property MAY be included and its default value is false" + }, + "get$ref" : { + "type" : "string", + "description" : "The available paths and operations for the API" + }, + "allowEmptyValue" : { + "type" : "boolean", + "description" : "Sets the ability to pass empty-valued parameters. This is valid only for query parameters and allows sending a parameter with an empty value" + } + } + }, + "ActionImport" : { + "type" : "object", + "properties" : { + "action" : { + "type" : "string" + }, + "enabled" : { + "type" : "boolean" + } + } + }, + "ArrayModel" : { + "allOf" : [ { + "$ref" : "#/definitions/Model" + }, { + "type" : "object", + "properties" : { + "items" : { + "$ref" : "#/definitions/Property" + }, + "minItems" : { + "type" : "integer", + "format" : "int32" + }, + "maxItems" : { + "type" : "integer", + "format" : "int32" + } + } + } ] + }, + "ArrayProperty" : { + "allOf" : [ { + "$ref" : "#/definitions/Property" + }, { + "type" : "object", + "properties" : { + "uniqueItems" : { + "type" : "boolean" + }, + "items" : { + "$ref" : "#/definitions/Property" + }, + "maxItems" : { + "type" : "integer", + "format" : "int32" + }, + "minItems" : { + "type" : "integer", + "format" : "int32" + } + } + } ] + }, + "ArraySchema" : { + "allOf" : [ { + "$ref" : "#/definitions/Schema" + }, { + "type" : "object", + "properties" : { + "type" : { + "type" : "string" + }, + "items" : { + "description" : "Value MUST be an object and not an array. Inline or referenced schema MUST be of a Schema Object and not a standard JSON Schema. items MUST be present if the type is array", + "$ref" : "#/definitions/Schema" + } + } + } ] + }, + "BaseIntegerProperty" : { + "allOf" : [ { + "$ref" : "#/definitions/Property" + }, { + "type" : "object", + "properties" : { + "minimum" : { + "type" : "number" + }, + "maximum" : { + "type" : "number" + }, + "multipleOf" : { + "type" : "number" + }, + "exclusiveMinimum" : { + "type" : "boolean" + }, + "exclusiveMaximum" : { + "type" : "boolean" + } + } + } ] + }, + "BodyParameter" : { + "allOf" : [ { + "$ref" : "#/definitions/Parameter" + }, { + "type" : "object", + "properties" : { + "name" : { + "type" : "string", + "description" : "The name of the parameter. Parameter names are case sensitive" + }, + "in" : { + "type" : "string", + "description" : "The location of the parameter. Possible values are \"query\", \"header\", \"path\" or \"cookie\"" + }, + "description" : { + "type" : "string", + "description" : "A brief description of the parameter. This could contain examples of use" + }, + "required" : { + "type" : "boolean", + "description" : "Determines whether this parameter is mandatory. If the parameter location is \"path\", this property is REQUIRED and its value MUST be true. Otherwise, the property MAY be included and its default value is false" + }, + "get$ref" : { + "type" : "string", + "description" : "The available paths and operations for the API" + }, + "allowEmptyValue" : { + "type" : "boolean", + "description" : "Sets the ability to pass empty-valued parameters. This is valid only for query parameters and allows sending a parameter with an empty value" + }, + "schema" : { + "type" : "object", + "additionalProperties" : { + "$ref" : "#/definitions/Model" + } + }, + "examples" : { + "type" : "object", + "additionalProperties" : { + "type" : "string" + } + } + } + } ] + }, + "BooleanProperty" : { + "allOf" : [ { + "$ref" : "#/definitions/Property" + }, { + "type" : "object", + "properties" : { + "enum" : { + "type" : "array", + "items" : { + "type" : "boolean" + } + } + } + } ] + }, + "BooleanSchema" : { + "allOf" : [ { + "$ref" : "#/definitions/Schema" + }, { + "type" : "object", + "properties" : { + "type" : { + "type" : "string" + } + } + } ] + }, + "Callback" : { + "type" : "object", + "properties" : { + "vendorExtensions" : { + "type" : "object", + "additionalProperties" : { + "type" : "object" + } + }, + "get$ref" : { + "type" : "string" + }, + "callbacksMap" : { + "type" : "object", + "description" : "A Path Item Object used to define a callback request and expected responses", + "additionalProperties" : { + "$ref" : "#/definitions/Path" + } + } + } + }, + "Components" : { + "type" : "object", + "properties" : { + "vendorExtensions" : { + "type" : "object", + "additionalProperties" : { + "type" : "object" + } + }, + "schemas" : { + "type" : "object", + "description" : "An object to hold reusable schema objects", + "additionalProperties" : { + "$ref" : "#/definitions/Schema" + } + }, + "responses" : { + "type" : "object", + "description" : "An object to hold reusable response objects", + "additionalProperties" : { + "$ref" : "#/definitions/Response" + } + }, + "parameters" : { + "type" : "object", + "description" : "An object to hold reusable parameter objects", + "additionalProperties" : { + "$ref" : "#/definitions/Parameter" + } + }, + "examples" : { + "type" : "object", + "description" : "An object to hold reusable example objects", + "additionalProperties" : { + "$ref" : "#/definitions/Example" + } + }, + "requestBodies" : { + "type" : "object", + "description" : "An object to hold reusable requestBody objects", + "additionalProperties" : { + "$ref" : "#/definitions/RequestBody" + } + }, + "headers" : { + "type" : "object", + "description" : "An object to hold reusable header objects", + "additionalProperties" : { + "$ref" : "#/definitions/Header" + } + }, + "securitySchemes" : { + "type" : "object", + "description" : "An object to hold reusable securityScheme objects", + "additionalProperties" : { + "$ref" : "#/definitions/SecurityScheme" + } + }, + "links" : { + "type" : "object", + "description" : "An object to hold reusable link objects", + "additionalProperties" : { + "$ref" : "#/definitions/Link" + } + }, + "callbacks" : { + "type" : "object", + "description" : "An object to hold reusable callback objects", + "additionalProperties" : { + "$ref" : "#/definitions/Callback" + } + } + } + }, + "ComposedModel" : { + "allOf" : [ { + "$ref" : "#/definitions/Model" + }, { + "type" : "object", + "properties" : { + "allOf" : { + "type" : "array", + "items" : { + "$ref" : "#/definitions/Model" + } + }, + "anyOf" : { + "type" : "array", + "items" : { + "$ref" : "#/definitions/Model" + } + }, + "oneOf" : { + "type" : "array", + "items" : { + "$ref" : "#/definitions/Model" + } + }, + "parent" : { + "$ref" : "#/definitions/Model" + }, + "child" : { + "$ref" : "#/definitions/Model" + }, + "interfaces" : { + "type" : "array", + "items" : { + "$ref" : "#/definitions/Model" + } + } + } + } ] + }, + "ComposedProperty" : { + "allOf" : [ { + "$ref" : "#/definitions/Property" + }, { + "type" : "object", + "properties" : { + "allOf" : { + "type" : "array", + "items" : { + "$ref" : "#/definitions/Property" + } + }, + "anyOf" : { + "type" : "array", + "items" : { + "$ref" : "#/definitions/Property" + } + }, + "oneOf" : { + "type" : "array", + "items" : { + "$ref" : "#/definitions/Property" + } + } + } + } ] + }, + "ComposedSchema" : { + "allOf" : [ { + "$ref" : "#/definitions/Schema" + }, { + "type" : "object", + "properties" : { + "allOf" : { + "type" : "array", + "description" : "Must be valid against all of the subschemas", + "items" : { + "$ref" : "#/definitions/Schema" + } + }, + "anyOf" : { + "type" : "array", + "description" : "Must be valid against any of the subschemas", + "items" : { + "$ref" : "#/definitions/Schema" + } + }, + "oneOf" : { + "type" : "array", + "description" : "Must be valid against exactly one of the subschemas", + "items" : { + "$ref" : "#/definitions/Schema" + } + } + } + } ] + }, + "Contact" : { + "type" : "object", + "properties" : { + "name" : { + "type" : "string", + "description" : "The identifying name of the contact person/organization" + }, + "url" : { + "type" : "string", + "description" : "The URL pointing to the contact information" + }, + "email" : { + "type" : "string", + "description" : "The email address of the contact person/organization" + } + } + }, + "CookieParameter" : { + "allOf" : [ { + "$ref" : "#/definitions/Parameter" + }, { + "type" : "object", + "properties" : { + "name" : { + "type" : "string", + "description" : "The name of the parameter. Parameter names are case sensitive" + }, + "in" : { + "type" : "string", + "description" : "The location of the parameter. Possible values are \"query\", \"header\", \"path\" or \"cookie\"" + }, + "description" : { + "type" : "string", + "description" : "A brief description of the parameter. This could contain examples of use" + }, + "required" : { + "type" : "boolean", + "description" : "Determines whether this parameter is mandatory. If the parameter location is \"path\", this property is REQUIRED and its value MUST be true. Otherwise, the property MAY be included and its default value is false" + }, + "get$ref" : { + "type" : "string", + "description" : "The available paths and operations for the API" + }, + "allowEmptyValue" : { + "type" : "boolean", + "description" : "Sets the ability to pass empty-valued parameters. This is valid only for query parameters and allows sending a parameter with an empty value" + }, + "deprecated" : { + "type" : "boolean", + "description" : "Determines whether this parameter is mandatory. If the parameter location is \"path\", this property is REQUIRED and its value MUST be true. Otherwise, the property MAY be included and its default value is false" + }, + "style" : { + "type" : "string", + "description" : "Describes how the parameter value will be serialized depending on the type of the parameter value. Default values (based on value of in): for query - form; for path - simple; for header - simple; for cookie - form", + "enum" : [ "MATRIX", "LABEL", "FORM", "SIMPLE", "SPACEDELIMITED", "PIPEDELIMITED", "DEEPOBJECT" ] + }, + "explode" : { + "type" : "boolean", + "description" : "When this is true, parameter values of type array or object generate separate parameters for each value of the array or key-value pair of the map. For other types of parameters this property has no effect. When style is form, the default value is true. For all other styles, the default value is false" + }, + "allowReserved" : { + "type" : "boolean", + "description" : "Determines whether the parameter value SHOULD allow reserved characters, as defined by RFC3986 :/?#[]@!$&'()*+,;= to be included without percent-encoding. This property only applies to parameters with an in value of query. The default value is false" + }, + "examples" : { + "type" : "object", + "description" : "Examples of the media type. Each example SHOULD contain a value in the correct format as specified in the parameter encoding. The examples field is mutually exclusive of the example field. Furthermore, if referencing a schema which contains an example, the examples value SHALL override the example provided by the schema", + "additionalProperties" : { + "$ref" : "#/definitions/Example" + } + }, + "extendedExample" : { + "type" : "object", + "description" : "Example of the media type. The example SHOULD match the specified schema and encoding properties if present. The example field is mutually exclusive of the examples field. Furthermore, if referencing a schema which contains an example, the example value SHALL override the example provided by the schema. To represent examples of media types that cannot naturally be represented in JSON or YAML, a string value can contain the example with escaping where necessary" + }, + "content" : { + "type" : "object", + "description" : "A map containing the representations for the parameter. The key is the media type and the value describes it. The map MUST only contain one entry", + "additionalProperties" : { + "$ref" : "#/definitions/MediaType" + } + }, + "xpath" : { + "$ref" : "#/definitions/Xpath" + }, + "default" : { + "type" : "string" + }, + "parameterSchema" : { + "$ref" : "#/definitions/Schema" + }, + "_enum" : { + "type" : "array", + "items" : { + "type" : "string" + } + } + } + } ] + }, + "DateTimeProperty" : { + "allOf" : [ { + "$ref" : "#/definitions/Property" + }, { + "type" : "object", + "properties" : { + "enum" : { + "type" : "array", + "items" : { + "type" : "object" + } + } + } + } ] + }, + "DecimalProperty" : { + "allOf" : [ { + "$ref" : "#/definitions/Property" + }, { + "type" : "object", + "properties" : { + "minimum" : { + "type" : "number" + }, + "maximum" : { + "type" : "number" + }, + "multipleOf" : { + "type" : "number" + }, + "exclusiveMinimum" : { + "type" : "boolean" + }, + "exclusiveMaximum" : { + "type" : "boolean" + } + } + } ] + }, + "Endpoint" : { + "type" : "object", + "properties" : { + "optimizationTechnique" : { + "type" : "string" + }, + "passSecurityHeaders" : { + "type" : "boolean" + }, + "uri" : { + "type" : "string" + }, + "connectionTimeoutDuration" : { + "type" : "integer", + "format" : "int32" + }, + "alias" : { + "type" : "boolean" + } + } + }, + "EntitySet" : { + "type" : "object", + "properties" : { + "entityType" : { + "type" : "string" + }, + "parameters" : { + "type" : "object", + "additionalProperties" : { + "type" : "array", + "items" : { + "type" : "string" + } + } + }, + "enabled" : { + "type" : "boolean" + } + } + }, + "EntityType" : { + "type" : "object", + "properties" : { + "properties" : { + "type" : "object", + "additionalProperties" : { + "type" : "object" + } + }, + "navigationProperties" : { + "type" : "object", + "additionalProperties" : { + "$ref" : "#/definitions/EntitySet" + } + }, + "methods" : { + "type" : "object", + "additionalProperties" : { + "$ref" : "#/definitions/MethodParameters" + } + } + } + }, + "Example" : { + "type" : "object", + "properties" : { + "vendorExtensions" : { + "type" : "object", + "additionalProperties" : { + "type" : "object" + } + }, + "summary" : { + "type" : "string", + "description" : "Short description for the example" + }, + "description" : { + "type" : "string", + "description" : "Long description for the example" + }, + "value" : { + "type" : "object", + "description" : "Embedded literal example. The value field and externalValue field are mutually exclusive. To represent examples of media types that cannot naturally represented in JSON or YAML, use a string value to contain the example, escaping where necessary" + }, + "externalValue" : { + "type" : "string", + "description" : "A URL that points to the literal example. This provides the capability to reference examples that cannot easily be included in JSON or YAML documents. The value field and externalValue field are mutually exclusive" + }, + "get$ref" : { + "type" : "string" + } + } + }, + "ExternalDocs" : { + "type" : "object", + "properties" : { + "vendorExtensions" : { + "type" : "object", + "additionalProperties" : { + "type" : "object" + } + }, + "description" : { + "type" : "string", + "description" : "A short description of the target documentation" + }, + "url" : { + "type" : "string", + "description" : "The URL for the target documentation" + } + } + }, + "FormParameter" : { + "allOf" : [ { + "$ref" : "#/definitions/Parameter" + }, { + "type" : "object", + "properties" : { + "name" : { + "type" : "string", + "description" : "The name of the parameter. Parameter names are case sensitive" + }, + "in" : { + "type" : "string", + "description" : "The location of the parameter. Possible values are \"query\", \"header\", \"path\" or \"cookie\"" + }, + "description" : { + "type" : "string", + "description" : "A brief description of the parameter. This could contain examples of use" + }, + "required" : { + "type" : "boolean", + "description" : "Determines whether this parameter is mandatory. If the parameter location is \"path\", this property is REQUIRED and its value MUST be true. Otherwise, the property MAY be included and its default value is false" + }, + "get$ref" : { + "type" : "string", + "description" : "The available paths and operations for the API" + }, + "allowEmptyValue" : { + "type" : "boolean", + "description" : "Sets the ability to pass empty-valued parameters. This is valid only for query parameters and allows sending a parameter with an empty value" + }, + "deprecated" : { + "type" : "boolean", + "description" : "Determines whether this parameter is mandatory. If the parameter location is \"path\", this property is REQUIRED and its value MUST be true. Otherwise, the property MAY be included and its default value is false" + }, + "style" : { + "type" : "string", + "description" : "Describes how the parameter value will be serialized depending on the type of the parameter value. Default values (based on value of in): for query - form; for path - simple; for header - simple; for cookie - form", + "enum" : [ "MATRIX", "LABEL", "FORM", "SIMPLE", "SPACEDELIMITED", "PIPEDELIMITED", "DEEPOBJECT" ] + }, + "explode" : { + "type" : "boolean", + "description" : "When this is true, parameter values of type array or object generate separate parameters for each value of the array or key-value pair of the map. For other types of parameters this property has no effect. When style is form, the default value is true. For all other styles, the default value is false" + }, + "allowReserved" : { + "type" : "boolean", + "description" : "Determines whether the parameter value SHOULD allow reserved characters, as defined by RFC3986 :/?#[]@!$&'()*+,;= to be included without percent-encoding. This property only applies to parameters with an in value of query. The default value is false" + }, + "examples" : { + "type" : "object", + "description" : "Examples of the media type. Each example SHOULD contain a value in the correct format as specified in the parameter encoding. The examples field is mutually exclusive of the example field. Furthermore, if referencing a schema which contains an example, the examples value SHALL override the example provided by the schema", + "additionalProperties" : { + "$ref" : "#/definitions/Example" + } + }, + "extendedExample" : { + "type" : "object", + "description" : "Example of the media type. The example SHOULD match the specified schema and encoding properties if present. The example field is mutually exclusive of the examples field. Furthermore, if referencing a schema which contains an example, the example value SHALL override the example provided by the schema. To represent examples of media types that cannot naturally be represented in JSON or YAML, a string value can contain the example with escaping where necessary" + }, + "content" : { + "type" : "object", + "description" : "A map containing the representations for the parameter. The key is the media type and the value describes it. The map MUST only contain one entry", + "additionalProperties" : { + "$ref" : "#/definitions/MediaType" + } + }, + "xpath" : { + "$ref" : "#/definitions/Xpath" + }, + "default" : { + "type" : "string" + }, + "parameterSchema" : { + "$ref" : "#/definitions/Schema" + }, + "_enum" : { + "type" : "array", + "items" : { + "type" : "string" + } + } + } + } ] + }, + "FunctionImport" : { + "type" : "object", + "properties" : { + "function" : { + "type" : "string" + }, + "enabled" : { + "type" : "boolean" + } + } + }, + "GatewayAPI" : { + "type" : "object", + "properties" : { + "apiDefinition" : { + "$ref" : "#/definitions/API" + }, + "nativeEndpoint" : { + "type" : "array", + "readOnly" : true, + "uniqueItems" : true, + "items" : { + "$ref" : "#/definitions/Endpoint" + } + }, + "apiName" : { + "type" : "string" + }, + "apiVersion" : { + "type" : "string" + }, + "apiEndpointPrefix" : { + "type" : "string" + }, + "apiDescription" : { + "type" : "string" + }, + "maturityState" : { + "type" : "string" + }, + "apiGroups" : { + "type" : "array", + "items" : { + "type" : "string" + } + }, + "isActive" : { + "type" : "boolean", + "readOnly" : true + }, + "type" : { + "type" : "string" + }, + "owner" : { + "type" : "string", + "readOnly" : true + }, + "policies" : { + "type" : "array", + "readOnly" : true, + "items" : { + "type" : "string" + } + }, + "rootFileName" : { + "type" : "string", + "readOnly" : true + }, + "scopes" : { + "type" : "array", + "items" : { + "$ref" : "#/definitions/Scope" + } + }, + "publishedPortals" : { + "type" : "array", + "items" : { + "type" : "string" + } + }, + "publishedToRegistry" : { + "type" : "boolean" + }, + "creationDate" : { + "type" : "string", + "readOnly" : true + }, + "lastModified" : { + "type" : "string", + "readOnly" : true + }, + "prevVersion" : { + "type" : "string", + "readOnly" : true + }, + "nextVersion" : { + "type" : "string", + "readOnly" : true + }, + "systemVersion" : { + "type" : "integer", + "format" : "int32", + "readOnly" : true + }, + "mockService" : { + "$ref" : "#/definitions/MockService" + }, + "apiDocuments" : { + "type" : "array", + "items" : { + "type" : "string" + } + }, + "id" : { + "type" : "string" + }, + "oauth2ScopeName" : { + "type" : "string" + } + } + }, + "GatewaySchema" : { + "allOf" : [ { + "$ref" : "#/definitions/Schema" + }, { + "type" : "object", + "properties" : { + "type" : { + "type" : "string" + }, + "schema" : { + "type" : "string" + } + } + } ] + }, + "Header" : { + "type" : "object", + "properties" : { + "vendorExtensions" : { + "type" : "object", + "additionalProperties" : { + "type" : "object" + } + }, + "name" : { + "type" : "string", + "description" : "The name of the parameter. Parameter names are case sensitive" + }, + "in" : { + "type" : "string", + "description" : "The location of the parameter. Possible values are \"query\", \"header\", \"path\" or \"cookie\"" + }, + "description" : { + "type" : "string", + "description" : "A brief description of the parameter. This could contain examples of use" + }, + "required" : { + "type" : "boolean", + "description" : "Determines whether this parameter is mandatory. If the parameter location is \"path\", this property is REQUIRED and its value MUST be true. Otherwise, the property MAY be included and its default value is false" + }, + "get$ref" : { + "type" : "string", + "description" : "The available paths and operations for the API" + }, + "allowEmptyValue" : { + "type" : "boolean", + "description" : "Sets the ability to pass empty-valued parameters. This is valid only for query parameters and allows sending a parameter with an empty value" + }, + "deprecated" : { + "type" : "boolean", + "description" : "Determines whether this parameter is mandatory. If the parameter location is \"path\", this property is REQUIRED and its value MUST be true. Otherwise, the property MAY be included and its default value is false" + }, + "style" : { + "type" : "string", + "description" : "Describes how the parameter value will be serialized depending on the type of the parameter value. Default values (based on value of in): for query - form; for path - simple; for header - simple; for cookie - form", + "enum" : [ "MATRIX", "LABEL", "FORM", "SIMPLE", "SPACEDELIMITED", "PIPEDELIMITED", "DEEPOBJECT" ] + }, + "explode" : { + "type" : "boolean", + "description" : "When this is true, parameter values of type array or object generate separate parameters for each value of the array or key-value pair of the map. For other types of parameters this property has no effect. When style is form, the default value is true. For all other styles, the default value is false" + }, + "allowReserved" : { + "type" : "boolean", + "description" : "Determines whether the parameter value SHOULD allow reserved characters, as defined by RFC3986 :/?#[]@!$&'()*+,;= to be included without percent-encoding. This property only applies to parameters with an in value of query. The default value is false" + }, + "examples" : { + "type" : "object", + "description" : "Examples of the media type. Each example SHOULD contain a value in the correct format as specified in the parameter encoding. The examples field is mutually exclusive of the example field. Furthermore, if referencing a schema which contains an example, the examples value SHALL override the example provided by the schema", + "additionalProperties" : { + "$ref" : "#/definitions/Example" + } + }, + "extendedExample" : { + "type" : "object", + "description" : "Example of the media type. The example SHOULD match the specified schema and encoding properties if present. The example field is mutually exclusive of the examples field. Furthermore, if referencing a schema which contains an example, the example value SHALL override the example provided by the schema. To represent examples of media types that cannot naturally be represented in JSON or YAML, a string value can contain the example with escaping where necessary" + }, + "content" : { + "type" : "object", + "description" : "A map containing the representations for the parameter. The key is the media type and the value describes it. The map MUST only contain one entry", + "additionalProperties" : { + "$ref" : "#/definitions/MediaType" + } + }, + "xpath" : { + "$ref" : "#/definitions/Xpath" + }, + "default" : { + "type" : "string" + }, + "parameterSchema" : { + "$ref" : "#/definitions/Schema" + }, + "_enum" : { + "type" : "array", + "items" : { + "type" : "string" + } + } + } + }, + "HeaderParameter" : { + "allOf" : [ { + "$ref" : "#/definitions/Parameter" + }, { + "type" : "object", + "properties" : { + "name" : { + "type" : "string", + "description" : "The name of the parameter. Parameter names are case sensitive" + }, + "in" : { + "type" : "string", + "description" : "The location of the parameter. Possible values are \"query\", \"header\", \"path\" or \"cookie\"" + }, + "description" : { + "type" : "string", + "description" : "A brief description of the parameter. This could contain examples of use" + }, + "required" : { + "type" : "boolean", + "description" : "Determines whether this parameter is mandatory. If the parameter location is \"path\", this property is REQUIRED and its value MUST be true. Otherwise, the property MAY be included and its default value is false" + }, + "get$ref" : { + "type" : "string", + "description" : "The available paths and operations for the API" + }, + "allowEmptyValue" : { + "type" : "boolean", + "description" : "Sets the ability to pass empty-valued parameters. This is valid only for query parameters and allows sending a parameter with an empty value" + }, + "deprecated" : { + "type" : "boolean", + "description" : "Determines whether this parameter is mandatory. If the parameter location is \"path\", this property is REQUIRED and its value MUST be true. Otherwise, the property MAY be included and its default value is false" + }, + "style" : { + "type" : "string", + "description" : "Describes how the parameter value will be serialized depending on the type of the parameter value. Default values (based on value of in): for query - form; for path - simple; for header - simple; for cookie - form", + "enum" : [ "MATRIX", "LABEL", "FORM", "SIMPLE", "SPACEDELIMITED", "PIPEDELIMITED", "DEEPOBJECT" ] + }, + "explode" : { + "type" : "boolean", + "description" : "When this is true, parameter values of type array or object generate separate parameters for each value of the array or key-value pair of the map. For other types of parameters this property has no effect. When style is form, the default value is true. For all other styles, the default value is false" + }, + "allowReserved" : { + "type" : "boolean", + "description" : "Determines whether the parameter value SHOULD allow reserved characters, as defined by RFC3986 :/?#[]@!$&'()*+,;= to be included without percent-encoding. This property only applies to parameters with an in value of query. The default value is false" + }, + "examples" : { + "type" : "object", + "description" : "Examples of the media type. Each example SHOULD contain a value in the correct format as specified in the parameter encoding. The examples field is mutually exclusive of the example field. Furthermore, if referencing a schema which contains an example, the examples value SHALL override the example provided by the schema", + "additionalProperties" : { + "$ref" : "#/definitions/Example" + } + }, + "extendedExample" : { + "type" : "object", + "description" : "Example of the media type. The example SHOULD match the specified schema and encoding properties if present. The example field is mutually exclusive of the examples field. Furthermore, if referencing a schema which contains an example, the example value SHALL override the example provided by the schema. To represent examples of media types that cannot naturally be represented in JSON or YAML, a string value can contain the example with escaping where necessary" + }, + "content" : { + "type" : "object", + "description" : "A map containing the representations for the parameter. The key is the media type and the value describes it. The map MUST only contain one entry", + "additionalProperties" : { + "$ref" : "#/definitions/MediaType" + } + }, + "xpath" : { + "$ref" : "#/definitions/Xpath" + }, + "default" : { + "type" : "string" + }, + "parameterSchema" : { + "$ref" : "#/definitions/Schema" + }, + "_enum" : { + "type" : "array", + "items" : { + "type" : "string" + } + } + } + } ] + }, + "Info" : { + "type" : "object", + "properties" : { + "vendorExtensions" : { + "type" : "object", + "additionalProperties" : { + "type" : "object" + } + }, + "description" : { + "type" : "string", + "description" : "A short description of the application" + }, + "version" : { + "type" : "string", + "description" : "Version of the API" + }, + "title" : { + "type" : "string", + "description" : "The title of the application" + }, + "termsOfService" : { + "type" : "string", + "description" : "A URL to the Terms of Service for the API" + }, + "contact" : { + "description" : "The contact information for the exposed API", + "$ref" : "#/definitions/Contact" + }, + "license" : { + "description" : "The license information for the exposed API", + "$ref" : "#/definitions/Licence" + } + } + }, + "IntegerSchema" : { + "allOf" : [ { + "$ref" : "#/definitions/Schema" + }, { + "type" : "object", + "properties" : { + "type" : { + "type" : "string" + }, + "format" : { + "type" : "string" + }, + "enum" : { + "type" : "array", + "items" : { + "$ref" : "#/definitions/Number" + } + }, + "default" : { + "$ref" : "#/definitions/Number" + } + } + } ] + }, + "Licence" : { + "type" : "object", + "properties" : { + "vendorExtensions" : { + "type" : "object", + "additionalProperties" : { + "type" : "object" + } + }, + "name" : { + "type" : "string", + "description" : "The license name used for the API" + }, + "url" : { + "type" : "string", + "description" : "A URL to the license used for the API" + } + } + }, + "Link" : { + "type" : "object", + "properties" : { + "vendorExtensions" : { + "type" : "object", + "additionalProperties" : { + "type" : "object" + } + }, + "operationRef" : { + "type" : "string", + "description" : "A relative or absolute reference to an OAS operation. This field is mutually exclusive of the operationId field, and MUST point to an Operation Object. Relative operationRef values MAY be used to locate an existing Operation Object in the API definition" + }, + "operationId" : { + "type" : "string", + "description" : "The name of an existing, resolvable OAS operation, as defined with a unique operationId. This field is mutually exclusive of the operationRef field" + }, + "parameters" : { + "type" : "object", + "description" : "A map representing parameters to pass to an operation as specified with operationId or identified via operationRef. The key is the parameter name to be used, whereas the value can be a constant or an expression to be evaluated and passed to the linked operation. The parameter name can be qualified using the parameter location [{in}.]{name} for operations that use the same parameter name in different locations (e.g. path.id)", + "additionalProperties" : { + "type" : "string" + } + }, + "requestBody" : { + "type" : "string", + "description" : "A literal value or {expression} to use as a request body when calling the target operation" + }, + "description" : { + "type" : "string", + "description" : "A description of the link" + }, + "get$ref" : { + "type" : "string" + } + } + }, + "MapProperty" : { + "allOf" : [ { + "$ref" : "#/definitions/Property" + }, { + "type" : "object", + "properties" : { + "additionalProperties" : { + "$ref" : "#/definitions/Property" + }, + "minProperties" : { + "type" : "integer", + "format" : "int32" + }, + "maxProperties" : { + "type" : "integer", + "format" : "int32" + } + } + } ] + }, + "MediaType" : { + "type" : "object", + "properties" : { + "vendorExtensions" : { + "type" : "object", + "additionalProperties" : { + "type" : "object" + } + }, + "schema" : { + "description" : "The schema defining the content of the request, response, or parameter", + "$ref" : "#/definitions/Schema" + }, + "examples" : { + "type" : "object", + "description" : "Examples of the media type. Each example object SHOULD match the media type and specified schema if present. The examples field is mutually exclusive of the example field. Furthermore, if referencing a schema which contains an example, the examples value SHALL override the example provided by the schema", + "additionalProperties" : { + "$ref" : "#/definitions/Example" + } + }, + "example" : { + "type" : "object", + "description" : "Example of the media type. The example object SHOULD be in the correct format as specified by the media type. The example field is mutually exclusive of the examples field. Furthermore, if referencing a schema which contains an example, the example value SHALL override the example provided by the schema" + } + } + }, + "MessageFrame" : { + "type" : "object", + "properties" : { + "origin" : { + "type" : "string", + "enum" : [ "Server", "Client" ] + }, + "type" : { + "type" : "string", + "enum" : [ "Binary", "Text" ] + }, + "messagePayload" : { + "type" : "string" + }, + "messageDescription" : { + "type" : "string" + } + } + }, + "MethodParameters" : { + "type" : "object", + "properties" : { + "enabled" : { + "type" : "boolean" + }, + "parameters" : { + "type" : "object", + "additionalProperties" : { + "type" : "string" + } + }, + "returnType" : { + "type" : "string" + } + } + }, + "MockService" : { + "type" : "object", + "properties" : { + "enableMock" : { + "type" : "boolean" + }, + "runAsUser" : { + "type" : "string" + }, + "service" : { + "type" : "string" + } + } + }, + "MockedCondition" : { + "type" : "object", + "properties" : { + "mockedConditionParameter" : { + "type" : "string", + "enum" : [ "BODY", "HEADER", "QUERYPARAMETER" ] + }, + "mockedLevel1Operator" : { + "type" : "string", + "enum" : [ "EQUALS", "NOTEQUALS", "CONTAINSKEY", "CONTAINSKEYVALUE" ] + }, + "mockedLevel2Operator" : { + "type" : "string", + "enum" : [ "EQUALS", "NOTEQUALS", "CONTAINS", "STARTSWITH", "ENDSWITH" ] + }, + "value1" : { + "type" : "string" + }, + "value2" : { + "type" : "string" + }, + "conditionName" : { + "type" : "string" + } + } + }, + "MockedConditionsBasedCustomResponse" : { + "type" : "object", + "properties" : { + "mockedConditionList" : { + "type" : "array", + "items" : { + "$ref" : "#/definitions/MockedCondition" + } + }, + "mockedResponse" : { + "$ref" : "#/definitions/MockedResponse" + } + } + }, + "MockedResponse" : { + "type" : "object", + "properties" : { + "responseBody" : { + "type" : "object", + "additionalProperties" : { + "type" : "object" + } + }, + "responseHeaders" : { + "type" : "object", + "additionalProperties" : { + "type" : "object" + } + }, + "statusCode" : { + "type" : "string" + } + } + }, + "Model" : { + "type" : "object", + "discriminator" : "type", + "properties" : { + "reference" : { + "type" : "string" + }, + "title" : { + "type" : "string" + }, + "description" : { + "type" : "string" + }, + "vendorExtensions" : { + "type" : "object", + "additionalProperties" : { + "type" : "object" + } + }, + "example" : { + "type" : "object" + }, + "type" : { + "type" : "string" + }, + "externalDocs" : { + "$ref" : "#/definitions/ExternalDocs" + }, + "properties" : { + "type" : "object", + "additionalProperties" : { + "type" : "object" + } + } + } + }, + "ModelImpl" : { + "allOf" : [ { + "$ref" : "#/definitions/Model" + }, { + "type" : "object", + "properties" : { + "format" : { + "type" : "string" + }, + "name" : { + "type" : "string" + }, + "required" : { + "type" : "array", + "items" : { + "type" : "string" + } + }, + "properties" : { + "type" : "object", + "readOnly" : true, + "additionalProperties" : { + "$ref" : "#/definitions/Property" + } + }, + "discriminator" : { + "type" : "string" + }, + "xml" : { + "$ref" : "#/definitions/Xml" + }, + "defaultValue" : { + "type" : "object" + }, + "allowEmptyValue" : { + "type" : "boolean" + }, + "uniqueItems" : { + "type" : "boolean" + }, + "minimum" : { + "type" : "number" + }, + "maximum" : { + "type" : "number" + }, + "enum" : { + "type" : "array", + "items" : { + "type" : "string" + } + } + } + } ] + }, + "Namespaces" : { + "type" : "object", + "properties" : { + "prefix" : { + "type" : "string" + }, + "uri" : { + "type" : "string" + } + } + }, + "Number" : { + "type" : "object" + }, + "NumberSchema" : { + "allOf" : [ { + "$ref" : "#/definitions/Schema" + }, { + "type" : "object", + "properties" : { + "type" : { + "type" : "string" + }, + "enum" : { + "type" : "array", + "items" : { + "type" : "number" + } + }, + "default" : { + "type" : "number" + } + } + } ] + }, + "OAuth2Definition" : { + "type" : "object", + "properties" : { + "vendorExtensions" : { + "type" : "object", + "additionalProperties" : { + "type" : "object" + } + }, + "description" : { + "type" : "string" + }, + "type" : { + "type" : "string" + }, + "authorizationUrl" : { + "type" : "string" + }, + "authorizationGrants" : { + "type" : "array", + "items" : { + "type" : "string" + } + }, + "tokenUrl" : { + "type" : "string" + }, + "flow" : { + "type" : "string" + }, + "scopes" : { + "type" : "object", + "additionalProperties" : { + "type" : "object" + } + }, + "refreshUrl" : { + "type" : "string" + }, + "securitySchemeDescriptor" : { + "$ref" : "#/definitions/SecuritySchemeDescriptor" + } + } + }, + "OAuthFlows" : { + "type" : "object", + "properties" : { + "vendorExtensions" : { + "type" : "object", + "additionalProperties" : { + "type" : "object" + } + }, + "implicit" : { + "$ref" : "#/definitions/OAuth2Definition" + }, + "password" : { + "$ref" : "#/definitions/OAuth2Definition" + }, + "clientCredentials" : { + "$ref" : "#/definitions/OAuth2Definition" + }, + "authorizationCode" : { + "$ref" : "#/definitions/OAuth2Definition" + } + } + }, + "ODataAPI" : { + "allOf" : [ { + "$ref" : "#/definitions/API" + }, { + "type" : "object", + "properties" : { + "odataVersion" : { + "type" : "string" + }, + "serviceRoot" : { + "type" : "string" + }, + "serviceDocument" : { + "type" : "string" + }, + "metaDataDocument" : { + "type" : "string" + }, + "entitySets" : { + "type" : "object", + "additionalProperties" : { + "$ref" : "#/definitions/EntitySet" + } + }, + "singletons" : { + "type" : "object", + "additionalProperties" : { + "$ref" : "#/definitions/EntitySet" + } + }, + "actionImports" : { + "type" : "object", + "additionalProperties" : { + "$ref" : "#/definitions/ActionImport" + } + }, + "functionImports" : { + "type" : "object", + "additionalProperties" : { + "$ref" : "#/definitions/FunctionImport" + } + }, + "entityTypes" : { + "type" : "object", + "additionalProperties" : { + "$ref" : "#/definitions/EntityType" + } + }, + "actions" : { + "type" : "object", + "additionalProperties" : { + "$ref" : "#/definitions/EntityType" + } + }, + "functions" : { + "type" : "object", + "additionalProperties" : { + "$ref" : "#/definitions/EntityType" + } + }, + "tags" : { + "type" : "array", + "items" : { + "$ref" : "#/definitions/Tag" + } + }, + "apiTags" : { + "type" : "array", + "items" : { + "type" : "string" + } + }, + "serviceRegistryDisplayName" : { + "type" : "string", + "description" : "The name of the API in service registry when the API is published to a service registry." + } + } + } ] + }, + "ObjectProperty" : { + "allOf" : [ { + "$ref" : "#/definitions/Property" + }, { + "type" : "object", + "properties" : { + "properties" : { + "type" : "object", + "additionalProperties" : { + "$ref" : "#/definitions/Property" + } + } + } + } ] + }, + "ObjectSchema" : { + "allOf" : [ { + "$ref" : "#/definitions/Schema" + }, { + "type" : "object", + "properties" : { + "type" : { + "type" : "string" + } + } + } ] + }, + "Operation" : { + "type" : "object", + "properties" : { + "vendorExtensions" : { + "type" : "object", + "additionalProperties" : { + "type" : "object" + } + }, + "tags" : { + "type" : "array", + "description" : "A list of tags for API documentation control. Tags can be used for logical grouping of operations by resources or any other qualifier", + "items" : { + "type" : "string" + } + }, + "summary" : { + "type" : "string", + "description" : "A short summary of what the operation does" + }, + "description" : { + "type" : "string", + "description" : "A verbose explanation of the operation behavior" + }, + "operationId" : { + "type" : "string", + "description" : "Unique string used to identify the operation. The id MUST be unique among all operations described in the API. The operationId value is case-sensitive" + }, + "parameters" : { + "type" : "array", + "description" : "A list of parameters that are applicable for this operation. If a parameter is already defined at the Path Item, the new definition will override it but can never remove it", + "items" : { + "$ref" : "#/definitions/Parameter" + } + }, + "responses" : { + "type" : "object", + "description" : "The list of possible responses as they are returned from executing this operation", + "additionalProperties" : { + "$ref" : "#/definitions/Response" + } + }, + "mockedResponses" : { + "type" : "object", + "description" : "The list of possible mocked responses as they are returned from executing this operation and it's applicable only for mocked APIs", + "additionalProperties" : { + "$ref" : "#/definitions/MockedResponse" + } + }, + "mockedConditionsBasedCustomResponsesList" : { + "type" : "array", + "description" : "The list of mocked conditions and it's applicable only for mocked APIs", + "items" : { + "$ref" : "#/definitions/MockedConditionsBasedCustomResponse" + } + }, + "externalDocs" : { + "description" : "Additional external documentation for this operation", + "$ref" : "#/definitions/ExternalDocs" + }, + "deprecated" : { + "type" : "boolean", + "description" : "Declares this operation to be deprecated. Consumers SHOULD refrain from usage of the declared operation. Default value is false" + }, + "enabled" : { + "type" : "boolean" + }, + "scopes" : { + "type" : "array", + "items" : { + "type" : "string" + } + }, + "requestBody" : { + "description" : "The request body applicable for this operation", + "$ref" : "#/definitions/RequestBody" + }, + "callbacks" : { + "type" : "object", + "description" : "An optional, string description, intended to apply to all operations in this path", + "additionalProperties" : { + "$ref" : "#/definitions/Callback" + } + } + } + }, + "Parameter" : { + "type" : "object", + "properties" : { + "vendorExtensions" : { + "type" : "object", + "additionalProperties" : { + "type" : "object" + } + }, + "name" : { + "type" : "string", + "description" : "The name of the parameter. Parameter names are case sensitive" + }, + "in" : { + "type" : "string", + "description" : "The location of the parameter. Possible values are \"query\", \"header\", \"path\" or \"cookie\"" + }, + "description" : { + "type" : "string", + "description" : "A brief description of the parameter. This could contain examples of use" + }, + "required" : { + "type" : "boolean", + "description" : "Determines whether this parameter is mandatory. If the parameter location is \"path\", this property is REQUIRED and its value MUST be true. Otherwise, the property MAY be included and its default value is false" + }, + "get$ref" : { + "type" : "string", + "description" : "The available paths and operations for the API" + }, + "allowEmptyValue" : { + "type" : "boolean", + "description" : "Sets the ability to pass empty-valued parameters. This is valid only for query parameters and allows sending a parameter with an empty value" + }, + "deprecated" : { + "type" : "boolean", + "description" : "Determines whether this parameter is mandatory. If the parameter location is \"path\", this property is REQUIRED and its value MUST be true. Otherwise, the property MAY be included and its default value is false" + }, + "style" : { + "type" : "string", + "description" : "Describes how the parameter value will be serialized depending on the type of the parameter value. Default values (based on value of in): for query - form; for path - simple; for header - simple; for cookie - form", + "enum" : [ "MATRIX", "LABEL", "FORM", "SIMPLE", "SPACEDELIMITED", "PIPEDELIMITED", "DEEPOBJECT" ] + }, + "explode" : { + "type" : "boolean", + "description" : "When this is true, parameter values of type array or object generate separate parameters for each value of the array or key-value pair of the map. For other types of parameters this property has no effect. When style is form, the default value is true. For all other styles, the default value is false" + }, + "allowReserved" : { + "type" : "boolean", + "description" : "Determines whether the parameter value SHOULD allow reserved characters, as defined by RFC3986 :/?#[]@!$&'()*+,;= to be included without percent-encoding. This property only applies to parameters with an in value of query. The default value is false" + }, + "examples" : { + "type" : "object", + "description" : "Examples of the media type. Each example SHOULD contain a value in the correct format as specified in the parameter encoding. The examples field is mutually exclusive of the example field. Furthermore, if referencing a schema which contains an example, the examples value SHALL override the example provided by the schema", + "additionalProperties" : { + "$ref" : "#/definitions/Example" + } + }, + "extendedExample" : { + "type" : "object", + "description" : "Example of the media type. The example SHOULD match the specified schema and encoding properties if present. The example field is mutually exclusive of the examples field. Furthermore, if referencing a schema which contains an example, the example value SHALL override the example provided by the schema. To represent examples of media types that cannot naturally be represented in JSON or YAML, a string value can contain the example with escaping where necessary" + }, + "content" : { + "type" : "object", + "description" : "A map containing the representations for the parameter. The key is the media type and the value describes it. The map MUST only contain one entry", + "additionalProperties" : { + "$ref" : "#/definitions/MediaType" + } + }, + "xpath" : { + "$ref" : "#/definitions/Xpath" + }, + "default" : { + "type" : "string" + }, + "parameterSchema" : { + "$ref" : "#/definitions/Schema" + }, + "_enum" : { + "type" : "array", + "items" : { + "type" : "string" + } + } + } + }, + "Path" : { + "type" : "object", + "properties" : { + "vendorExtensions" : { + "type" : "object", + "additionalProperties" : { + "type" : "object" + } + }, + "get" : { + "description" : "A definition of a GET operation on this path", + "$ref" : "#/definitions/Operation" + }, + "put" : { + "description" : "A definition of a PUT operation on this path", + "$ref" : "#/definitions/Operation" + }, + "post" : { + "description" : "A definition of a POST operation on this path", + "$ref" : "#/definitions/Operation" + }, + "head" : { + "description" : "A definition of a HEAD operation on this path", + "$ref" : "#/definitions/Operation" + }, + "delete" : { + "description" : "A definition of a DELETE operation on this path", + "$ref" : "#/definitions/Operation" + }, + "patch" : { + "description" : "A definition of a PATCH operation on this path", + "$ref" : "#/definitions/Operation" + }, + "options" : { + "description" : "A definition of a OPTIONS operation on this path", + "$ref" : "#/definitions/Operation" + }, + "trace" : { + "description" : "A definition of a TRACE operation on this path", + "$ref" : "#/definitions/Operation" + }, + "parameters" : { + "type" : "array", + "description" : "A list of parameters that are applicable for all the operations described under this path. These parameters can be overridden at the operation level, but cannot be removed there", + "items" : { + "type" : "object" + } + }, + "scopes" : { + "type" : "array", + "items" : { + "type" : "string" + } + }, + "tags" : { + "type" : "array", + "items" : { + "type" : "string" + } + }, + "displayName" : { + "type" : "string" + }, + "description" : { + "type" : "string", + "description" : "An optional, string description, intended to apply to all operations in this path" + }, + "enabled" : { + "type" : "boolean" + }, + "get$ref" : { + "type" : "string", + "description" : "Allows for an external definition of this path item" + }, + "summary" : { + "type" : "string", + "description" : "An optional, string summary, intended to apply to all operations in this path" + } + } + }, + "PathParameter" : { + "allOf" : [ { + "$ref" : "#/definitions/Parameter" + }, { + "type" : "object", + "properties" : { + "name" : { + "type" : "string", + "description" : "The name of the parameter. Parameter names are case sensitive" + }, + "in" : { + "type" : "string", + "description" : "The location of the parameter. Possible values are \"query\", \"header\", \"path\" or \"cookie\"" + }, + "description" : { + "type" : "string", + "description" : "A brief description of the parameter. This could contain examples of use" + }, + "required" : { + "type" : "boolean", + "description" : "Determines whether this parameter is mandatory. If the parameter location is \"path\", this property is REQUIRED and its value MUST be true. Otherwise, the property MAY be included and its default value is false" + }, + "get$ref" : { + "type" : "string", + "description" : "The available paths and operations for the API" + }, + "allowEmptyValue" : { + "type" : "boolean", + "description" : "Sets the ability to pass empty-valued parameters. This is valid only for query parameters and allows sending a parameter with an empty value" + }, + "deprecated" : { + "type" : "boolean", + "description" : "Determines whether this parameter is mandatory. If the parameter location is \"path\", this property is REQUIRED and its value MUST be true. Otherwise, the property MAY be included and its default value is false" + }, + "style" : { + "type" : "string", + "description" : "Describes how the parameter value will be serialized depending on the type of the parameter value. Default values (based on value of in): for query - form; for path - simple; for header - simple; for cookie - form", + "enum" : [ "MATRIX", "LABEL", "FORM", "SIMPLE", "SPACEDELIMITED", "PIPEDELIMITED", "DEEPOBJECT" ] + }, + "explode" : { + "type" : "boolean", + "description" : "When this is true, parameter values of type array or object generate separate parameters for each value of the array or key-value pair of the map. For other types of parameters this property has no effect. When style is form, the default value is true. For all other styles, the default value is false" + }, + "allowReserved" : { + "type" : "boolean", + "description" : "Determines whether the parameter value SHOULD allow reserved characters, as defined by RFC3986 :/?#[]@!$&'()*+,;= to be included without percent-encoding. This property only applies to parameters with an in value of query. The default value is false" + }, + "examples" : { + "type" : "object", + "description" : "Examples of the media type. Each example SHOULD contain a value in the correct format as specified in the parameter encoding. The examples field is mutually exclusive of the example field. Furthermore, if referencing a schema which contains an example, the examples value SHALL override the example provided by the schema", + "additionalProperties" : { + "$ref" : "#/definitions/Example" + } + }, + "extendedExample" : { + "type" : "object", + "description" : "Example of the media type. The example SHOULD match the specified schema and encoding properties if present. The example field is mutually exclusive of the examples field. Furthermore, if referencing a schema which contains an example, the example value SHALL override the example provided by the schema. To represent examples of media types that cannot naturally be represented in JSON or YAML, a string value can contain the example with escaping where necessary" + }, + "content" : { + "type" : "object", + "description" : "A map containing the representations for the parameter. The key is the media type and the value describes it. The map MUST only contain one entry", + "additionalProperties" : { + "$ref" : "#/definitions/MediaType" + } + }, + "xpath" : { + "$ref" : "#/definitions/Xpath" + }, + "default" : { + "type" : "string" + }, + "parameterSchema" : { + "$ref" : "#/definitions/Schema" + }, + "_enum" : { + "type" : "array", + "items" : { + "type" : "string" + } + } + } + } ] + }, + "Property" : { + "type" : "object", + "discriminator" : "type", + "properties" : { + "position" : { + "type" : "integer", + "format" : "int32" + }, + "title" : { + "type" : "string" + }, + "description" : { + "type" : "string" + }, + "vendorExtensions" : { + "type" : "object", + "additionalProperties" : { + "type" : "object" + } + }, + "required" : { + "type" : "boolean" + }, + "access" : { + "type" : "string" + }, + "example" : { + "type" : "object" + }, + "format" : { + "type" : "string" + }, + "xml" : { + "$ref" : "#/definitions/Xml" + }, + "allowEmptyValue" : { + "type" : "boolean" + }, + "name" : { + "type" : "string" + }, + "readOnly" : { + "type" : "boolean" + }, + "type" : { + "type" : "string" + } + } + }, + "QueryParameter" : { + "allOf" : [ { + "$ref" : "#/definitions/Parameter" + }, { + "type" : "object", + "properties" : { + "name" : { + "type" : "string", + "description" : "The name of the parameter. Parameter names are case sensitive" + }, + "in" : { + "type" : "string", + "description" : "The location of the parameter. Possible values are \"query\", \"header\", \"path\" or \"cookie\"" + }, + "description" : { + "type" : "string", + "description" : "A brief description of the parameter. This could contain examples of use" + }, + "required" : { + "type" : "boolean", + "description" : "Determines whether this parameter is mandatory. If the parameter location is \"path\", this property is REQUIRED and its value MUST be true. Otherwise, the property MAY be included and its default value is false" + }, + "get$ref" : { + "type" : "string", + "description" : "The available paths and operations for the API" + }, + "allowEmptyValue" : { + "type" : "boolean", + "description" : "Sets the ability to pass empty-valued parameters. This is valid only for query parameters and allows sending a parameter with an empty value" + }, + "deprecated" : { + "type" : "boolean", + "description" : "Determines whether this parameter is mandatory. If the parameter location is \"path\", this property is REQUIRED and its value MUST be true. Otherwise, the property MAY be included and its default value is false" + }, + "style" : { + "type" : "string", + "description" : "Describes how the parameter value will be serialized depending on the type of the parameter value. Default values (based on value of in): for query - form; for path - simple; for header - simple; for cookie - form", + "enum" : [ "MATRIX", "LABEL", "FORM", "SIMPLE", "SPACEDELIMITED", "PIPEDELIMITED", "DEEPOBJECT" ] + }, + "explode" : { + "type" : "boolean", + "description" : "When this is true, parameter values of type array or object generate separate parameters for each value of the array or key-value pair of the map. For other types of parameters this property has no effect. When style is form, the default value is true. For all other styles, the default value is false" + }, + "allowReserved" : { + "type" : "boolean", + "description" : "Determines whether the parameter value SHOULD allow reserved characters, as defined by RFC3986 :/?#[]@!$&'()*+,;= to be included without percent-encoding. This property only applies to parameters with an in value of query. The default value is false" + }, + "examples" : { + "type" : "object", + "description" : "Examples of the media type. Each example SHOULD contain a value in the correct format as specified in the parameter encoding. The examples field is mutually exclusive of the example field. Furthermore, if referencing a schema which contains an example, the examples value SHALL override the example provided by the schema", + "additionalProperties" : { + "$ref" : "#/definitions/Example" + } + }, + "extendedExample" : { + "type" : "object", + "description" : "Example of the media type. The example SHOULD match the specified schema and encoding properties if present. The example field is mutually exclusive of the examples field. Furthermore, if referencing a schema which contains an example, the example value SHALL override the example provided by the schema. To represent examples of media types that cannot naturally be represented in JSON or YAML, a string value can contain the example with escaping where necessary" + }, + "content" : { + "type" : "object", + "description" : "A map containing the representations for the parameter. The key is the media type and the value describes it. The map MUST only contain one entry", + "additionalProperties" : { + "$ref" : "#/definitions/MediaType" + } + }, + "xpath" : { + "$ref" : "#/definitions/Xpath" + }, + "default" : { + "type" : "string" + }, + "parameterSchema" : { + "$ref" : "#/definitions/Schema" + }, + "_enum" : { + "type" : "array", + "items" : { + "type" : "string" + } + } + } + } ] + }, + "RefModel" : { + "allOf" : [ { + "$ref" : "#/definitions/Model" + }, { + "type" : "object", + "properties" : { + "simpleRef" : { + "type" : "string" + }, + "get$ref" : { + "type" : "string" + }, + "refFormat" : { + "type" : "string", + "enum" : [ "URL", "RELATIVE", "INTERNAL" ] + } + } + } ] + }, + "RefParameter" : { + "allOf" : [ { + "$ref" : "#/definitions/Parameter" + }, { + "type" : "object", + "properties" : { + "name" : { + "type" : "string", + "description" : "The name of the parameter. Parameter names are case sensitive" + }, + "in" : { + "type" : "string", + "description" : "The location of the parameter. Possible values are \"query\", \"header\", \"path\" or \"cookie\"" + }, + "description" : { + "type" : "string", + "description" : "A brief description of the parameter. This could contain examples of use" + }, + "required" : { + "type" : "boolean", + "description" : "Determines whether this parameter is mandatory. If the parameter location is \"path\", this property is REQUIRED and its value MUST be true. Otherwise, the property MAY be included and its default value is false" + }, + "get$ref" : { + "type" : "string", + "description" : "The available paths and operations for the API" + }, + "allowEmptyValue" : { + "type" : "boolean", + "description" : "Sets the ability to pass empty-valued parameters. This is valid only for query parameters and allows sending a parameter with an empty value" + }, + "deprecated" : { + "type" : "boolean", + "description" : "Determines whether this parameter is mandatory. If the parameter location is \"path\", this property is REQUIRED and its value MUST be true. Otherwise, the property MAY be included and its default value is false" + }, + "style" : { + "type" : "string", + "description" : "Describes how the parameter value will be serialized depending on the type of the parameter value. Default values (based on value of in): for query - form; for path - simple; for header - simple; for cookie - form", + "enum" : [ "MATRIX", "LABEL", "FORM", "SIMPLE", "SPACEDELIMITED", "PIPEDELIMITED", "DEEPOBJECT" ] + }, + "explode" : { + "type" : "boolean", + "description" : "When this is true, parameter values of type array or object generate separate parameters for each value of the array or key-value pair of the map. For other types of parameters this property has no effect. When style is form, the default value is true. For all other styles, the default value is false" + }, + "allowReserved" : { + "type" : "boolean", + "description" : "Determines whether the parameter value SHOULD allow reserved characters, as defined by RFC3986 :/?#[]@!$&'()*+,;= to be included without percent-encoding. This property only applies to parameters with an in value of query. The default value is false" + }, + "examples" : { + "type" : "object", + "description" : "Examples of the media type. Each example SHOULD contain a value in the correct format as specified in the parameter encoding. The examples field is mutually exclusive of the example field. Furthermore, if referencing a schema which contains an example, the examples value SHALL override the example provided by the schema", + "additionalProperties" : { + "$ref" : "#/definitions/Example" + } + }, + "extendedExample" : { + "type" : "object", + "description" : "Example of the media type. The example SHOULD match the specified schema and encoding properties if present. The example field is mutually exclusive of the examples field. Furthermore, if referencing a schema which contains an example, the example value SHALL override the example provided by the schema. To represent examples of media types that cannot naturally be represented in JSON or YAML, a string value can contain the example with escaping where necessary" + }, + "content" : { + "type" : "object", + "description" : "A map containing the representations for the parameter. The key is the media type and the value describes it. The map MUST only contain one entry", + "additionalProperties" : { + "$ref" : "#/definitions/MediaType" + } + }, + "xpath" : { + "$ref" : "#/definitions/Xpath" + }, + "default" : { + "type" : "string" + }, + "parameterSchema" : { + "$ref" : "#/definitions/Schema" + }, + "_enum" : { + "type" : "array", + "items" : { + "type" : "string" + } + } + } + } ] + }, + "RefProperty" : { + "allOf" : [ { + "$ref" : "#/definitions/Property" + }, { + "type" : "object", + "properties" : { + "simpleRef" : { + "type" : "string" + }, + "get$ref" : { + "type" : "string" + }, + "refFormat" : { + "type" : "string", + "enum" : [ "URL", "RELATIVE", "INTERNAL" ] + } + } + } ] + }, + "RequestBody" : { + "type" : "object", + "properties" : { + "vendorExtensions" : { + "type" : "object", + "additionalProperties" : { + "type" : "object" + } + }, + "description" : { + "type" : "string", + "description" : "A brief description of the request body. This could contain examples of use" + }, + "content" : { + "type" : "object", + "description" : "The content of the request body. The key is a media type or media type range and the value describes it", + "additionalProperties" : { + "$ref" : "#/definitions/MediaType" + } + }, + "required" : { + "type" : "boolean", + "description" : "Determines if the request body is required in the request. Defaults to false" + }, + "get$ref" : { + "type" : "string" + } + } + }, + "Response" : { + "type" : "object", + "properties" : { + "vendorExtensions" : { + "type" : "object", + "additionalProperties" : { + "type" : "object" + } + }, + "description" : { + "type" : "string", + "description" : "A short description of the response" + }, + "headersV3" : { + "type" : "object", + "description" : "Maps a header name to its definition. RFC7230 states header names are case insensitive. If a response header is defined with the name \"Content-Type\", it SHALL be ignored", + "additionalProperties" : { + "$ref" : "#/definitions/Header" + } + }, + "content" : { + "type" : "object", + "description" : "A map containing descriptions of potential response payloads. The key is a media type or media type range and the value describes it", + "additionalProperties" : { + "$ref" : "#/definitions/MediaType" + } + }, + "links" : { + "type" : "object", + "description" : "A map of operations links that can be followed from the response. The key of the map is a short name for the link, following the naming constraints of the names for Component Objects.", + "additionalProperties" : { + "$ref" : "#/definitions/Link" + } + }, + "get$ref" : { + "type" : "string" + } + } + }, + "RestAPI" : { + "allOf" : [ { + "$ref" : "#/definitions/API" + }, { + "type" : "object", + "properties" : { + "vendorExtensions" : { + "type" : "object", + "additionalProperties" : { + "type" : "object" + } + }, + "info" : { + "description" : "Provides metadata about the API", + "$ref" : "#/definitions/Info" + }, + "serviceRegistryDisplayName" : { + "type" : "string", + "description" : "The name of the API in service registry when the API is published to a service registry." + }, + "tags" : { + "type" : "array", + "description" : "A list of tags with additional metadata", + "items" : { + "$ref" : "#/definitions/Tag" + } + }, + "paths" : { + "type" : "object", + "description" : "The available paths and operations for the API", + "additionalProperties" : { + "$ref" : "#/definitions/Path" + } + }, + "externalDocs" : { + "type" : "array", + "description" : "Additional external documentation", + "items" : { + "$ref" : "#/definitions/ExternalDocs" + } + }, + "servers" : { + "type" : "array", + "description" : "An array of Server Objects, which provide connectivity information to a target server", + "items" : { + "$ref" : "#/definitions/Server" + } + }, + "components" : { + "description" : "An element to hold various schemas for the specification", + "$ref" : "#/definitions/Components" + }, + "apiTags" : { + "type" : "array", + "items" : { + "type" : "string" + } + } + } + } ] + }, + "RestEnabledPath" : { + "type" : "object", + "properties" : { + "vendorExtensions" : { + "type" : "object", + "additionalProperties" : { + "type" : "object" + } + }, + "get" : { + "description" : "A definition of a GET operation on this path", + "$ref" : "#/definitions/Operation" + }, + "put" : { + "description" : "A definition of a PUT operation on this path", + "$ref" : "#/definitions/Operation" + }, + "post" : { + "description" : "A definition of a POST operation on this path", + "$ref" : "#/definitions/Operation" + }, + "head" : { + "description" : "A definition of a HEAD operation on this path", + "$ref" : "#/definitions/Operation" + }, + "delete" : { + "description" : "A definition of a DELETE operation on this path", + "$ref" : "#/definitions/Operation" + }, + "patch" : { + "description" : "A definition of a PATCH operation on this path", + "$ref" : "#/definitions/Operation" + }, + "options" : { + "description" : "A definition of a OPTIONS operation on this path", + "$ref" : "#/definitions/Operation" + }, + "trace" : { + "description" : "A definition of a TRACE operation on this path", + "$ref" : "#/definitions/Operation" + }, + "parameters" : { + "type" : "array", + "description" : "A list of parameters that are applicable for all the operations described under this path. These parameters can be overridden at the operation level, but cannot be removed there", + "items" : { + "type" : "object" + } + }, + "scopes" : { + "type" : "array", + "items" : { + "type" : "string" + } + }, + "tags" : { + "type" : "array", + "items" : { + "type" : "string" + } + }, + "displayName" : { + "type" : "string" + }, + "description" : { + "type" : "string", + "description" : "An optional, string description, intended to apply to all operations in this path" + }, + "enabled" : { + "type" : "boolean" + }, + "get$ref" : { + "type" : "string", + "description" : "Allows for an external definition of this path item" + }, + "summary" : { + "type" : "string", + "description" : "An optional, string summary, intended to apply to all operations in this path" + }, + "name" : { + "type" : "string" + }, + "invokePath" : { + "type" : "string" + } + } + }, + "SOAPAPI" : { + "allOf" : [ { + "$ref" : "#/definitions/API" + }, { + "type" : "object", + "properties" : { + "wsdl" : { + "type" : "string" + }, + "baseWsdlUri" : { + "type" : "string" + }, + "nativeUri" : { + "type" : "array", + "uniqueItems" : true, + "items" : { + "type" : "string" + } + }, + "rootFileFolder" : { + "type" : "string" + }, + "serviceName" : { + "type" : "string" + }, + "operationsInfo" : { + "type" : "array", + "uniqueItems" : true, + "items" : { + "$ref" : "#/definitions/SOAPOperation" + } + }, + "serviceRegistryDisplayName" : { + "type" : "string", + "description" : "The name of the API in service registry when the API is published to a service registry." + }, + "operationPolicies" : { + "type" : "object", + "additionalProperties" : { + "type" : "string" + } + }, + "isRESTInvokeEnabled" : { + "type" : "boolean" + }, + "tags" : { + "type" : "array", + "items" : { + "$ref" : "#/definitions/Tag" + } + }, + "apiTags" : { + "type" : "array", + "items" : { + "type" : "string" + } + }, + "primaryEndpoint" : { + "type" : "object", + "additionalProperties" : { + "type" : "boolean" + } + } + } + } ] + }, + "SOAPBinding" : { + "type" : "object", + "properties" : { + "name" : { + "type" : "string" + }, + "type" : { + "type" : "string" + }, + "specifier" : { + "type" : "string" + }, + "interFace" : { + "$ref" : "#/definitions/SOAPInterface" + }, + "inputMessage" : { + "type" : "string" + }, + "outputMessage" : { + "type" : "string" + }, + "faultMessages" : { + "type" : "array", + "items" : { + "type" : "string" + } + } + } + }, + "SOAPInterface" : { + "type" : "object", + "properties" : { + "name" : { + "type" : "string" + }, + "operations" : { + "type" : "array", + "items" : { + "$ref" : "#/definitions/SOAPOperation" + } + } + } + }, + "SOAPOperation" : { + "type" : "object", + "properties" : { + "name" : { + "type" : "string" + }, + "namespace" : { + "type" : "string" + }, + "enabled" : { + "type" : "boolean" + }, + "bindings" : { + "type" : "array", + "items" : { + "$ref" : "#/definitions/SOAPBinding" + } + }, + "mockedResponses" : { + "type" : "object", + "additionalProperties" : { + "$ref" : "#/definitions/MockedResponse" + } + }, + "mockedConditionsBasedCustomResponsesList" : { + "type" : "array", + "items" : { + "$ref" : "#/definitions/MockedConditionsBasedCustomResponse" + } + }, + "defined" : { + "type" : "boolean" + }, + "soapAction" : { + "type" : "string" + }, + "isRESTInvokeEnabled" : { + "type" : "boolean" + }, + "restEnabledPath" : { + "$ref" : "#/definitions/RestEnabledPath" + }, + "scopes" : { + "type" : "array", + "items" : { + "type" : "string" + } + }, + "tags" : { + "type" : "array", + "items" : { + "type" : "string" + } + } + } + }, + "Schema" : { + "type" : "object", + "discriminator" : "type", + "properties" : { + "vendorExtensions" : { + "type" : "object", + "additionalProperties" : { + "type" : "object" + } + }, + "name" : { + "type" : "string", + "description" : "User defined name for the property" + }, + "title" : { + "type" : "string", + "description" : "User defined title for the property" + }, + "multipleOf" : { + "type" : "number", + "description" : "Numbers can be restricted to a multiple of a given number, using the multipleOf keyword. It may be set to any positive number." + }, + "maximum" : { + "type" : "number", + "description" : "Upper limit in the ranges of numbers, (or exclusiveMinimum and exclusiveMaximum for expressing exclusive range)" + }, + "exclusiveMaximum" : { + "type" : "boolean", + "description" : "Indicate whether maximum are exclusive of the value" + }, + "minimum" : { + "type" : "number", + "description" : "Lower limit in the ranges of numbers" + }, + "exclusiveMinimum" : { + "type" : "boolean", + "description" : "Indicate whether minimum are exclusive of the value" + }, + "maxLength" : { + "type" : "integer", + "format" : "int32", + "description" : "The maximum length of a string can be constrained using the minLength" + }, + "minLength" : { + "type" : "integer", + "format" : "int32", + "description" : "The minimum length of a string can be constrained using the minLength" + }, + "pattern" : { + "type" : "string", + "description" : "The pattern keyword is used to restrict a string to a particular regular expression. The regular expression syntax is the one defined in JavaScript (ECMA 262 specifically)" + }, + "maxItems" : { + "type" : "integer", + "format" : "int32", + "description" : "The maximum length of the array can be specified" + }, + "minItems" : { + "type" : "integer", + "format" : "int32", + "description" : "The minimum length of the array can be specified" + }, + "uniqueItems" : { + "type" : "boolean", + "description" : "A schema can ensure that each of the items in an array is unique. Simply set the uniqueItems keyword to true" + }, + "maxProperties" : { + "type" : "integer", + "format" : "int32", + "description" : "The maximum number of properties on an object can be restricted" + }, + "minProperties" : { + "type" : "integer", + "format" : "int32", + "description" : "The minimum number of properties on an object can be restricted" + }, + "required" : { + "type" : "array", + "description" : "By default, the properties defined by the properties keyword are not required. However, one can provide a list of required properties using the required keyword.\nThe required keyword takes an array of zero or more strings. Each of these strings must be unique.", + "items" : { + "type" : "string" + } + }, + "type" : { + "type" : "string", + "description" : "It specifies the data type for a schema" + }, + "not" : { + "description" : "Must not be valid against the given schema", + "$ref" : "#/definitions/Schema" + }, + "properties" : { + "type" : "object", + "description" : "The properties (key-value pairs) on an object are defined using the properties keyword. The value of properties is an object, where each key is the name of a property and each value is of type schema used to validate that property", + "additionalProperties" : { + "$ref" : "#/definitions/Schema" + } + }, + "additionalProperties" : { + "description" : "Value can be boolean or object. Inline or referenced schema MUST be of a Schema Object and not a standard JSON Schema. Consistent with JSON Schema, additionalProperties defaults to true", + "$ref" : "#/definitions/Schema" + }, + "description" : { + "type" : "string", + "description" : "Provide a more lengthy explanation about the purpose of the data described by the schema" + }, + "format" : { + "type" : "string", + "description" : "The format keyword allows for basic semantic validation on certain kinds of string values that are commonly used" + }, + "get$ref" : { + "type" : "string" + }, + "nullable" : { + "type" : "boolean", + "description" : "Allows sending a null value for the defined schema. Default value is false" + }, + "readOnly" : { + "type" : "boolean", + "description" : "Relevant only for Schema \"properties\" definitions. Declares the property as \"read only\". This means that it MAY be sent as part of a response but SHOULD NOT be sent as part of the request. If the property is marked as readOnly being true and is in the required list, the required will take effect on the response only. A property MUST NOT be marked as both readOnly and writeOnly being true. Default value is false" + }, + "writeOnly" : { + "type" : "boolean", + "description" : "Relevant only for Schema \"properties\" definitions. Declares the property as \"write only\". Therefore, it MAY be sent as part of a request but SHOULD NOT be sent as part of the response. If the property is marked as writeOnly being true and is in the required list, the required will take effect on the request only. A property MUST NOT be marked as both readOnly and writeOnly being true. Default value is false" + }, + "example" : { + "type" : "object", + "description" : "A free-form property to include an example of an instance for this schema. To represent examples that cannot be naturally represented in JSON or YAML, a string value can be used to contain the example with escaping where necessary" + }, + "externalDocs" : { + "description" : "Additional external documentation for this schema", + "$ref" : "#/definitions/ExternalDocs" + }, + "deprecated" : { + "type" : "boolean", + "description" : "Specifies that a schema is deprecated and SHOULD be transitioned out of usage. Default value is false" + }, + "xml" : { + "description" : "This MAY be used only on properties schemas. It has no effect on root schemas. Adds additional metadata to describe the XML representation of this property", + "$ref" : "#/definitions/Xml" + }, + "enum" : { + "type" : "array", + "items" : { + "type" : "object" + } + }, + "default" : { + "type" : "object" + } + } + }, + "Scope" : { + "type" : "object", + "properties" : { + "name" : { + "type" : "string" + }, + "description" : { + "type" : "string" + }, + "getoAuth2ScopeName" : { + "type" : "string" + }, + "policies" : { + "type" : "array", + "items" : { + "type" : "string" + } + }, + "mashedUpAPI" : { + "type" : "boolean" + } + } + }, + "SecurityScheme" : { + "type" : "object", + "properties" : { + "vendorExtensions" : { + "type" : "object", + "additionalProperties" : { + "type" : "object" + } + }, + "type" : { + "type" : "string", + "enum" : [ "APIKEY", "HTTP", "OAUTH2", "OPENIDCONNECT" ] + }, + "description" : { + "type" : "string" + }, + "name" : { + "type" : "string" + }, + "get$ref" : { + "type" : "string" + }, + "in" : { + "type" : "string", + "enum" : [ "COOKIE", "HEADER", "QUERY" ] + }, + "scheme" : { + "type" : "string" + }, + "bearerFormat" : { + "type" : "string" + }, + "flows" : { + "$ref" : "#/definitions/OAuthFlows" + }, + "openIdConnectUrl" : { + "type" : "string" + } + } + }, + "SecuritySchemeDescriptor" : { + "type" : "object", + "properties" : { + "headers" : { + "type" : "object", + "additionalProperties" : { + "type" : "object" + } + }, + "queryParameters" : { + "type" : "object", + "additionalProperties" : { + "type" : "object" + } + }, + "responses" : { + "type" : "object", + "additionalProperties" : { + "type" : "object" + } + } + } + }, + "Server" : { + "type" : "object", + "properties" : { + "vendorExtensions" : { + "type" : "object", + "additionalProperties" : { + "type" : "object" + } + }, + "url" : { + "type" : "string", + "description" : "A URL to the target host. This URL supports Server Variables and MAY be relative, to indicate that the host location is relative to the location where the OpenAPI document is being served. Variable substitutions will be made when a variable is named in {brackets}" + }, + "description" : { + "type" : "string", + "description" : "An optional string describing the host designated by the URL" + }, + "variables" : { + "type" : "object", + "description" : "A map between a variable name and its value. The value is used for substitution in the server's URL template", + "additionalProperties" : { + "$ref" : "#/definitions/ServerVariable" + } + } + } + }, + "ServerVariable" : { + "type" : "object", + "properties" : { + "vendorExtensions" : { + "type" : "object", + "additionalProperties" : { + "type" : "object" + } + }, + "description" : { + "type" : "string", + "description" : "An optional description for the server variable" + }, + "enum" : { + "type" : "array", + "items" : { + "type" : "string" + } + }, + "default" : { + "type" : "string" + } + } + }, + "StringProperty" : { + "allOf" : [ { + "$ref" : "#/definitions/Property" + }, { + "type" : "object", + "properties" : { + "minLength" : { + "type" : "integer", + "format" : "int32" + }, + "maxLength" : { + "type" : "integer", + "format" : "int32" + }, + "pattern" : { + "type" : "string" + }, + "enum" : { + "type" : "array", + "items" : { + "type" : "string" + } + }, + "default" : { + "type" : "string" + } + } + } ] + }, + "StringSchema" : { + "allOf" : [ { + "$ref" : "#/definitions/Schema" + }, { + "type" : "object", + "properties" : { + "type" : { + "type" : "string" + }, + "enum" : { + "type" : "array", + "items" : { + "type" : "string" + } + }, + "default" : { + "type" : "string" + } + } + } ] + }, + "StringSchemaModel" : { + "allOf" : [ { + "$ref" : "#/definitions/Model" + }, { + "type" : "object", + "properties" : { + "schema" : { + "type" : "string" + } + } + } ] + }, + "StringSchemaProperty" : { + "allOf" : [ { + "$ref" : "#/definitions/Property" + }, { + "type" : "object", + "properties" : { + "schema" : { + "type" : "string" + } + } + } ] + }, + "Tag" : { + "type" : "object", + "properties" : { + "vendorExtensions" : { + "type" : "object", + "additionalProperties" : { + "type" : "object" + } + }, + "name" : { + "type" : "string", + "description" : "The name of the tag" + }, + "description" : { + "type" : "string", + "description" : "A short description for the tag" + }, + "externalDocs" : { + "description" : "Additional external documentation for this tag", + "$ref" : "#/definitions/ExternalDocs" + } + } + }, + "Version" : { + "type" : "object", + "properties" : { + "versionNumber" : { + "type" : "string" + }, + "apiId" : { + "type" : "string" + } + } + }, + "WebsocketAPI" : { + "allOf" : [ { + "$ref" : "#/definitions/API" + }, { + "type" : "object", + "properties" : { + "nativeUri" : { + "type" : "array", + "uniqueItems" : true, + "items" : { + "type" : "string" + } + }, + "supportedSubProtocols" : { + "type" : "array", + "items" : { + "type" : "string" + } + }, + "tags" : { + "type" : "array", + "items" : { + "$ref" : "#/definitions/Tag" + } + }, + "externalDocs" : { + "type" : "array", + "items" : { + "$ref" : "#/definitions/ExternalDocs" + } + }, + "messages" : { + "type" : "array", + "items" : { + "$ref" : "#/definitions/MessageFrame" + } + }, + "parameters" : { + "type" : "object", + "additionalProperties" : { + "$ref" : "#/definitions/AbstractParameter" + } + }, + "apiTags" : { + "type" : "array", + "items" : { + "type" : "string" + } + } + } + } ] + }, + "Xml" : { + "type" : "object", + "properties" : { + "vendorExtensions" : { + "type" : "object", + "additionalProperties" : { + "type" : "object" + } + }, + "name" : { + "type" : "string", + "description" : "Replaces the name of the element/attribute used for the described schema property. When defined within items, it will affect the name of the individual XML elements within the list. When defined alongside type being array (outside the items), it will affect the wrapping element and only if wrapped is true. If wrapped is false, it will be ignored" + }, + "namespace" : { + "type" : "string", + "description" : "The URI of the namespace definition" + }, + "prefix" : { + "type" : "string", + "description" : "The prefix to be used for the name" + }, + "attribute" : { + "type" : "boolean", + "description" : "Declares whether the property definition translates to an attribute instead of an element. Default value is false" + }, + "wrapped" : { + "type" : "boolean", + "description" : "MAY be used only for an array definition. Signifies whether the array is wrapped (for example, ) or unwrapped (). Default value is false" + } + } + }, + "Xpath" : { + "type" : "object", + "properties" : { + "xpath" : { + "type" : "string" + }, + "namespaces" : { + "type" : "array", + "items" : { + "$ref" : "#/definitions/Namespaces" + } + } + } + }, + "APIAccessKey" : { + "type" : "object", + "properties" : { + "apiAccessKey" : { + "type" : "string", + "description" : "API access key" + }, + "expirationInterval" : { + "type" : "string", + "description" : "expiration interval of the api key" + }, + "expirationDate" : { + "type" : "string", + "description" : "expiration date of the api key" + } + } + }, + "Application" : { + "type" : "object", + "properties" : { + "applicationID" : { + "type" : "string", + "description" : "unique identifier of an application" + }, + "name" : { + "type" : "string", + "description" : "name of the application" + }, + "description" : { + "type" : "string", + "description" : "description of the application" + }, + "owner" : { + "type" : "string", + "description" : "owner of the application" + }, + "identifiers" : { + "type" : "array", + "description" : "list of all application identifiers", + "items" : { + "$ref" : "#/definitions/ApplicationIdentifier" + } + }, + "contactEmails" : { + "type" : "array", + "description" : "list of email contacts", + "items" : { + "type" : "string" + } + }, + "iconbyteArray" : { + "type" : "string", + "description" : "application icon byte array" + }, + "accessTokens" : { + "description" : "access tokens associated with the application", + "$ref" : "#/definitions/ApplicationToken" + }, + "creationDate" : { + "type" : "string", + "description" : "application creation time" + }, + "lastModified" : { + "type" : "string", + "description" : "last modified time of the application" + }, + "lastUpdated" : { + "type" : "integer", + "format" : "int64", + "description" : "last modified time of the application in milliseconds" + }, + "siteURLs" : { + "type" : "array", + "description" : "list of all site URLs", + "items" : { + "type" : "string" + } + }, + "jsOrigins" : { + "type" : "array", + "description" : "list of all javascript origins", + "items" : { + "type" : "string" + } + }, + "version" : { + "type" : "string" + }, + "isSuspended" : { + "type" : "boolean", + "description" : "holds the suspended state of an application" + }, + "authStrategyIds" : { + "type" : "array", + "uniqueItems" : true, + "items" : { + "type" : "string" + } + }, + "subscription" : { + "type" : "boolean" + } + } + }, + "ApplicationIdentifier" : { + "type" : "object", + "properties" : { + "id" : { + "type" : "string", + "description" : "unique identifier of the application identifier" + }, + "key" : { + "type" : "string", + "description" : "identifier type, one of [apiKey, httpBasicAuth, token,kerberosToken,oAuth2Token,openIdClaims,jwtClaims,wssecX509Token,wssecUsernameToken, httpsCertificate,payloadElement,hostNameAddress, ipAddressRange, XPathExpression,partnerId]" + }, + "name" : { + "type" : "string", + "description" : "name of the identifier" + }, + "value" : { + "type" : "array", + "description" : "list of identifier values", + "items" : { + "type" : "string" + } + } + } + }, + "ApplicationToken" : { + "type" : "object", + "properties" : { + "apiAccessKey" : { + "description" : "the API KEY access credentials", + "$ref" : "#/definitions/APIAccessKey" + }, + "oauth2Token" : { + "$ref" : "#/definitions/OAuth2Token" + } + } + }, + "OAuth2Token" : { + "type" : "object", + "properties" : { + "type" : { + "type" : "string", + "description" : "type of the oauth2 client" + }, + "clientId" : { + "type" : "string", + "description" : "unique identifier of the oauth2 client" + }, + "clientSecret" : { + "type" : "string", + "description" : "the client secret" + }, + "clientName" : { + "type" : "string", + "description" : "the name of the client" + }, + "scopes" : { + "type" : "array", + "description" : "the scopes associated with the client", + "items" : { + "type" : "string" + } + }, + "expirationInterval" : { + "type" : "string", + "description" : "the expiration interval" + }, + "refreshCount" : { + "type" : "string", + "description" : "number of times an access token can be refreshed" + }, + "redirectUris" : { + "type" : "array", + "description" : "list of redirect uris", + "items" : { + "type" : "string" + } + } + } + }, + "CommandInfo" : { + "type" : "object", + "properties" : { + "commandName" : { + "type" : "string" + }, + "commandClass" : { + "type" : "string" + } + } + }, + "DataFlavor" : { + "type" : "object", + "properties" : { + "mimeType" : { + "type" : "string" + }, + "humanPresentableName" : { + "type" : "string" + }, + "primaryType" : { + "type" : "string" + }, + "subType" : { + "type" : "string" + }, + "mimeTypeSerializedObject" : { + "type" : "boolean" + }, + "defaultRepresentationClassAsString" : { + "type" : "string" + }, + "representationClassInputStream" : { + "type" : "boolean" + }, + "representationClassReader" : { + "type" : "boolean" + }, + "representationClassCharBuffer" : { + "type" : "boolean" + }, + "representationClassByteBuffer" : { + "type" : "boolean" + }, + "representationClassSerializable" : { + "type" : "boolean" + }, + "representationClassRemote" : { + "type" : "boolean" + }, + "flavorSerializedObjectType" : { + "type" : "boolean" + }, + "flavorRemoteObjectType" : { + "type" : "boolean" + }, + "flavorJavaFileListType" : { + "type" : "boolean" + }, + "flavorTextType" : { + "type" : "boolean" + } + } + }, + "DataHandler" : { + "type" : "object", + "properties" : { + "dataSource" : { + "$ref" : "#/definitions/DataSource" + }, + "contentType" : { + "type" : "string" + }, + "outputStream" : { + "$ref" : "#/definitions/OutputStream" + }, + "transferDataFlavors" : { + "type" : "array", + "items" : { + "$ref" : "#/definitions/DataFlavor" + } + }, + "preferredCommands" : { + "type" : "array", + "items" : { + "$ref" : "#/definitions/CommandInfo" + } + }, + "allCommands" : { + "type" : "array", + "items" : { + "$ref" : "#/definitions/CommandInfo" + } + }, + "name" : { + "type" : "string" + }, + "inputStream" : { + "$ref" : "#/definitions/InputStream" + }, + "content" : { + "type" : "object" + } + } + }, + "DataSource" : { + "type" : "object", + "properties" : { + "contentType" : { + "type" : "string" + }, + "outputStream" : { + "$ref" : "#/definitions/OutputStream" + }, + "name" : { + "type" : "string" + }, + "inputStream" : { + "$ref" : "#/definitions/InputStream" + } + } + }, + "Enumeration" : { + "type" : "object" + }, + "InputStream" : { + "type" : "object" + }, + "Multipart" : { + "type" : "object", + "properties" : { + "contentType" : { + "type" : "string" + }, + "parent" : { + "$ref" : "#/definitions/Part" + }, + "count" : { + "type" : "integer", + "format" : "int32" + } + } + }, + "OutputStream" : { + "type" : "object" + }, + "Part" : { + "type" : "object", + "properties" : { + "contentType" : { + "type" : "string" + }, + "description" : { + "type" : "string" + }, + "fileName" : { + "type" : "string" + }, + "content" : { + "type" : "object" + }, + "disposition" : { + "type" : "string" + }, + "allHeaders" : { + "$ref" : "#/definitions/Enumeration" + }, + "dataHandler" : { + "$ref" : "#/definitions/DataHandler" + }, + "lineCount" : { + "type" : "integer", + "format" : "int32" + }, + "size" : { + "type" : "integer", + "format" : "int32" + }, + "inputStream" : { + "$ref" : "#/definitions/InputStream" + } + } + }, + "APIResponseGetGlobalPolicies" : { + "type" : "object", + "properties" : { + "globalPolicies" : { + "type" : "array", + "items" : { + "type" : "string" + } + } + } + }, + "ScopeInformation" : { + "type" : "object", + "properties" : { + "resourcePath" : { + "type" : "string" + }, + "supportedOperations" : { + "type" : "array", + "items" : { + "type" : "string" + } + } + } + }, + "ScopeResourceIndex" : { + "type" : "object", + "properties" : { + "references" : { + "type" : "array", + "items" : { + "$ref" : "#/definitions/ScopeInformation" + } + }, + "scope" : { + "$ref" : "#/definitions/Scope" + } + } + }, + "AuthorizationValue" : { + "type" : "object", + "properties" : { + "value" : { + "type" : "string" + }, + "type" : { + "type" : "string" + }, + "keyName" : { + "type" : "string" + } + } + }, + "InputAPI" : { + "type" : "object", + "required" : [ "apiName", "type" ], + "properties" : { + "url" : { + "type" : "string", + "description" : "Required when creating an API by importing URL" + }, + "authorizationValue" : { + "description" : "Required when creating an API by importing protected URL", + "$ref" : "#/definitions/AuthorizationValue" + }, + "apiDefinition" : { + "description" : "Required when creating an API from scratch", + "$ref" : "#/definitions/API" + }, + "apiName" : { + "type" : "string" + }, + "apiVersion" : { + "type" : "string" + }, + "apiDescription" : { + "type" : "string" + }, + "maturityState" : { + "type" : "string" + }, + "type" : { + "type" : "string" + }, + "rootFileName" : { + "type" : "string", + "description" : "Required when creating an API by importing protected URL" + } + } + }, + "APIResponseCreate" : { + "type" : "object", + "properties" : { + "api" : { + "$ref" : "#/definitions/GatewayAPI" + }, + "apiId" : { + "type" : "string" + }, + "responseStatus" : { + "type" : "string", + "enum" : [ "SUCCESS", "ERROR", "NOT_FOUND", "BAD_REQUEST", "PARTIAL_SUCCESS" ] + }, + "errorReason" : { + "type" : "string" + } + } + }, + "InputVersion" : { + "type" : "object", + "required" : [ "newApiVersion" ], + "properties" : { + "retainApplications" : { + "type" : "boolean" + }, + "newApiVersion" : { + "type" : "string" + } + } + }, + "APIResponse" : { + "type" : "object", + "properties" : { + "apiId" : { + "type" : "string" + }, + "api" : { + "$ref" : "#/definitions/GatewayAPI" + }, + "responseStatus" : { + "type" : "string", + "enum" : [ "SUCCESS", "ERROR", "NOT_FOUND", "BAD_REQUEST", "PARTIAL_SUCCESS" ] + }, + "errorReason" : { + "type" : "string" + }, + "gatewayEndPoints" : { + "type" : "array", + "items" : { + "type" : "string" + } + }, + "reason" : { + "type" : "object" + }, + "pubSOAPFlavor" : { + "type" : "string" + }, + "portalGatewayDataEntries" : { + "type" : "object" + } + } + }, + "InputPublish" : { + "type" : "object", + "properties" : { + "communities" : { + "type" : "array", + "items" : { + "type" : "string" + } + }, + "endpoints" : { + "type" : "array", + "items" : { + "type" : "string" + } + }, + "portalGatewayId" : { + "type" : "string" + } + } + }, + "Endpoints" : { + "type" : "object", + "properties" : { + "gatewayEndpoint" : { + "type" : "string", + "description" : "API's access endpoint exposed in API Gateway." + }, + "status" : { + "type" : "string", + "description" : "Status of the API endpoint. Shows whether this endpoint is published to the service registry.Possible values are NEW, PUBLISHED and SUSPENDED. NEW represents the endpoint is not published to the service registry. PUBLISHED represents the endpoint is published to the service registry. SUSPENDED represents the endpoint is published to service registry, but is not currently active (for example: during deactivation of API or shutdown of API Gateway or disabling ports).", + "enum" : [ "NEW", "PUBLISHED", "SUSPENDED" ] + } + }, + "description" : "This defines the service registry publish information for API Gateway's API endpoints" + }, + "PublishPayload" : { + "type" : "object", + "properties" : { + "apiId" : { + "type" : "string", + "description" : "API id for the API to be published. This field is required. The API will be published to the service registry with the value configured in 'Service registry display name' field of the API" + }, + "serviceRegistryPublishInfo" : { + "type" : "array", + "description" : "List of service registry publish information for the API. Each element of the list contains the publish information of the API for one service registry.", + "items" : { + "$ref" : "#/definitions/ServiceRegistryPublishInfo" + } + } + } + }, + "ServiceRegistryPublishGetResponse" : { + "type" : "object", + "properties" : { + "publishInfo" : { + "description" : "Contains the service registry publish information for the API.", + "$ref" : "#/definitions/PublishPayload" + } + } + }, + "ServiceRegistryPublishInfo" : { + "type" : "object", + "properties" : { + "serviceRegistryId" : { + "type" : "string", + "description" : "Uddi key of the service registry created in API Gateway. This field is required." + }, + "status" : { + "type" : "string", + "description" : "Publish Status of the API for this service registry. This field is shown only in response and should not be sent by clients in requests. Possible values are NEW, PUBLISHED and SUSPENDED. NEW represents the API is not published to the service registry. PUBLISHED represents the API is published to the service registry. SUSPENDED represents the API is published to service registry, but is not currently active (during deactivation of API or shutdown of API Gateway).", + "enum" : [ "NEW", "PUBLISHED", "SUSPENDED" ] + }, + "name" : { + "type" : "string", + "description" : "Name of the service registry. This field is shown only in response and should not be sent by clients in requests. Only the serviceRegistryId is considered for uniquely identifying the registry." + }, + "gatewayEndpoints" : { + "type" : "array", + "description" : "List of API endpoints of the API. Each element contains an endpoint and the information about the publish status of that endpoint for the current service registry.", + "uniqueItems" : true, + "items" : { + "$ref" : "#/definitions/Endpoints" + } + } + } + }, + "InputServiceRegistryPublish" : { + "type" : "object", + "properties" : { + "publishInfo" : { + "description" : "This contains the publish information for one API. This is used when publishing exactly one API to one or more service registries.", + "$ref" : "#/definitions/PublishPayload" + }, + "publishInfos" : { + "type" : "array", + "description" : "This contains the publish information for multiple APIs. Required when publishing more than one API to one or more service registries.", + "items" : { + "$ref" : "#/definitions/PublishPayload" + } + } + } + }, + "PublishResponse" : { + "type" : "object", + "properties" : { + "apiId" : { + "type" : "string", + "description" : "API id of the API published." + }, + "apiName" : { + "type" : "string", + "description" : "API name of the API published." + }, + "apiVersion" : { + "type" : "string", + "description" : "API version of the API published." + }, + "serviceRegistryPublishResponses" : { + "type" : "array", + "description" : "Contains publish status of the API for each service registry in the request.", + "items" : { + "$ref" : "#/definitions/ServiceRegistryPublishResponse" + } + } + } + }, + "ServiceRegistryPublishPutResponse" : { + "type" : "object", + "properties" : { + "publishResponse" : { + "description" : "This contains the service registry publish status for requests publishing exactly one API to one or more service registries.", + "$ref" : "#/definitions/PublishResponse" + }, + "publishResponses" : { + "type" : "array", + "description" : "This contains the service registry publish status for requests publishing more than one API to one or more service registries.", + "items" : { + "$ref" : "#/definitions/PublishResponse" + } + } + } + }, + "ServiceRegistryPublishResponse" : { + "type" : "object", + "properties" : { + "serviceRegistryId" : { + "type" : "string", + "description" : "Id i.e, UDDI key of the service registry" + }, + "serviceRegistryName" : { + "type" : "string", + "description" : "Name of the service registry" + }, + "status" : { + "type" : "string", + "description" : "Publish Status of the API for this service registry. Possible values are NEW, PUBLISHED and SUSPENDED. NEW represents the API is not published to the service registry. PUBLISHED represents the API is published to the service registry. SUSPENDED represents the API is published to service registry, but is not currently active (during deactivation of API or shutdown of API Gateway).", + "enum" : [ "NEW", "PUBLISHED", "SUSPENDED" ] + }, + "gatewayEndpoints" : { + "type" : "array", + "description" : "List of API endpoints of the API. Each element contains an endpoint and the information about the publish status of that endpoint for the current service registry.", + "uniqueItems" : true, + "items" : { + "$ref" : "#/definitions/Endpoints" + } + }, + "success" : { + "type" : "boolean", + "description" : "Represents whether the publish of API to the service registry is success. Possible values: true/false" + }, + "description" : { + "type" : "string", + "description" : "Represents the status of the publish operation of the API to the service registry eg: Publish successful, Publish failed, etc" + }, + "failureReason" : { + "type" : "string", + "description" : "Provides the reason for the failure when the publish operation is not successful" + } + } + }, + "InputServiceRegistryUnpublish" : { + "type" : "object", + "properties" : { + "unpublishInfo" : { + "description" : "This contains the unpublish information for one API. This is used when unpublishing exactly one API from one or more service registries.", + "$ref" : "#/definitions/UnpublishInfo" + }, + "unpublishInfos" : { + "type" : "array", + "description" : "This contains the unpublish information for multiple APIs. Required when publishing more than one API from one or more service registries.", + "items" : { + "$ref" : "#/definitions/UnpublishInfo" + } + } + } + }, + "UnpublishInfo" : { + "type" : "object", + "properties" : { + "apiId" : { + "type" : "string", + "description" : "API id for the API to be unpublished. This field is required." + }, + "serviceRegistryIds" : { + "type" : "array", + "description" : "List of ids of the service registries from which the API has to be unpublished. This field is required.", + "items" : { + "type" : "string" + } + } + } + }, + "ServiceRegistryUnpublishPutResponse" : { + "type" : "object", + "properties" : { + "unpublishResponse" : { + "description" : "This contains the service registry unpublish status for requests unpublishing exactly one API from one or more service registries.", + "$ref" : "#/definitions/UnpublishResponse" + }, + "unpublishResponses" : { + "type" : "array", + "description" : "This contains the service registry unpublish status for requests unpublishing more than one API from one or more service registries.", + "items" : { + "$ref" : "#/definitions/UnpublishResponse" + } + } + } + }, + "ServiceRegistryUnpublishResponse" : { + "type" : "object", + "properties" : { + "serviceRegistryId" : { + "type" : "string", + "description" : "Id i.e, UDDI key of the service registry" + }, + "serviceRegistryName" : { + "type" : "string", + "description" : "Name of the service registry" + }, + "success" : { + "type" : "boolean", + "description" : "Represents whether the unpublish operation of API from the service registry is success. Possible values: true/false" + }, + "description" : { + "type" : "string", + "description" : "Represents the status of the unpublish operation of the API from the service registry eg: Unpublish successful, Unpublish failed, etc" + }, + "failureReason" : { + "type" : "string", + "description" : "Provides the reason for the failure when the unpublish operation is not successful" + } + } + }, + "UnpublishResponse" : { + "type" : "object", + "properties" : { + "apiId" : { + "type" : "string", + "description" : "API id of the API published." + }, + "apiName" : { + "type" : "string", + "description" : "API name of the API published." + }, + "serviceRegistryUnpublishResponses" : { + "type" : "array", + "description" : "Contains unpublish status of the API for each service registry in the request.", + "items" : { + "$ref" : "#/definitions/ServiceRegistryUnpublishResponse" + } + }, + "apiVersion" : { + "type" : "string", + "description" : "API version of the API published." + } + } + } + } +} \ No newline at end of file diff --git a/apigatewayservices/APIGatewayTransactionalEvent.json b/apigatewayservices/APIGatewayTransactionalEvent.json new file mode 100644 index 0000000..a94966e --- /dev/null +++ b/apigatewayservices/APIGatewayTransactionalEvent.json @@ -0,0 +1,437 @@ +{ + "swagger" : "2.0", + "info" : { + "description" : "API Gateway Transactions service allows you to query the API transactions. API Transactions are generated (as events) everytime an API invocation happens. API Transactions may contain the details about the invocation such as request/response headers, request/response payloads, consumer applications and so on. API Provider may choose to store these events to one or more destinations by using Log Invocation Policy. API Gateway provides different destination options to the API Provider (like API Gateway own data store, relational databases, Elastic Search etc.) where he/she would like to store these events to. By default, API Gateway is chosen as a storage destination for these events.\n\nIt is important to note that this REST API queries for the transactions data only from the API Gateway's default datastore.\n\nThere are multiple use cases for these transactions data. For instance, you can integrate this API with your billing system wherein these transactional data can be used to compute the usage history of your API for different consumers for monetization usecases. In other scenarios, the data extracted from this service can be used for custom report generation.Any valid API Gateway user can consume this REST service.", + "version" : "10.3", + "title" : "API Gateway Transactions Data Service" + }, + "host" : "localhost:5555", + "basePath" : "/rest/apigateway", + "schemes" : [ "http" ], + "consumes" : [ "plain/text" ], + "produces" : [ "application/json" ], + "paths" : { + "/transactionalEvents/_search" : { + "get" : { + "description" : "This method can be used to retrieve the transaction events for a given API/Application/Plan/Package for a specific period of time. Multiple request parameters of this method provide options to specify the request criteria to match the expected result and most of these input parameters supports regular expression in their values. Along with the mandatory parameters - fromDate and toDate, any one of the other filter criteria should be passed in the request.", + "operationId" : "getTransactions", + "consumes" : [ "application/json" ], + "produces" : [ "application/json" ], + "parameters" : [ { + "name" : "apiName", + "in" : "query", + "description" : "The name of the API for which the invocation details is required.The exact name must be provided or regular expressions can be used like API_.*", + "required" : false, + "type" : "string", + "x-example" : "apiName=PetStore" + }, { + "name" : "apiVersion", + "in" : "query", + "description" : "The version of the API", + "required" : false, + "type" : "string", + "x-example" : "apiVersion=1.0" + }, { + "name" : "apiId", + "in" : "query", + "description" : "The system generated id for an API.The id of an can be retrieved from the API details screen", + "required" : false, + "type" : "string", + "x-example" : "apiId=105e99ee-0e1b-4afa-8ff3-4322cf296558" + }, { + "name" : "applicationName", + "in" : "query", + "description" : "The name of the Application for which the invocation details is required.The exact name must be provided or regular expressions can be used like APP_.*", + "required" : false, + "type" : "string", + "x-example" : "applicationName=HostBasedIdentifier" + }, { + "name" : "applicationId", + "in" : "query", + "description" : "The system generated id for an Application.The id of an can be retrieved from the Application details screen", + "required" : false, + "type" : "string", + "x-example" : "applicationId=995e99ee-0e1b-4afa-8ff3-4322cf296587" + }, { + "name" : "packageName", + "in" : "query", + "description" : "The name of the Package for which the invocation details is required.The exact name must be provided or regular expressions can be used like Package_.*", + "required" : false, + "type" : "string", + "x-example" : "pakageName=TravelPackage" + }, { + "name" : "packageId", + "in" : "query", + "description" : "The system generated id for a Package.The id of an can be retrieved from the Package details screen", + "required" : false, + "type" : "string", + "x-example" : "packageId=685023ee-0e1b-4afa-8ff3-4322cf296566" + }, { + "name" : "planName", + "in" : "query", + "description" : "The name of the Plan for which the invocation details is required.The exact name must be provided or regular expressions can be used like Plan_.*", + "required" : false, + "type" : "string", + "x-example" : "planName=GoldPlan" + }, { + "name" : "planId", + "in" : "query", + "description" : "The system generated id for a Plan.The id of an can be retrieved from the Plan details screen", + "required" : false, + "type" : "string", + "x-example" : "planId=785e99ee-0e1b-4afa-8ff3-4322cf296566" + }, { + "name" : "from", + "in" : "query", + "description" : "This parameter specifies the index from which the data has to be retrieved from the store. It is mainly used during pagination where the data is retrieved in batches", + "required" : false, + "type" : "integer", + "format" : "int32", + "x-example" : "from=0" + }, { + "name" : "size", + "in" : "query", + "description" : "This parameter specifies the number of records that should be present in the response. This can be combined with the parameter - from to get the records in batches during pagination.", + "required" : false, + "type" : "integer", + "format" : "int32", + "x-example" : "size=1" + }, { + "name" : "fromDate", + "in" : "query", + "description" : "This is the date from which the invocation details has to be retrieved for the matching filter criteria.It is a mandatory parameter and it should be of the format YYYY-MM-DD. Regular expression support is not available for this parameter", + "required" : true, + "type" : "string", + "format" : "date", + "x-example" : "fromDate=2017-02-26" + }, { + "name" : "toDate", + "in" : "query", + "description" : "This is the date to which the invocation details has to be retrieved for the matching filter criteria.It is a mandatory parameter and it should be of the format YYYY-MM-DD. Regular expression support is not available for this parameter", + "required" : true, + "type" : "string", + "format" : "date", + "x-example" : "toDate=2017-02-27" + } ], + "responses" : { + "200" : { + "description" : "Array of transactional events.", + "schema" : { + "$ref" : "#/definitions/TransactionEvent" + }, + "examples" : { + "application/json" : "{\r\n \"transaction\": [\r\n {\r\n \"creationDate\": 1487229288461,\r\n \"apiName\": \"PetStoreTest\",\r\n \"apiVersion\": \"1.0.0\",\r\n \"apiId\": \"73c40484-678a-4fb0-a56c-21119869e5f4\",\r\n \"totalTime\": 1386,\r\n \"providerTime\": 1336,\r\n \"applicationName\": \"testApp\",\r\n \"applicationId\": \"10727b01-e13a-4c5d-b39e-c5c336101e21\",\r\n \"status\": \"SUCCESS\",\r\n \"totalDataSize\": 1341,\r\n \"responseCode\": \"200\",\r\n \"operationName\": \"/pet\",\r\n \"httpMethod\": \"post\",\r\n \"packageName\": \"TestPackage\",\r\n \"packageId\": \"7aafd5c8-3ea4-454f-ae78-d9ffc328672a\",\r\n \"planName\": \"TestPlan\",\r\n \"planId\": \"70369925-27f9-4c8a-b078-ca057516735e\"\r\n }\r\n ]\r\n}" + } + }, + "401" : { + "description" : "This response indicates that invalid credentials have been provided for the request." + }, + "400" : { + "description" : "One optional parameter along with fromDate and toData is required", + "examples" : { + "application/json" : "{ \"errorDetails\": \" Insufficient parameters. At least one parameter in addition to the creation date range must be provided.\"}" + } + } + }, + "security" : [ { + "Basic" : [ ] + } ] + } + }, + "/transactionalEvents/_count" : { + "get" : { + "description" : "This method can be used to retrieve the number of transaction events for a given API/Application/Plan/Package for a specific period of time. Multiple request parameters of this method provide options to specify the request criteria to match the expected result and most of these input parameters supports regular expression in their values. Along with the mandatory parameters - fromDate and toDate, any one of the other filter criteria should be passed in the request.", + "operationId" : "getTransactionsCount", + "consumes" : [ "application/json" ], + "produces" : [ "application/json" ], + "parameters" : [ { + "name" : "apiName", + "in" : "query", + "description" : "The name of the API for which the invocation count is required.The exact name must be provided or regular expressions can be used like API_.*", + "required" : false, + "type" : "string", + "x-example" : "apiName=PetStore" + }, { + "name" : "apiVersion", + "in" : "query", + "description" : "The version of the API", + "required" : false, + "type" : "string", + "x-example" : "apiVersion=1.0" + }, { + "name" : "apiId", + "in" : "query", + "description" : "The system generated id for an API.The id of an can be retrieved from the API details screen", + "required" : false, + "type" : "string", + "x-example" : "apiId=105e99ee-0e1b-4afa-8ff3-4322cf296558" + }, { + "name" : "applicationName", + "in" : "query", + "description" : "The name of the Application for which the invocation count is required.The exact name must be provided or regular expressions can be used like APP_.*", + "required" : false, + "type" : "string", + "x-example" : "applicationName=HostBasedIdentifier" + }, { + "name" : "applicationId", + "in" : "query", + "description" : "The system generated id for an Application.The id of an can be retrieved from the Application details screen", + "required" : false, + "type" : "string", + "x-example" : "applicationId=995e99ee-0e1b-4afa-8ff3-4322cf296587" + }, { + "name" : "packageName", + "in" : "query", + "description" : "The name of the Package for which the invocation count is required.The exact name must be provided or regular expressions can be used like Package_.*", + "required" : false, + "type" : "string", + "x-example" : "pakageName=TravelPackage" + }, { + "name" : "packageId", + "in" : "query", + "description" : "The system generated id for a Package.The id of an can be retrieved from the Package details screen", + "required" : false, + "type" : "string", + "x-example" : "apiId=685023ee-0e1b-4afa-8ff3-4322cf296566" + }, { + "name" : "planName", + "in" : "query", + "description" : "The name of the Plan for which the invocation count is required.The exact name must be provided or regular expressions can be used like Plan_.*", + "required" : false, + "type" : "string", + "x-example" : "planName=GoldPlan" + }, { + "name" : "planId", + "in" : "query", + "description" : "The system generated id for a Plan.The id of an can be retrieved from the Plan details screen", + "required" : false, + "type" : "string", + "x-example" : "planId=785e99ee-0e1b-4afa-8ff3-4322cf296566" + }, { + "name" : "fromDate", + "in" : "query", + "description" : "This is the date from which the count has to be retrieved for the matching filter criteria.It is a mandatory parameter and it should be of the format YYYY-MM-DD. Regular expression support is not available for this parameter", + "required" : true, + "type" : "string", + "format" : "date", + "x-example" : "fromDate=2017-02-26 or fromDate=1488091324" + }, { + "name" : "toDate", + "in" : "query", + "description" : "This is the date to which the count has to be retrieved for the matching filter criteria.It is a mandatory parameter and it should be of the format YYYY-MM-DD. Regular expression support is not available for this parameter", + "required" : true, + "type" : "string", + "format" : "date", + "x-example" : "toDate=2017-02-27 or toDate=1488177724" + } ], + "responses" : { + "200" : { + "description" : "Array of transactional events count grouped by apiId and api version.", + "schema" : { + "$ref" : "#/definitions/TransactionResponse" + }, + "examples" : { + "application/json" : "{\r\n \"count\": [\r\n {\r\n \"apiName\": \"PetStoreTest\",\r\n \"apiVersion\": \"1.0.0\",\r\n \"count\": 2\r\n }\r\n ]\r\n}" + } + }, + "401" : { + "description" : "This response indicates that invalid credentials have been provided for the request." + }, + "400" : { + "description" : "One optional parameter along with fromDate and toDate is mandatory", + "examples" : { + "application/json" : "{ \"errorDetails\": \" Insufficient parameters. At least one parameter in addition to the creation date range must be provided.\"}" + } + } + }, + "security" : [ { + "Basic" : [ ] + } ] + } + } + }, + "securityDefinitions" : { + "Basic" : { + "description" : "API Gateway Administrator and API Gateway provider", + "type" : "basic" + } + }, + "definitions" : { + "TransactionEvent" : { + "type" : "object", + "properties" : { + "id" : { + "type" : "string" + }, + "eventType" : { + "type" : "string" + }, + "creationDate" : { + "type" : "integer", + "format" : "int64", + "description" : "Creation time of the transaction." + }, + "apiName" : { + "type" : "string", + "description" : "API name" + }, + "apiVersion" : { + "type" : "string", + "description" : "API version" + }, + "apiId" : { + "type" : "string", + "description" : "API Id" + }, + "totalTime" : { + "type" : "integer", + "format" : "int64", + "description" : "Total time taken for processing the request" + }, + "sessionId" : { + "type" : "string", + "description" : "Unique Id of the session" + }, + "providerTime" : { + "type" : "integer", + "format" : "int64", + "description" : "Time taken by the native provider for processing the request" + }, + "applicationName" : { + "type" : "string", + "description" : "Application name" + }, + "consumerIp" : { + "type" : "string", + "description" : "IP address of the consumer for the current request" + }, + "applicationId" : { + "type" : "string", + "description" : "Unique Id of the application" + }, + "status" : { + "type" : "string", + "description" : "Status of the request" + }, + "reqPayload" : { + "type" : "string", + "description" : "The complete request payload" + }, + "resPayload" : { + "type" : "string", + "description" : "The complete response payload" + }, + "totalDataSize" : { + "type" : "integer", + "format" : "int64", + "description" : "Total size of the payload" + }, + "responseCode" : { + "type" : "string", + "description" : "Response status code" + }, + "cachedResponse" : { + "type" : "string", + "description" : "Boolean value to indicate whether the response is served from cache" + }, + "operationName" : { + "type" : "string", + "description" : "Operation name of the incoming request" + }, + "httpMethod" : { + "type" : "string", + "description" : "Name of the method" + }, + "packageName" : { + "type" : "string", + "description" : "Package name" + }, + "packageId" : { + "type" : "string", + "description" : "Id of the package." + }, + "planName" : { + "type" : "string", + "description" : "Plan name" + }, + "planId" : { + "type" : "string", + "description" : "Id of the Plan" + }, + "origin" : { + "type" : "string", + "description" : "Origin of a Websocket message" + }, + "messagePayload" : { + "type" : "string", + "description" : "Payload of a Websocket message" + }, + "messageType" : { + "type" : "string", + "description" : "Websocket message type" + }, + "requestHeaders" : { + "type" : "object", + "description" : "Incoming request headers", + "additionalProperties" : { + "type" : "string" + } + }, + "responseHeaders" : { + "type" : "object", + "description" : "Outgoing response headers", + "additionalProperties" : { + "type" : "string" + } + }, + "queryParameters" : { + "type" : "object", + "description" : "Incoming query parameters", + "additionalProperties" : { + "type" : "string" + } + }, + "correlationID" : { + "type" : "string", + "description" : "Correlation ID used in the logging" + }, + "customFields" : { + "type" : "object", + "description" : "Custom fields to be added.", + "additionalProperties" : { + "type" : "string" + } + }, + "errorOrigin" : { + "type" : "string", + "description" : "Information of error orgination" + }, + "callbackRequest" : { + "type" : "boolean" + } + } + }, + "TransactionResponse" : { + "type" : "object", + "properties" : { + "apiId" : { + "type" : "string", + "description" : "API Id" + }, + "apiName" : { + "type" : "string", + "description" : "API name" + }, + "apiVersion" : { + "type" : "string", + "description" : "API version" + }, + "count" : { + "type" : "integer", + "format" : "int64", + "description" : "The total number of invocations based on the provided filter criteria" + } + } + } + } +} \ No newline at end of file diff --git a/apigatewayservices/APIGatewayUserManagement.json b/apigatewayservices/APIGatewayUserManagement.json new file mode 100644 index 0000000..bab116c --- /dev/null +++ b/apigatewayservices/APIGatewayUserManagement.json @@ -0,0 +1,809 @@ +{ + "swagger" : "2.0", + "info" : { + "description" : "API Gateway User Management Service allows you to manage Users, Groups and Access profiles in the API Gateway. Any user with the 'Manage user administration' functional privilege can manage the Users, Groups and Access profiles in API Gateway. By default, the users who are part of API-Gateway-Administrators groups will have this privilege.\n\nAPI Gateway allows you to manage the password restrictions settings. For security purposes, API Gateway places length and character restrictions on passwords for administrator and non-administrator users. API Gateway contains a default set of password requirements. However, you can change these using the API Gateway Administration Service. Refer the REST resource '/configurations/passwordRestrictions' in the API Gateway Administration Service. \n\nAPI Gateway allows you to manage the password expiration settings. For security purposes, API Gateway allows administrators to set password expiration requirements on passwords for administrator and non-administrator users. API Gateway contains a default set of password expiry settings. However, you can change these with the API Gateway Administration service. Refer the REST resource '/configurations/passwordExpiry' in the API Gateway Administration Service. \n\nAPI Gateway allows you to manage the account locking settings. For security purposes, it is important to lock a user account when the user fails to provide the correct password after a specified number of failed login attempts to API Gateway. A locked user account remains locked for a specific period of time, after which the account gets unlocked. API Gateway allows administrators to configure these account locking settings for administrator and non-administrator users. Using API Gateway Administration Service, you can set the values for number of attempts by a user before locking the account and also the duration of the lock interval. Refer the REST resource '/configurations/accountLockSettings' in the API Gateway Administration Service.\n\nAPI Gateway allows you to view the locked user accounts and also allows to manually unlock locked user accounts before the automatic unlocking period. This can be achieved using the REST resource '/is/lockedAccounts' in the API Gateway User Management Service. \n\nAPI Gateway allows you to configure LDAP directories. If your server uses Lightweight Directory Access Protocol (LDAP) for user and group information, you can configure API Gateway to obtain user and group information from the external LDAP directory. You can configure API Gateway to use more than one LDAP directory at a time, allowing API Gateway to work with different LDAP directories for users in different locations or different organizations. You can manage the LDAP directories and LDAP configurations using the API Gateway Administration service. Refer the REST resource '/configurations/ldapConfig' in the API Gateway Administration Service. ", + "version" : "10.3", + "title" : "API Gateway User Management Service" + }, + "host" : "localhost:5555", + "basePath" : "/rest/apigateway", + "schemes" : [ "http" ], + "consumes" : [ "application/json" ], + "produces" : [ "application/json" ], + "paths" : { + "/groups/{groupId}" : { + "get" : { + "description" : "The method retrieves the details of a group in API Gateway.", + "operationId" : "getGroup", + "produces" : [ "application/json" ], + "parameters" : [ { + "name" : "groupId", + "in" : "path", + "description" : "The path parameter specifies the id of a group whose details are to be retrieved.", + "required" : true, + "type" : "string" + } ], + "responses" : { + "200" : { + "description" : "This status code indicates that the details of the group is successfully retrieved.", + "schema" : { + "$ref" : "#/definitions/Group" + }, + "examples" : { + "application/json" : "{\r\n \"groups\": [\r\n {\r\n \"id\": \"be9147a8-6e53-4472-b1bd-16337a84d314\",\r\n \"name\": \"TestGrp\",\r\n \"description\": \"Group has all QA Members\",\r\n \"type\": \"local\",\r\n \"userIds\": [\r\n \"69aa914e-fbfc-4c74-87f1-2d48f589e115\"\r\n ]\r\n }\r\n ]\r\n}" + } + }, + "404" : { + "description" : "This status code indicates that a group with the given id could not be found in API Gateway.", + "examples" : { + "application/json" : "{\r\n \"errorDetails\": \" Group with id: 15fbeeb2-745c-4988-b7b6-61f359ecbfc8 does not exist.\"\r\n}" + } + }, + "401" : { + "description" : "This status code indicates that either group didn't provide right credentials or user doesn't have required privileges to access this API." + } + }, + "security" : [ { + "Basic" : [ ] + } ] + }, + "put" : { + "description" : "The method updates the details of a specified group in API Gateway. The API request body must contain the payload for the updated group.", + "operationId" : "updateGroup", + "consumes" : [ "application/json" ], + "produces" : [ "application/json" ], + "parameters" : [ { + "in" : "body", + "name" : "body", + "description" : "This parameter describes the request payload of a group that is to be updated in API Gateway.", + "required" : true, + "schema" : { + "$ref" : "#/definitions/Group" + }, + "x-examples" : { + "application/json" : "{\r\n\t\"id\": \"be9147a8-6e53-4472-b1bd-16337a84d314\",\r\n\t\"name\": \"TestGrp\",\r\n\t\"description\": \"Group has all QA Members\",\r\n\t\"userIds\": [\r\n\t\t\"69aa914e-fbfc-4c74-87f1-2d48f589e115\"\r\n\t]\r\n}" + } + }, { + "name" : "groupId", + "in" : "path", + "description" : "The path parameter specifies the id of a group whose detail is to be updated in API Gateway.", + "required" : true, + "type" : "string" + } ], + "responses" : { + "200" : { + "description" : "This status code indicates that the group has been successfully updated in API Gateway, and the updated group is available in the response body.", + "schema" : { + "$ref" : "#/definitions/Group" + }, + "examples" : { + "application/json" : "{\r\n\t\"id\": \"be9147a8-6e53-4472-b1bd-16337a84d314\",\r\n\t\"name\": \"TestGrp\",\r\n\t\"description\": \"Group has all QA Members\",\r\n\t\"type\": \"local\",\r\n\t\"userIds\": [\r\n\t\t\"69aa914e-fbfc-4c74-87f1-2d48f589e115\"\r\n\t]\r\n}" + } + }, + "400" : { + "description" : "This status code indicates that the request body is invalid." + }, + "401" : { + "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." + } + }, + "security" : [ { + "Basic" : [ ] + } ] + }, + "delete" : { + "description" : "The method deletes a group from API Gateway.", + "operationId" : "deleteGroup", + "produces" : [ "application/json" ], + "parameters" : [ { + "name" : "groupId", + "in" : "path", + "description" : "The path parameter specifies the id of a group that is to be deleted from API Gateway.", + "required" : true, + "type" : "string" + } ], + "responses" : { + "401" : { + "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." + }, + "204" : { + "description" : "This status code indicates that the specified group has been successfully deleted from API Gateway." + }, + "404" : { + "description" : "This status code indicates that group with the given id could not be found in API Gateway.", + "examples" : { + "application/json" : "{\r\n \"errorDetails\": \" Group with id: 732c4526-db9a-4ef9-9782-edda1a6aa9bc does not exist.\"\r\n}" + } + } + }, + "security" : [ { + "Basic" : [ ] + } ] + } + }, + "/groups" : { + "get" : { + "description" : "The method retrieves list of all groups in API Gateway.", + "operationId" : "getGroups", + "produces" : [ "application/json" ], + "parameters" : [ ], + "responses" : { + "200" : { + "description" : "This status code indicates that the list of groups is successfully retrieved.", + "schema" : { + "$ref" : "#/definitions/Group" + }, + "examples" : { + "application/json" : "{\r\n \"groups\": [\r\n {\r\n \"id\": \"Administrators\",\r\n \"name\": \"Administrators\",\r\n \"description\": \"Users added to this group can perform similar local administrative tasks.\",\r\n \"type\": \"local\",\r\n \"systemDefined\": true,\r\n \"userIds\": [\r\n \"Administrator\"\r\n ]\r\n },\r\n {\r\n \"id\": \"API-Gateway-Administrators\",\r\n \"name\": \"API-Gateway-Administrators\",\r\n \"description\": \"Users added to this group can perform similar API Gateway Administrative tasks.\",\r\n \"type\": \"local\",\r\n \"systemDefined\": true,\r\n \"userIds\": [\r\n \"Administrator\"\r\n ]\r\n },\r\n {\r\n \"id\": \"API-Gateway-Providers\",\r\n \"name\": \"API-Gateway-Providers\",\r\n \"description\": \"Users added to this group can perform similar API Gateway Providers tasks.\",\r\n \"type\": \"local\",\r\n \"systemDefined\": true,\r\n \"userIds\": []\r\n },\r\n {\r\n \"id\": \"be9147a8-6e53-4472-b1bd-16337a84d314\",\r\n \"name\": \"TestGrp\",\r\n \"description\": \"\",\r\n \"type\": \"local\",\r\n \"systemDefined\": false,\r\n \"userIds\": [\r\n \"69aa914e-fbfc-4c74-87f1-2d48f589e115\"\r\n ]\r\n }\r\n ]\r\n}" + } + }, + "401" : { + "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." + } + }, + "security" : [ { + "Basic" : [ ] + } ] + }, + "post" : { + "description" : "The method creates a group in API Gateway. The API request body must contain the payload for the group.", + "operationId" : "createGroup", + "consumes" : [ "application/json" ], + "produces" : [ "application/json" ], + "parameters" : [ { + "in" : "body", + "name" : "body", + "description" : "This parameter describes the request payload of a group that is to be created in API Gateway.", + "required" : true, + "schema" : { + "$ref" : "#/definitions/Group" + }, + "x-examples" : { + "application/json" : "{\r\n\t \"name\": \"TestGrp\",\r\n\t\"description\": \"Group has all QA Members\",\r\n\t\"userIds\": [\r\n\t\t\"69aa914e-fbfc-4c74-87f1-2d48f589e115\"\r\n\t]\r\n}" + } + } ], + "responses" : { + "201" : { + "description" : "This status code indicates that the group has been successfully created in API Gateway, and the newly created group is available in the response body.", + "schema" : { + "$ref" : "#/definitions/Group" + }, + "examples" : { + "application/json" : "{\r\n\t\"id\": \"be9147a8-6e53-4472-b1bd-16337a84d314\",\r\n\t\"name\": \"TestGrp\",\r\n\t\"description\": \"Group has all QA Members\",\r\n\t\"type\": \"local\",\r\n\t\"userIds\": [\r\n\t\t\"69aa914e-fbfc-4c74-87f1-2d48f589e115\"\r\n\t]\r\n}" + } + }, + "400" : { + "description" : "This status code indicates that a group with the given name already exists in API Gateway or the request body is not correct." + }, + "401" : { + "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." + } + }, + "security" : [ { + "Basic" : [ ] + } ] + } + }, + "/authenticate" : { + "post" : { + "description" : "This HTTP request authenticates an User in API Gateway.", + "operationId" : "authorizeUser", + "consumes" : [ "application/json" ], + "produces" : [ "application/json" ], + "parameters" : [ { + "in" : "body", + "name" : "body", + "description" : "This parameter describes the request payload of a user that is to be created in API Gateway.", + "required" : true, + "schema" : { + "$ref" : "#/definitions/User" + } + } ], + "responses" : { + "200" : { + "description" : "This status code indicates that the user was successfully authenticated.", + "schema" : { + "$ref" : "#/definitions/User" + } + }, + "400" : { + "description" : "This status code indicates that the request payload is not correct or User is already exists" + }, + "401" : { + "description" : "This status code indicates that authorization has been refused for this HTTP request. This is possibly because, the user has not specified the required credentials (username and password), or has specified invalid credentials." + } + }, + "security" : [ { + "Basic" : [ ] + } ] + } + }, + "/installedLanguages" : { + "get" : { + "description" : "The method retrieves list of installed language packs in API Gateway.", + "operationId" : "getInstalledLanguages", + "produces" : [ "application/json" ], + "parameters" : [ ], + "responses" : { + "200" : { + "description" : "This status code indicates that the list of installed language packs is successfully retrieved.", + "schema" : { + "type" : "array", + "items" : { + "type" : "string" + } + }, + "examples" : { + "application/json" : "{\r\n \"installedLanguages\": [\r\n \"ja\"\r\n ]\r\n}" + } + }, + "401" : { + "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." + } + }, + "security" : [ { + "Basic" : [ ] + } ] + } + }, + "/accessProfiles/{accessProfileId}" : { + "get" : { + "description" : "The method retrieves the details of an access profile in API Gateway.", + "operationId" : "getAccessProfile", + "produces" : [ "application/json" ], + "parameters" : [ { + "name" : "accessProfileId", + "in" : "path", + "description" : "The path parameter specifies the id of an access profile whose details are to be retrieved.", + "required" : true, + "type" : "string" + } ], + "responses" : { + "200" : { + "description" : "This status code indicates that the details of the access profile is successfully retrieved.", + "schema" : { + "$ref" : "#/definitions/AccessProfile" + }, + "examples" : { + "application/json" : "{\r\n \"accessProfiles\": [\r\n {\r\n \"id\": \"8b6f2e10-1d82-4813-b927-4c1cf4a4d029\",\r\n \"name\": \"TestProfile\",\r\n \"description\": \"Test\",\r\n \"systemDefined\": false,\r\n \"privilege\": \"1011100000011000001\",\r\n \"groupIds\": [\r\n \"be9147a8-6e53-4472-b1bd-16337a84d314\"\r\n ]\r\n }\r\n ]\r\n}" + } + }, + "404" : { + "description" : "This status code indicates that an access profile with the given id could not be found in API Gateway.", + "examples" : { + "application/json" : "{\r\n \"errorDetails\": \" AccessProfile with id: 15fbeeb2-745c-4988-b7b6-61f359ecbfc8 does not exist.\"\r\n}" + } + }, + "401" : { + "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." + } + }, + "security" : [ { + "Basic" : [ ] + } ] + }, + "put" : { + "description" : "The method updates the details of a specified access profile in API Gateway. The API request body must contain the payload for the updated accessProfile.", + "operationId" : "updateAccessProfile", + "consumes" : [ "application/json" ], + "produces" : [ "application/json" ], + "parameters" : [ { + "in" : "body", + "name" : "body", + "description" : "This parameter describes the request payload of a accessProfile that is to be updated in API Gateway.", + "required" : true, + "schema" : { + "$ref" : "#/definitions/AccessProfile" + }, + "x-examples" : { + "application/json" : "{\r\n \"name\": \"TestProfile\",\r\n \"description\": \"Test\",\r\n \"privilege\": \"1011100000011000001\",\r\n \"groupIds\": [\r\n \"be9147a8-6e53-4472-b1bd-16337a84d314\"\r\n ]\r\n }" + } + }, { + "name" : "accessProfileId", + "in" : "path", + "description" : "The path parameter specifies the id of an access profile whose detail is to be updated in API Gateway.", + "required" : true, + "type" : "string" + } ], + "responses" : { + "200" : { + "description" : "This status code indicates that the access profile has been successfully updated in API Gateway, and the updated access profile is available in the response body.", + "schema" : { + "$ref" : "#/definitions/AccessProfile" + }, + "examples" : { + "application/json" : "{\r\n \"id\": \"8b6f2e10-1d82-4813-b927-4c1cf4a4d029\",\r\n \"name\": \"TestProfile\",\r\n \"description\": \"Test\",\r\n \"privilege\": \"1011100000011000001\",\r\n \"groupIds\": [\r\n \"be9147a8-6e53-4472-b1bd-16337a84d314\"\r\n ]\r\n }" + } + }, + "400" : { + "description" : "This status code indicates that the request body is invalid." + }, + "401" : { + "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." + } + }, + "security" : [ { + "Basic" : [ ] + } ] + }, + "delete" : { + "description" : "The method deletes an access profile from API Gateway.", + "operationId" : "deleteAccessProfile", + "produces" : [ "application/json" ], + "parameters" : [ { + "name" : "accessProfileId", + "in" : "path", + "description" : "This parameter specifies the ID of an application that is to be deleted in API Gateway.", + "required" : true, + "type" : "string" + } ], + "responses" : { + "401" : { + "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." + }, + "204" : { + "description" : "This status code indicates that the specified access profile has been successfully deleted from API Gateway." + }, + "404" : { + "description" : "This status code indicates that access profile with the given id could not be found in API Gateway.", + "examples" : { + "application/json" : "{\r\n \"errorDetails\": \" AccessProfile with id: 732c4526-db9a-4ef9-9782-edda1a6aa9bc does not exist.\"\r\n}" + } + } + }, + "security" : [ { + "Basic" : [ ] + } ] + } + }, + "/accessProfiles" : { + "get" : { + "description" : "The method retrieves list of all access profiles in API Gateway.", + "operationId" : "getAccessProfilesFromIC", + "produces" : [ "application/json" ], + "parameters" : [ ], + "responses" : { + "200" : { + "description" : "This status code indicates that the list of access profiles is successfully retrieved.", + "schema" : { + "$ref" : "#/definitions/AccessProfile" + }, + "examples" : { + "application/json" : "{\r\n \"accessProfiles\": [\r\n {\r\n \"id\": \"Administrators\",\r\n \"name\": \"Administrators\",\r\n \"description\": \"Groups associated to this access profile are allowed to perform all the administration related tasks. \",\r\n \"systemDefined\": true,\r\n \"privilege\": \"1111111111111111111111111111111111111111111111111111111111111111\",\r\n \"groupIds\": [\r\n \"Administrators\",\r\n \"API-Gateway-Administrators\"\r\n ]\r\n },\r\n {\r\n \"id\": \"API-Gateway-Providers\",\r\n \"name\": \"API-Gateway-Providers\",\r\n \"description\": \"Groups associated to this access profile are allowed to access an asset based on the functional privileges assigned to this access profile.\",\r\n \"systemDefined\": true,\r\n \"privilege\": \"111100101101100000001\",\r\n \"groupIds\": [\r\n \"API-Gateway-Providers\"\r\n ]\r\n },\r\n {\r\n \"id\": \"8b6f2e10-1d82-4813-b927-4c1cf4a4d029\",\r\n \"name\": \"TestProfile\",\r\n \"description\": \"Test\",\r\n \"systemDefined\": false,\r\n \"privilege\": \"101110000001100000110101\",\r\n \"groupIds\": [\r\n \"be9147a8-6e53-4472-b1bd-16337a84d314\"\r\n ]\r\n }\r\n ]\r\n}" + } + }, + "401" : { + "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." + } + }, + "security" : [ { + "Basic" : [ ] + } ] + }, + "post" : { + "description" : "The method creates an access profile in API Gateway. The API request body must contain the payload for the access profile. Each bit infers the applicability of the functional privilege permission. Value 1 implies permission granted for that functional privilege. Value 0 implies denied permission. Function Privileges and its positions from left most bit to the right most bit. 1.Manage APIs2.Activate / Deactivate APIs3.Manage applications4.Manage aliases5.Manage global policies6.Activate / Deactivate global policies7.Manage policy templates8.Manage threat protection configurations9.Manage packages and plans10.Activate / Deactivate packages11.Publish to API Portal12.Import assets13.Export assets14.View administration configurations15.Manage general administration configurations16.Manage security configurations17.Manage destination configurations18.Manage system settings19.Manage user administration20.Manage purge and restore runtime events21.Execute service result cache APIs22.Manage Promotion23.Publish API to Service Registry24.Manage Service Registries", + "operationId" : "createAccessProfile", + "consumes" : [ "application/json" ], + "produces" : [ "application/json" ], + "parameters" : [ { + "in" : "body", + "name" : "body", + "description" : "This parameter describes the request payload of a accessProfile that is to be created in API Gateway.", + "required" : true, + "schema" : { + "$ref" : "#/definitions/AccessProfile" + }, + "x-examples" : { + "application/json" : "{\r\n \"name\": \"TestProfile\",\r\n \"description\": \"Test\",\r\n \"privilege\": \"101110000001100000110101\",\r\n \"groupIds\": [\r\n \"be9147a8-6e53-4472-b1bd-16337a84d314\"\r\n ]\r\n }" + } + } ], + "responses" : { + "201" : { + "description" : "This status code indicates that the access profile has been successfully created in API Gateway, and the newly created access profile is available in the response body.", + "schema" : { + "$ref" : "#/definitions/AccessProfile" + }, + "examples" : { + "application/json" : "{\r\n \"id\": \"8b6f2e10-1d82-4813-b927-4c1cf4a4d029\",\r\n \"name\": \"TestProfile\",\r\n \"description\": \"Test\",\r\n \"privilege\": \"101110000001100000110101\",\r\n \"groupIds\": [\r\n \"be9147a8-6e53-4472-b1bd-16337a84d314\"\r\n ]\r\n }" + } + }, + "400" : { + "description" : "This status code indicates that an access profile with the given name already exists in API Gateway or the request body is not correct." + }, + "401" : { + "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." + } + }, + "security" : [ { + "Basic" : [ ] + } ] + } + }, + "/is/lockedAccounts" : { + "get" : { + "description" : "Retrieves the locked accounts in API Gateway", + "operationId" : "getLockedAccounts", + "consumes" : [ "application/json" ], + "produces" : [ "application/json" ], + "parameters" : [ ], + "responses" : { + "200" : { + "description" : "", + "schema" : { + "$ref" : "#/definitions/LockedAccounts" + }, + "examples" : { + "application/json" : "{\r\n\t\"lockedAccounts\":[\"a\",\"b\"]\r\n}" + } + }, + "401" : { + "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." + } + }, + "security" : [ { + "Basic" : [ ] + } ] + }, + "post" : { + "description" : "Unlock user account(s) locked by API Gateway", + "operationId" : "unLockUserAccounts", + "consumes" : [ "application/json" ], + "produces" : [ "application/json" ], + "parameters" : [ { + "in" : "body", + "name" : "body", + "description" : "", + "required" : true, + "schema" : { + "$ref" : "#/definitions/UnlockAccountsRequest" + }, + "x-examples" : { + "application/json" : "{\r\n\t\"unLockAccounts\": { \r\n\t\t\"userName\": [\"c\"]\r\n\t}\r\n}" + } + } ], + "responses" : { + "200" : { + "description" : "", + "schema" : { + "$ref" : "#/definitions/LockedAccounts" + }, + "examples" : { + "application/json" : "{\r\n\t\"lockedAccounts\":[\"a\",\"b\"]\r\n}" + } + }, + "401" : { + "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." + } + }, + "security" : [ { + "Basic" : [ ] + } ] + } + }, + "/users" : { + "get" : { + "description" : "The method retrieves list of all users in API Gateway.", + "operationId" : "getUsers", + "produces" : [ "application/json" ], + "parameters" : [ ], + "responses" : { + "200" : { + "description" : "This status code indicates that the list of users is successfully retrieved.", + "schema" : { + "$ref" : "#/definitions/User" + }, + "examples" : { + "application/json" : "{\r\n \"users\": [\r\n {\r\n \"id\": \"Administrator\",\r\n \"loginId\": \"Administrator\",\r\n \"firstName\": \"Administrator\",\r\n \"password\": \"********************************\",\r\n \"type\": \"local\",\r\n \"allowDigestAuth\": false,\r\n \"active\": true,\r\n \"systemDefined\": true,\r\n \"language\": \"en\",\r\n \"emailAddresses\": []\r\n },\r\n {\r\n \"id\": \"15fbeeb2-745c-4988-b7b6-61f359ecbfc8\",\r\n \"loginId\": \"testUser\",\r\n \"firstName\": \"User\",\r\n \"lastName\": \"Test\",\r\n \"password\": \"********************************\",\r\n \"type\": \"local\",\r\n \"allowDigestAuth\": false,\r\n \"active\": true,\r\n \"systemDefined\": false,\r\n \"language\": \"ja\",\r\n \"emailAddresses\": [\r\n \"noreply@softwareag.com\"\r\n ]\r\n }\r\n ]\r\n}\r\n" + } + }, + "401" : { + "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." + } + }, + "security" : [ { + "Basic" : [ ] + } ] + }, + "post" : { + "description" : "The method creates an user in API Gateway. The API request body must contain the payload for the user.", + "operationId" : "createUser", + "consumes" : [ "application/json" ], + "produces" : [ "application/json" ], + "parameters" : [ { + "in" : "body", + "name" : "body", + "description" : "This parameter describes the request payload of a user that is to be created in API Gateway.", + "required" : true, + "schema" : { + "$ref" : "#/definitions/User" + }, + "x-examples" : { + "application/json" : "{\r\n \"loginId\": \"testUser\",\r\n \"firstName\": \"User\",\r\n \"lastName\": \"Test\",\r\n \"password\": \"test\",\r\n \"type\": \"local\",\r\n \"allowDigestAuth\": false,\r\n \"language\": \"en\",\r\n \"emailAddresses\": [\r\n \"noreply@softwareag.com\"\r\n ]\r\n }" + } + } ], + "responses" : { + "201" : { + "description" : "This status code indicates that the user has been successfully created in API Gateway, and the newly created user is available in the response body.", + "schema" : { + "$ref" : "#/definitions/User" + }, + "examples" : { + "application/json" : "{\r\n \"id\": \"15fbeeb2-745c-4988-b7b6-61f359ecbfc8\",\r\n \"loginId\": \"testUser\",\r\n \"firstName\": \"User\",\r\n \"lastName\": \"Test\",\r\n \"password\": \"********************************\",\r\n \"type\": \"local\",\r\n \"allowDigestAuth\": false,\r\n \"active\": true,\r\n \"language\": \"en\",\r\n \"emailAddresses\": [\r\n \"noreply@softwareag.com\"\r\n ]\r\n }" + } + }, + "400" : { + "description" : "This status code indicates that an user with the given loginId already exists in API Gateway or the request body is not correct." + }, + "401" : { + "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." + } + }, + "security" : [ { + "Basic" : [ ] + } ] + } + }, + "/users/authenticate" : { + "post" : { + "description" : "This HTTP request authenticates an User in API Gateway.", + "operationId" : "authorizeUser", + "consumes" : [ "application/json" ], + "produces" : [ "application/json" ], + "parameters" : [ { + "in" : "body", + "name" : "body", + "description" : "This parameter describes the request payload of a user that is to be created in API Gateway.", + "required" : true, + "schema" : { + "$ref" : "#/definitions/User" + } + } ], + "responses" : { + "200" : { + "description" : "This status code indicates that the user was successfully authenticated.", + "schema" : { + "$ref" : "#/definitions/User" + } + }, + "400" : { + "description" : "This status code indicates that the request payload is not correct or User is already exists" + }, + "401" : { + "description" : "This status code indicates that authorization has been refused for this HTTP request. This is possibly because, the user has not specified the required credentials (username and password), or has specified invalid credentials." + } + }, + "security" : [ { + "Basic" : [ ] + } ] + } + }, + "/users/{userId}" : { + "get" : { + "description" : "The method retrieves the details of an user in API Gateway.", + "operationId" : "getUser", + "produces" : [ "application/json" ], + "parameters" : [ { + "name" : "userId", + "in" : "path", + "description" : "The path parameter specifies the id of an user whose details are to be retrieved.", + "required" : true, + "type" : "string" + } ], + "responses" : { + "200" : { + "description" : "This status code indicates that the details of the user is successfully retrieved.", + "schema" : { + "$ref" : "#/definitions/User" + }, + "examples" : { + "application/json" : "{\r\n \"users\": [\r\n {\r\n \"id\": \"15fbeeb2-745c-4988-b7b6-61f359ecbfc8\",\r\n \"loginId\": \"testUser\",\r\n \"firstName\": \"User\",\r\n \"lastName\": \"Test\",\r\n \"password\": \"********************************\",\r\n \"type\": \"local\",\r\n \"allowDigestAuth\": false,\r\n \"active\": true,\r\n \"emailAddresses\": [\r\n \"noreply@softwareag.com\"\r\n ]\r\n }\r\n ]\r\n}" + } + }, + "404" : { + "description" : "This status code indicates that an user with the given id could not be found in API Gateway.", + "examples" : { + "application/json" : "{\r\n \"errorDetails\": \" User with id: 15fbeeb2-745c-4988-b7b6-61f359ecbfc8 does not exist.\"\r\n}" + } + }, + "401" : { + "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." + } + }, + "security" : [ { + "Basic" : [ ] + } ] + }, + "put" : { + "description" : "The method updates the details of a specified user in API Gateway. The API request body must contain the payload for the updated user.", + "operationId" : "updateUser", + "consumes" : [ "application/json" ], + "produces" : [ "application/json" ], + "parameters" : [ { + "in" : "body", + "name" : "body", + "description" : "This parameter describes the request payload of a user that is to be updated in API Gateway.", + "required" : true, + "schema" : { + "$ref" : "#/definitions/User" + }, + "x-examples" : { + "application/json" : "{\r\n \"loginId\": \"testUser\",\r\n \"firstName\": \"User\",\r\n \"lastName\": \"Test\",\r\n \"password\": \"test\",\r\n \"type\": \"local\",\r\n \"allowDigestAuth\": false,\r\n \"emailAddresses\": [\r\n \"noreply@softwareag.com\"\r\n ]\r\n }" + } + }, { + "name" : "userId", + "in" : "path", + "description" : "The path parameter specifies the id of an user whose detail is to be updated in API Gateway.", + "required" : true, + "type" : "string" + } ], + "responses" : { + "200" : { + "description" : "This status code indicates that the user has been successfully updated in API Gateway, and the updated user is available in the response body.", + "schema" : { + "$ref" : "#/definitions/User" + }, + "examples" : { + "application/json" : "{\r\n \"id\": \"15fbeeb2-745c-4988-b7b6-61f359ecbfc8\",\r\n \"loginId\": \"testUser\",\r\n \"firstName\": \"User\",\r\n \"lastName\": \"Test\",\r\n \"password\": \"test\",\r\n \"type\": \"local\",\r\n \"allowDigestAuth\": false,\r\n \"emailAddresses\": [\r\n \"noreply@softwareag.com\"\r\n ]\r\n }" + } + }, + "400" : { + "description" : "This status code indicates that the request body is invalid." + }, + "401" : { + "description" : "This status code indicates that either user didn't provide right credentials or user doesn't have required privileges to access this API." + } + }, + "security" : [ { + "Basic" : [ ] + } ] + } + } + }, + "securityDefinitions" : { + "Basic" : { + "description" : "API Gateway Administrator and API Gateway provider", + "type" : "basic" + } + }, + "definitions" : { + "Group" : { + "type" : "object", + "properties" : { + "id" : { + "type" : "string", + "description" : "Group ID", + "readOnly" : true + }, + "name" : { + "type" : "string", + "description" : "name of the group" + }, + "description" : { + "type" : "string", + "description" : "description of the group" + }, + "userIds" : { + "type" : "array", + "description" : "list of user's Ids assigned to the group", + "items" : { + "type" : "string" + } + } + }, + "description" : "This model contains details about a group in API Gateway" + }, + "User" : { + "type" : "object", + "properties" : { + "id" : { + "type" : "string", + "description" : "unique identifier of a user", + "readOnly" : true + }, + "loginId" : { + "type" : "string", + "description" : "login name" + }, + "firstName" : { + "type" : "string", + "description" : "first name of the user" + }, + "lastName" : { + "type" : "string", + "description" : "last name of the user" + }, + "emailAddresses" : { + "type" : "array", + "description" : "list of email addresses of the user", + "items" : { + "type" : "string" + } + }, + "allowDigestAuth" : { + "type" : "boolean", + "description" : "list of email addresses of the user" + }, + "active" : { + "type" : "boolean", + "description" : "active status of the user" + }, + "language" : { + "type" : "string", + "description" : "preferred language of the user" + } + }, + "description" : "This model contains details about an User in API Gateway" + }, + "AccessProfile" : { + "type" : "object", + "properties" : { + "id" : { + "type" : "string", + "description" : "AccessProfile ID", + "readOnly" : true + }, + "name" : { + "type" : "string", + "description" : "name of the accessprofile" + }, + "description" : { + "type" : "string", + "description" : "description of the accessprofile" + }, + "privilege" : { + "description" : "functional privileges assigned to the accessprofile", + "$ref" : "#/definitions/BitSet" + }, + "userIds" : { + "type" : "array", + "description" : "list of groupIds assigned to the accessprofile", + "items" : { + "type" : "string" + } + } + }, + "description" : "This model contains details about an Access Profile in API Gateway" + }, + "BitSet" : { + "type" : "object", + "properties" : { + "empty" : { + "type" : "boolean" + } + } + }, + "UnlockAccounts" : { + "type" : "object", + "properties" : { + "userName" : { + "type" : "array", + "description" : "Username that needs to be unlocked.", + "items" : { + "type" : "string" + } + } + } + }, + "UnlockAccountsRequest" : { + "type" : "object", + "properties" : { + "unLockAccounts" : { + "description" : "Specifies the accounts to be unlocked.", + "$ref" : "#/definitions/UnlockAccounts" + } + } + }, + "LockedAccounts" : { + "type" : "object", + "properties" : { + "lockedAccounts" : { + "type" : "array", + "description" : "Comma separated list of user accounts which are locked.", + "items" : { + "type" : "string" + } + } + } + } + } +} \ No newline at end of file From 9fa43c0b5f2d557903e7797df3bbd87bd63dbdd0 Mon Sep 17 00:00:00 2001 From: Dhivakar Asokan <48990091+dhivakar-asokan@users.noreply.github.com> Date: Thu, 21 May 2020 20:33:30 +0530 Subject: [PATCH 16/22] Update README.md --- apigatewayservices/README.md | 1 - 1 file changed, 1 deletion(-) diff --git a/apigatewayservices/README.md b/apigatewayservices/README.md index 2c19e1a..3053931 100644 --- a/apigatewayservices/README.md +++ b/apigatewayservices/README.md @@ -12,7 +12,6 @@ Below are the list of swagger files for each of the components available in API - APIGatewayPromotionManagement.json - APIGatewayPublicServices.json - APIGatewaySearch.json - - APIGatewayServerInfoSwagger.json - APIGatewayServiceManagement.json - APIGatewayTransactionalEvent.json - APIGatewayUserManagementSwagger.json From 270b0994ae89a5c725b563f427d359ad19201784 Mon Sep 17 00:00:00 2001 From: vallabbharath Date: Fri, 22 May 2020 23:46:22 +0530 Subject: [PATCH 17/22] Removed k8s and docker from 10.3 (#16) * Delete README.md * Delete apigw-elasticsearch-cluster-kibana.yml * Delete kibana.yml * Delete README.md * Delete apigw-elasticsearch-cluster.yml * Delete README.md * Delete apigw-elasticsearch-no-cluster.yml * Delete 1. APIGateway_and_externalES.png * Delete 2. APIGateway_cluster_and_externalES.png * Delete 3. APIGateway_cluster_and_externalES_externalKibana.png * Delete APIGateway_and_externalES.png * Delete APIGateway_cluster.png * Delete APIGateway_cluster_and_externalES.png * Delete APIGateway_externalES_and_externalKibana.png * Delete .env * Delete README.md * Delete README.md * Delete README.md * Delete api-gateway-deployment-embedded-elasticsearch.yaml * Delete api-gateway-deployment-external-elasticsearch.yaml * Delete api-gateway-deployment-sidecar-elasticsearch.yaml * Delete Chart.yaml * Delete values.yaml * Delete _helpers.tpl * Delete deployment.yaml * Delete service.yaml --- samples/docker/README.md | 115 ------------ samples/docker/deploymentscripts/.env | 3 - samples/docker/deploymentscripts/README.md | 163 ------------------ .../README.md | 54 ------ .../apigw-elasticsearch-cluster-kibana.yml | 134 -------------- .../kibana.yml | 81 --------- .../apigw-elasticsearch-cluster/README.md | 42 ----- .../apigw-elasticsearch-cluster.yml | 115 ------------ .../apigw-elasticsearch-no-cluster/README.md | 35 ---- .../apigw-elasticsearch-no-cluster.yml | 53 ------ .../images/1. APIGateway_and_externalES.png | Bin 6362 -> 0 bytes .../2. APIGateway_cluster_and_externalES.png | Bin 16979 -> 0 bytes ..._cluster_and_externalES_externalKibana.png | Bin 16952 -> 0 bytes .../images/APIGateway_and_externalES.png | Bin 4849 -> 0 bytes .../images/APIGateway_cluster.png | Bin 15367 -> 0 bytes .../APIGateway_cluster_and_externalES.png | Bin 17760 -> 0 bytes ...IGateway_externalES_and_externalKibana.png | Bin 5027 -> 0 bytes .../kubernetes/deploymentscripts/README.md | 21 --- ...way-deployment-embedded-elasticsearch.yaml | 83 --------- ...way-deployment-external-elasticsearch.yaml | 91 ---------- ...eway-deployment-sidecar-elasticsearch.yaml | 122 ------------- .../helm/sag-apigateway/Chart.yaml | 5 - .../sag-apigateway/templates/_helpers.tpl | 45 ----- .../sag-apigateway/templates/deployment.yaml | 130 -------------- .../sag-apigateway/templates/service.yaml | 33 ---- .../helm/sag-apigateway/values.yaml | 64 ------- 26 files changed, 1389 deletions(-) delete mode 100644 samples/docker/README.md delete mode 100644 samples/docker/deploymentscripts/.env delete mode 100644 samples/docker/deploymentscripts/README.md delete mode 100644 samples/docker/deploymentscripts/apigw-elasticsearch-cluster-kibana/README.md delete mode 100644 samples/docker/deploymentscripts/apigw-elasticsearch-cluster-kibana/apigw-elasticsearch-cluster-kibana.yml delete mode 100644 samples/docker/deploymentscripts/apigw-elasticsearch-cluster-kibana/kibana.yml delete mode 100644 samples/docker/deploymentscripts/apigw-elasticsearch-cluster/README.md delete mode 100644 samples/docker/deploymentscripts/apigw-elasticsearch-cluster/apigw-elasticsearch-cluster.yml delete mode 100644 samples/docker/deploymentscripts/apigw-elasticsearch-no-cluster/README.md delete mode 100644 samples/docker/deploymentscripts/apigw-elasticsearch-no-cluster/apigw-elasticsearch-no-cluster.yml delete mode 100644 samples/docker/deploymentscripts/images/1. APIGateway_and_externalES.png delete mode 100644 samples/docker/deploymentscripts/images/2. APIGateway_cluster_and_externalES.png delete mode 100644 samples/docker/deploymentscripts/images/3. APIGateway_cluster_and_externalES_externalKibana.png delete mode 100644 samples/docker/deploymentscripts/images/APIGateway_and_externalES.png delete mode 100644 samples/docker/deploymentscripts/images/APIGateway_cluster.png delete mode 100644 samples/docker/deploymentscripts/images/APIGateway_cluster_and_externalES.png delete mode 100644 samples/docker/deploymentscripts/images/APIGateway_externalES_and_externalKibana.png delete mode 100644 samples/kubernetes/deploymentscripts/README.md delete mode 100644 samples/kubernetes/deploymentscripts/api-gateway-deployment-embedded-elasticsearch.yaml delete mode 100644 samples/kubernetes/deploymentscripts/api-gateway-deployment-external-elasticsearch.yaml delete mode 100644 samples/kubernetes/deploymentscripts/api-gateway-deployment-sidecar-elasticsearch.yaml delete mode 100644 samples/kubernetes/deploymentscripts/helm/sag-apigateway/Chart.yaml delete mode 100644 samples/kubernetes/deploymentscripts/helm/sag-apigateway/templates/_helpers.tpl delete mode 100644 samples/kubernetes/deploymentscripts/helm/sag-apigateway/templates/deployment.yaml delete mode 100644 samples/kubernetes/deploymentscripts/helm/sag-apigateway/templates/service.yaml delete mode 100644 samples/kubernetes/deploymentscripts/helm/sag-apigateway/values.yaml diff --git a/samples/docker/README.md b/samples/docker/README.md deleted file mode 100644 index ae68cdf..0000000 --- a/samples/docker/README.md +++ /dev/null @@ -1,115 +0,0 @@ -# Docker -Docker is an open-source technology that allows users to deploy applications to software containers. A Docker container is an instance of a Docker image, where the Docker image is the application, -including the file system and runtime parameters. - -You can create a Docker image from an installed and configured API Gateway instance and then run the Docker image as a Docker container. To facilitate running API Gateway in a Docker -container, API Gateway provides a script to use to build a Docker image and then load or push the resulting Docker image to a Docker registry. - -Support for API Gateway with Docker 18 and later is available on Linux and UNIX systems for which Docker provides native support. - -For details on Docker and container technology, see [Docker documentation](https://docs.docker.com) - -## Docker security - -Docker, by default, has introduced a number of security updates and features, which have made Docker easier to use in an enterprise. There are certain guidelines or best practices that apply to the following layers of the Docker technology stack, that an organization can look at: -* Docker image and registry configuration -* Docker container runtime configuration -* Host configuration - -For detailed guidelines on security best practices, see the official Docker Security documentation at https://docs.docker.com/engine/security/security/. - -Docker has also developed Docker Bench, a script that can test containers and their hosts' security configurations against a set of best practices provided by the Center for Internet Security. For details, see https://github.com/docker/docker-bench-security. - -For details on how to establish a secure configuration baseline for the Docker Engine, see [Center for Information Security (CIS) Docker Benchmark](https://www.cisecurity.org/benchmark/docker/) (Docker CE 17.06). - -For information on the potential security concerns associated with the use of containers and -recommendations for addressing these concerns, see [NIST SP 800](https://csrc.nist.gov/publications/sp800) publication (Application Container Security Guide) - -## API Gateway Docker Images -The API Gateway Docker image provides an API Gateway installation. Depending on the existing installation the image provides a standard API Gateway or an advanced API Gateway. When running the image the API Gateway is started. The API Gateway image is created on top of an Integration Server image. - -### Prerequisites for Building a Docker Image -Prior to building a Docker image for API Gateway, you must complete the following: -* Install Docker client on the machine on which you are going to install API Gateway and start Docker as a daemon. The Docker client should have connectivity to Docker server to create images. -* Install API Gateway, packages, and fixes on a Linux or UNIX system and then configure API Gateway and the hosted products. - -### Building an API Gateway Docker Image -To build a Docker image for an API Gateway instance, follow the below steps. Refer API Gateway Configuration Guide document for more information about how to provide the optional arguments. - -1. Go to the /IntegrationServer/docker directory - - ``` cd IntegrationServer/docker ``` - -2. Create a docker file for the Integration Server (IS) instance by running the following command: - - ``` ./is_container.sh createDockerfile [optional arguments] ``` - -3. Build the IS Docker image using the Docker file Dockerfile_IS by running the following command: - - ``` ./is_container.sh build [optional arguments] ``` - -4. Create a Docker file for the API Gateway instance from the IS image is:micro by running the following command: - - ``` ./apigw_container.sh createDockerfile [optional arguments] ``` - - The Docker file is created under the root Integration Server installation directory. - -5. Build the API Gateway Docker image using the core Docker file Dockerfile_IS_APIGW by running the following command: - - ``` ./apigw_container.sh build [optional arguments] ``` - - -The image is stored on the Docker host. To check the image run the command - -` $ docker images ` - - -The Docker images created using above steps feature the following: -* Docker logging. - - API Gateway Docker containers log to stdout and stderr. The API Gateway logs can be fetched with Docker logs - -* Docker health check - - API Gateway Docker containers perform health checks. You can use wget request against the API Gateway REST API to check the health status of API Gateway. - - Example: ``` HEALTHCHECK CMD curl http://localhost:5555/rest/apigateway/health ``` - -* Graceful shutdown. - - Docker stop issues a SIGTERM to the running API Gateway. - -## Running the API Gateway Container -Start the API Gateway image using the docker run command: - -``` docker run -d -p 5555:5555 -p 9072:9072 -name apigw is:apigw ``` - -The docker run is parameterized with the IS and the webApp port exposed by the Docker container. Follow the below section "Retrieving Port Information of the API Gateway Image" to get the port information from the API Gateway image. - -The status of the Docker container can be determined by running the docker ps command: - -``` docker ps ``` - -### Retrieving Port Information of the API Gateway Image -To retrieve the port information of the API Gateway image (is:apigw), run the following command: - -``` docker inspect --format='{{range $p, $conf := .Config.ExposedPorts}} {{$p}} {{end}}' is:apigw ``` - -A sample output looks as follows: - -``` 5555/tcp 9072/tcp 9999/tcp ``` - -### Stopping the API Gateway Container -Stop the API Gateway container using the docker stop command: - -``` docker stop -t90 apigw ``` - -The docker stop is parameterized with the number of seconds required for a graceful shutdown of the API Gateway and the API Gateway Docker container name. - -**Note**: The docker stop does not destroy the state of the API Gateway. On restarting the Docker container all assets that have been created or configured are available again. - - -### Managing API Gateway Images -You can manage the API Gateway images using the `is_container.sh` script -* `saveImage` : To save an API Gateway image to a file (creating a tar ball from an image) -* `loadImage` : To load an image to a Docker registry (loading an image into a Docker registry from tar ball) diff --git a/samples/docker/deploymentscripts/.env b/samples/docker/deploymentscripts/.env deleted file mode 100644 index 1a26cf2..0000000 --- a/samples/docker/deploymentscripts/.env +++ /dev/null @@ -1,3 +0,0 @@ -APIGW_DOCKER_IMAGE_NAME=is:apigw -TERRACOTTA_DOCKER_IMAGE_NAME=is:tc -KIBANA_DOCKER_IMAGE_NAME=sag:kibana \ No newline at end of file diff --git a/samples/docker/deploymentscripts/README.md b/samples/docker/deploymentscripts/README.md deleted file mode 100644 index 12c11e2..0000000 --- a/samples/docker/deploymentscripts/README.md +++ /dev/null @@ -1,163 +0,0 @@ -# API Gateway Docker deployment scenarios - -Let us see some of the API Gateway Docker deployment scenarios below. - -## API Gateway Docker Container with Externalized Elasticsearch and Kibana -The best practices for Docker container specify having a single process per container. This allows to control the components of an API Gateway container and enables horizontal scaling. A full split results into three separate containers, one each for API Gateway, Elasticsearch and Kibana. Since Kibana is not scaled independently it can be included into the API Gateway container. - -### API Gateway Container with an Externalized Elasticsearch -The following figure depicts an API Gateway container with an externalized Elasticsearch where Kibana is included in the API Gateway container. - -![APIGateway_and_externalES.png](images/APIGateway_and_externalES.png) - -Do the following to set up API Gateway container with an external Elasticsearch: -1. **Run the external Elasticsearch.** - - You can start Elasticsearch container by using the Elasticsearch Docker image available on docker hub. The Elasticsearch version should be the same as used in API Gateway - - ``` docker run -p 9200:9240 -p 9300:9340 -e "xpack.security.enabled=false" -v es-data:/usr/share/elasticsearch/data docker.elastic.co/elasticsearch/elasticsearch:5.6.4``` - - Use the option `-e xpack.security.enabled=false` to disable basic authentication for Elasticsearch. This is the default option available in API Gateway. - - Use the volume mapping `-v es-data:/usr/share/elasticsearch/data` to persist the Elasticsearch data outside the Docker container. - -2. **Build API Gateway Docker image without Elasticsearch.** - - To create a Docker file or image for an API Gateway that does not contain Elasticsearch the `apigw_container.sh createDockerFile` and `apigw_container.sh build` command offer the following option: - - ```--extern.ES``` - - Setting the flag ensures that the InternalDataStore is not added to the Docker image created by the generated Docker file. - -3. **Run API Gateway Docker container.** - - Elasticsearch configuration can be injected into an existing API Gateway image during container startup. For example, let's take an existing API Gateway image `sag:apigw` - - ```docker run -d -p 5555:5555 -p 9072:9072 --env-file apigw-env.list --hostname apigw --name apigw sag:apigw``` - - The `apigw-env.list` in the above command contains the environment variables required for configuring an external Elasticsearch and External Kibana: - - ``` - apigw_elasticsearch_hosts=host:port - apigw_elasticsearch_https_enabled=("true" or "false") - apigw_elasticsearch_http_username=user - apigw_elasticsearch_http_password=password - ``` - - Instead of using the env file to change the environment variables, you can set them using -e options in the Docker run. For setting the Elasticsearch host the Docker run command looks as follows: - - ```docker run -d -p 5555:5555 -p 9072:9072 \ -e apigw_elasticsearch_hosts=testhost1:9200 \ --hostname apigw \ --name apigw sag:apigw``` - -### API Gateway Container with an External Elasticsearch and External Kibana - -The following figure depicts an API Gateway container with external Elasticsearch and external Kibana containers. - -![APIGateway_externalES_and_externalKibana.png](images/APIGateway_externalES_and_externalKibana.png) - -Do the following to set up API Gateway container with an external Elasticsearch and external Kibana: - -1. **Run the external Elasticsearch.** - - You can start Elasticsearch container by using the Elasticsearch Docker image available on docker hub. The Elasticsearch version should be the same as used in API Gateway - - ``` docker run -p 9200:9240 -p 9300:9340 -e "xpack.security.enabled=false" -v es-data:/usr/share/elasticsearch/data docker.elastic.co/elasticsearch/elasticsearch:5.6.4``` - - For more information on `-e xpack.security.enabled=false` and `-v es-data:/usr/share/elasticsearch/data` refer previous section. - -2. **Run the external Kibana** - - If you have modified the original Kibana, for example by adding a style sheet file, or modified the kibana.yml file, as per your requirements, then this customization of Kibana is bundled with API Gateway. This customized Kibana is provided under the directory: profiles/IS_default/apigateway/dashboard. To achieve this, create and run a Docker image based on the customization. This can be achieved by a Docker file as follows: - - ``` - FROM centos:7 - COPY /opt/softwareag/profiles/IS_default/apigateway/dashboard /opt/softwareag/kibana - EXPOSE 9405 - RUN chmod 777 /opt/softwareag/kibana/bin/kibana - CMD /opt/softwareag/kibana/bin/kibana - ``` - - Build and run the Docker file as follows: - - ``` - docker build -t sagkibana . - docker run -p 9405:9405 sagkibana - ``` - -3. **Run API Gateway Docker container** - - To run a Docker image for an API Gateway running against an external Kibana the Docker run can be called with the following environment variable which can be used with the -e option or using the env file (discussed in previous examples) - - ```apigw_kibana_dashboardInstance=instance``` - -## API Gateway Container Cluster Configuration - -You can combine API Gateway Docker containers to form a cluster. To configure an API Gateway Docker container cluster: - -1. **Configure loadbalancer on the Docker host.** - -2. **Configure Terracotta Server Array.** - API Gateway requires a Terracotta Server Array installation. For details, see Terracotta documentation (https://www.terracotta.org/). The Terracotta Server Array on its own can be deployed as a Docker container. - -3. **Create the basic API Gateway Docker image.** -For details on creating the API Gateway Docker image, see [API Gateway Docker Images](../#api-gateway-docker-images) - -4. **Create cluster API Gateway Docker image and enhance it with the cluster configuration in one of the following ways:** - - * Clustered all-in-one containers that consist of API Gateway, Elasticsearch, and Kibana. - - * Clustered API Gateway containers with externalized Elasticsearch and Kibana containers. - -### Clustered all-in-one Containers that consist of API Gateway, Kibana and Elasticsearch -Although API Gateway clusters with externalized Elasticsearch is the preferred approach API Gateway all-in-one containers can also be clustered. - -`Note: Having external Kibana is an optional variation.` - -The following diagram depicts clustering based on all-in-one containers. - -![APIGateway_cluster.png](images/APIGateway_cluster.png) - -The all-in-one containers hold API Gateway, Kibana and Elasticsearch. The clustering is done through a Terracotta Server Array and the cluster capabilities of the embedded Elasticsearch instances. - -The required settings for the cluster configuration can be injected during Docker run through an environment file. A sample environment file looks as follows. - -``` -apigw_cluster_tsaUrls=tc:9510 -apigw_terracotta_license_filename=terracotta-license.key -apigw_discovery_zen_ping_unicast_hosts=apigw1:9340,apigw2:9340,apigw3:9340 -``` - -### Clustered API Gateway Containers with externalized Elasticsearch and Kibana containers - -The API Gateway containers are clustered. They are talking to a clustered Terracotta Server Array container and to a cluster of Elasticsearch container through a loadbalancer. The Elasticsearch loadbalancer is also providing the Elasticsearch endpoint for the Kibana containers - -`Note: The externalized Kibana is optional. You can still run Kibana within the API Gateway container.` - -The following diagram depicts clustering API Gateway containers with externalized Elasticsearch and Kibana containers - -![APIGateway_cluster.png](images/APIGateway_cluster_and_externalES.png) - -To cluster the API Gateway with external containers for Elasticsearch, Kibana, and Terracotta Server Array, the settings can be injected into an API Gateway Docker image by providing an environment file. The environment file needs to define the following environment variables. - -``` -apigw_cluster_tsaUrls=host:port -apigw_terracotta_license_filename=license-key-filename -apigw_elasticsearch_hosts=host:port -apigw_elasticsearch_http_username=user -apigw_elasticsearch_http_password=password -apigw_kibana_dashboardInstance=instance -``` - -# Running API Gateway Docker Containers with Docker Compose - -You can run API Gateway Docker containers and use Docker Compose's ability to allow you to define and run multi-container Docker applications in your deployment environment. The API Gateway installation provides sample Docker Compose files in the folder given below. - -`SAG_Root/IntegrationServer/instances/default/packages/WmAPIGateway/resources/samples/docker-compose` - -The API Gateway installation provides the following three sample Docker Compose files: -* apigw-elasticsearch-no-cluster.yml : An API Gateway instance with an Elasticsearch containter. - -* apigw-elasticsearch-cluster.yml : An API Gateway cluster with three API Gateway containers, three clustered Elasticsearch containers and a Terracotta container. - -* apigw-elasticsearch-cluster-kibana.yml : Containers of an API Gateway cluster and a Kibana container. - -The Docker Compose files can be parameterized through environment variables. diff --git a/samples/docker/deploymentscripts/apigw-elasticsearch-cluster-kibana/README.md b/samples/docker/deploymentscripts/apigw-elasticsearch-cluster-kibana/README.md deleted file mode 100644 index f81de65..0000000 --- a/samples/docker/deploymentscripts/apigw-elasticsearch-cluster-kibana/README.md +++ /dev/null @@ -1,54 +0,0 @@ -# Running Clustered API Gateway and Elasticsearch Containers and a Kibana Container - -In this deployment scenario you can use the sample Docker Compose file apigw-elasticsearch-cluster-kibana.yml. - -The figure depicts clustered API Gateway containers. They are talking to a clustered Terracotta Server Array container, a cluster of Elasticsearch container and an external Kibana. - -![APIGateway_cluster_and_externalES_externalKibana.png](../images/3.%20APIGateway_cluster_and_externalES_externalKibana.png) - -To run clustered API Gateway and Elasticsearch containers, and a Kibana container, follow the belowing steps. - -1. Set the environment variables to define the API Gateway, Terracotta, and the Kibana image as follows: - - ``` - export APIGW_DOCKER_IMAGE_NAME=image name or filepath location of an existing image - export TERRACOTTA_DOCKER_IMAGE_NAME=terracotta image name - export KIBANA_DOCKER_IMAGE_NAME=kibana image name - ``` - - The composite file requires an API Gateway Docker image. You can create the referenced image through API Gateway scripting. For details on creating a Docker image, see [API Gateway Docker Images](../../#api-gateway-docker-images). - - You can create the Terracotta image as follows: - - ``` - cd /opt/softwareag - docker build --file Terracotta/docker/images/server/Dockerfile –tag is:tc - ``` - - Specify the API Gateway image by changing the .env file. API Gateway uses the .env file when the working directory is .../samples/docker-compose, else you must specify the environment variables. - - API Gateway requires a customized Kibana image. The Docker file for creating the Kibana image is as follows: - ``` - FROM centos:7 - COPY /opt/softwareag/profiles/IS_default/apigateway/dashboard /opt/softwareag/kibana - EXPOSE 9405 - RUN chmod 777 /opt/softwareag/kibana/bin/kibana - CMD /opt/softwareag/kibana/bin/kibana - ``` - -2. Run the following command to start the API Gateway Docker container and the Elasticsearch container using the Docker Compose sample file: - - ``` - cd SAG-Root/IntegrationServer/instances/default/packages/WmAPIGateway/resources/samples/docker-compose - docker-compose -f apigw-elasticsearch-cluster-kibana.yml up - ``` - - In the Docker Compose sample file apigw-elasticsearch-cluster-kibana.yml ensure that you have specified the required information such as image name, name and port of the Elasticsearch host, server port, UI port, and Kibana dashboard instance details. This creates and starts the containers. Run the `docker ps` command to view the details of the containers created. - - To run it in the detached mode, append -d in the docker-compose command. - - ``` - Note: You can stop the API Gateway Docker container and the Elasticsearch container using the - docker-compose sample file with the following command: - docker-compose -f apigw-elasticsearch-cluster-kibana.yml down - ``` diff --git a/samples/docker/deploymentscripts/apigw-elasticsearch-cluster-kibana/apigw-elasticsearch-cluster-kibana.yml b/samples/docker/deploymentscripts/apigw-elasticsearch-cluster-kibana/apigw-elasticsearch-cluster-kibana.yml deleted file mode 100644 index 8a2f1fc..0000000 --- a/samples/docker/deploymentscripts/apigw-elasticsearch-cluster-kibana/apigw-elasticsearch-cluster-kibana.yml +++ /dev/null @@ -1,134 +0,0 @@ -# This docker-compose file is an example for a setup with an API Gateway cluster with three containers, an Elasticsearch cluster with three containers, an external Kibana container and a Terracotta container. -# The Kibana image needs to be a modified version. See the API Gateway configuration guide how to create one. -# The image names of API Gateway, Terracotta and Kibana can be altered by modifying the .env file when the file is in the working directory or by setting the environment variable APIGW_DOCKER_IMAGE_NAME, TERRACOTTA_DOCKER_IMAGE_NAME and KIBANA_DOCKER_IMAGE_NAME. -# To use this file run: docker-compose -f apigw-elasticsearch-cluster-kibana.yml up -# Append -d to run it in detached mode. -# To stop and remove containers, networks, volumes and images created by up, run: docker-compose -f apigw-elasticsearch-cluster-kibana.yml down -version: '3.5' -services: - terracotta: - # Image name - image: ${TERRACOTTA_DOCKER_IMAGE_NAME} - # Container name - container_name: terracotta - # Setting for exposing ports to the outside (external port:internal port). - ports: - - 9510:9510 - # Needs to be the same network for all containers. - networks: - - api-gateway-network - apigateway1: - image: ${APIGW_DOCKER_IMAGE_NAME} - container_name: api-gateway-01 - environment: - # Name and port of the Terracotta container. - - apigw_cluster_tsaUrls=terracotta:9510 - # License file name for Terracotta. - - apigw_terracotta_license_filename=terracotta-license.key - # Name and port of the REST interface of an Elasticsearch container - # Or a loadbalancer which directs to the REST interace of the Elasticsearch containers. - - apigw_elasticsearch_hosts=elasticsearch:9200 - # HTTPS enablement. - - apigw_elasticsearch_https_enabled=false - # Username and password for Elasticsearch. As standard leave it blank. - - apigw_elasticsearch_http_username= - - apigw_elasticsearch_http_password= - # Name and port of the Kibana container. - - apigw_kibana_dashboardInstance=http://kibana:9405 - ports: - # Server port - - 5555:5555 - # UI port - - 9072:9072 - networks: - - api-gateway-network - apigateway2: - image: ${APIGW_DOCKER_IMAGE_NAME} - container_name: api-gateway-02 - environment: - - apigw_cluster_tsaUrls=terracotta:9510 - - apigw_terracotta_license_filename=terracotta-license.key - - apigw_elasticsearch_hosts=elasticsearch:9200 - - apigw_elasticsearch_https_enabled=false - - apigw_elasticsearch_http_username= - - apigw_elasticsearch_http_password= - - apigw_kibana_dashboardInstance=http://kibana:9405 - ports: - - 5556:5555 - - 9073:9072 - networks: - - api-gateway-network - apigateway3: - image: ${APIGW_DOCKER_IMAGE_NAME} - container_name: api-gateway-03 - environment: - - apigw_cluster_tsaUrls=terracotta:9510 - - apigw_terracotta_license_filename=terracotta-license.key - - apigw_elasticsearch_hosts=elasticsearch:9200 - - apigw_elasticsearch_https_enabled=false - - apigw_elasticsearch_http_username= - - apigw_elasticsearch_http_password= - - apigw_kibana_dashboardInstance=http://kibana:9405 - ports: - - 5557:5555 - - 9074:9072 - networks: - - api-gateway-network - elasticsearch: - image: docker.elastic.co/elasticsearch/elasticsearch:7.2.0 - container_name: elasticsearch - # Elasticsearch settings - environment: - # Important when you have several Elasticsearch containers. They need to be in the same network. Should be a different name than in other environments. - - cluster.name=SAG_EventDataStore - # The node name. Used for inital master node discovery. - - node.name=elasticsearch - # For discovery of all Elasticsearch containers. - - discovery.seed_hosts=elasticsearch:9300,elasticsearch2:9300,elasticsearch3:9300 - # Used for cluster bootstrapping. The mentioned nodes are potential master nodes. - - cluster.initial_master_nodes=elasticsearch,elasticsearch2,elasticsearch3 - ports: - # REST interface - - 9240:9200 - # Nodes communication - - 9340:9300 - networks: - - api-gateway-network - elasticsearch2: - image: docker.elastic.co/elasticsearch/elasticsearch:7.2.0 - container_name: elasticsearch2 - environment: - - cluster.name=SAG_EventDataStore - - node.name=elasticsearch2 - - discovery.seed_hosts=elasticsearch:9300,elasticsearch2:9300,elasticsearch3:9300 - - cluster.initial_master_nodes=elasticsearch,elasticsearch2,elasticsearch3 - networks: - - api-gateway-network - elasticsearch3: - image: docker.elastic.co/elasticsearch/elasticsearch:7.2.0 - container_name: elasticsearch3 - environment: - - cluster.name=SAG_EventDataStore - - node.name=elasticsearch3 - - discovery.seed_hosts=elasticsearch:9300,elasticsearch2:9300,elasticsearch3:9300 - - cluster.initial_master_nodes=elasticsearch,elasticsearch2,elasticsearch3 - networks: - - api-gateway-network - kibana: - image: ${KIBANA_DOCKER_IMAGE_NAME} - container_name: kibana - volumes: - # The local kibana.yml is used instead of the one in /usr/src/sag_kibana/config/. - - ./kibana.yml:/usr/src/sag_kibana/config/kibana.yml - networks: - - api-gateway-network - # Kibana starts after Elasticsearch but doesn't wait until Elasticsearch is ready - depends_on: - - elasticsearch - ports: - - 9405:9405 - -networks: - api-gateway-network: - # For setting a specific network name. - name: api-gateway-network diff --git a/samples/docker/deploymentscripts/apigw-elasticsearch-cluster-kibana/kibana.yml b/samples/docker/deploymentscripts/apigw-elasticsearch-cluster-kibana/kibana.yml deleted file mode 100644 index 20a109e..0000000 --- a/samples/docker/deploymentscripts/apigw-elasticsearch-cluster-kibana/kibana.yml +++ /dev/null @@ -1,81 +0,0 @@ -# Kibana is served by a back end server. This controls which port to use. - server.port: 9405 - -# The host to bind the server to. - server.host: "0.0.0.0" - -# If you are running kibana behind a proxy, and want to mount it at a path, -# specify that path here. The basePath can't end in a slash. - server.basePath: "/apigatewayui/dashboardproxy" - -# The maximum payload size in bytes on incoming server requests. -# server.maxPayloadBytes: 1048576 - -# The Elasticsearch instance to use for all your queries. - elasticsearch.hosts: http://elasticsearch:9200 - -# preserve_elasticsearch_host true will send the hostname specified in `elasticsearch`. If you set it to false, -# then the host you use to connect to *this* Kibana instance will be sent. -# elasticsearch.preserveHost: true - -# Kibana uses an index in Elasticsearch to store saved searches, visualizations -# and dashboards. It will create a new index if it doesn't already exist. - kibana.index: "gateway_default_dashboard" - -# The default application to load. -# kibana.defaultAppId: "discover" - -# If your Elasticsearch is protected with basic auth, these are the user credentials -# used by the Kibana server to perform maintenance on the kibana_index at startup. Your Kibana -# users will still need to authenticate with Elasticsearch (which is proxied through -# the Kibana server) -# elasticsearch.username: "Administrator" -# elasticsearch.password: "manage" - -# SSL for outgoing requests from the Kibana Server to the browser (PEM formatted) -# server.ssl.cert: /path/to/your/server.crt -# server.ssl.key: /path/to/your/server.key - -# Optional setting to validate that your Elasticsearch backend uses the same key files (PEM formatted) -# elasticsearch.ssl.cert: /path/to/your/client.crt -# elasticsearch.ssl.key: /path/to/your/client.key - -# If you need to provide a CA certificate for your Elasticsearch instance, put -# the path of the pem file here. -# elasticsearch.ssl.ca: /path/to/your/CA.pem - -# Set to false to have a complete disregard for the validity of the SSL -# certificate. -# elasticsearch.ssl.verify: false - -# Time in milliseconds to wait for elasticsearch to respond to pings, defaults to -# request_timeout setting -# elasticsearch.pingTimeout: 1500 - -# Time in milliseconds to wait for responses from the back end or elasticsearch. -# This must be > 0 -# elasticsearch.requestTimeout: 30000 - -# Time in milliseconds for Elasticsearch to wait for responses from shards. -# Set to 0 to disable. -# elasticsearch.shardTimeout: 0 - -# Time in milliseconds to wait for Elasticsearch at Kibana startup before retrying -# elasticsearch.startupTimeout: 5000 - -# Set the path to where you would like the process id file to be created. - pid.file: kibana.pid - -# If you would like to send the log output to a file you can set the path below. -# logging.dest: stdout - -# Set this to true to suppress all logging output. -# logging.silent: false - -# Set this to true to suppress all logging output except for error messages. -# logging.quiet: false - -# Set this to true to log all events, including system usage information and all requests. -# logging.verbose: false - console.enabled: false - timelion.enabled: false diff --git a/samples/docker/deploymentscripts/apigw-elasticsearch-cluster/README.md b/samples/docker/deploymentscripts/apigw-elasticsearch-cluster/README.md deleted file mode 100644 index b6f8998..0000000 --- a/samples/docker/deploymentscripts/apigw-elasticsearch-cluster/README.md +++ /dev/null @@ -1,42 +0,0 @@ -# Running Clustered API Gateway Containers and Elasticsearch Containers - -In this deployment scenario you can use the sample Docker Compose file apigw-elasticsearch-cluster.yml. - -The following diagram depicts a set-up that has clustered API Gateway containers and Elasticsearch containers. - -![APIGateway_cluster_and_externalES.png](../images/2.%20APIGateway_cluster_and_externalES.png) - -To run clustered API Gateway containers and Elasticsearch containers - -1. Set the environment variables to define image for the API Gateway Docker container and Terracotta as follows: - - ``` - export APIGW_DOCKER_IMAGE_NAME=image name or filepath location of an existing image - export TERRACOTTA_DOCKER_IMAGE_NAME=terracotta image name - ``` - - The composite file requires an API Gateway Docker image. You can create the referenced image through API Gateway scripting. For details on creating a Docker image, see [API Gateway Docker Images](../../#api-gateway-docker-images). - - You can create the Terracotta image as follows: - - ``` - cd /opt/softwareag - docker build --file Terracotta/docker/images/server/Dockerfile –tag is:tc - ``` - -Specify the API Gateway image by changing the .env file. API Gateway uses the .env file when the working directory is .../samples/docker-compose, else you must specify the environment variables. - -2. Run the following command to start Terracotta, clustered API Gateway, and Elasticsearch containers using the Docker Compose sample file: - - ```cd SAG-Root/IntegrationServer/instances/default/packages/WmAPIGateway/resources/samples/docker-compose - docker-compose -f apigw-elasticsearch-cluster.yml up - ``` - - In the Docker Compose sample file apigw-elasticsearch-cluster.yml ensure that you have specified the required information such as image name, name and port of the Elasticsearch host, server port, and UI port. This creates and starts the containers. Run the `docker ps` command to view the details of the containers created. - -To run it in the detached mode, append -d in the docker-compose command. - -``` -Note: You can stop the API Gateway Docker container and the Elasticsearch container using the Docker Compose sample file with the following command: -docker-compose -f apigw-elasticsearch-cluster.yml down -``` diff --git a/samples/docker/deploymentscripts/apigw-elasticsearch-cluster/apigw-elasticsearch-cluster.yml b/samples/docker/deploymentscripts/apigw-elasticsearch-cluster/apigw-elasticsearch-cluster.yml deleted file mode 100644 index 228fed9..0000000 --- a/samples/docker/deploymentscripts/apigw-elasticsearch-cluster/apigw-elasticsearch-cluster.yml +++ /dev/null @@ -1,115 +0,0 @@ -# This docker-compose file is an example for a setup with an API Gateway cluster with three containers, an Elasticsearch cluster with three containers and a Terracotta container. -# The image names of API Gateway and Terracotta can be set by modifying the .env file when the file is in the working directory or by setting the environment variable APIGW_DOCKER_IMAGE_NAME and TERRACOTTA_DOCKER_IMAGE_NAME. -# To use this file run: docker-compose -f apigw-elasticsearch-cluster.yml up -# Append -d to run it in detached mode. -# To stop and remove containers, networks, volumes and images created by up run: docker-compose -f apigw-elasticsearch-cluster.yml down -version: '3.5' -services: - terracotta: - # Image name - image: ${TERRACOTTA_DOCKER_IMAGE_NAME} - # Container name - container_name: terracotta - # Setting for exposing ports to the outside (external port:internal port). - ports: - - 9510:9510 - # Needs to be the same network for all containers. - networks: - - api-gateway-network - apigateway1: - image: ${APIGW_DOCKER_IMAGE_NAME} - container_name: api-gateway-01 - environment: - # Name and port of the Terracotta container. - - apigw_cluster_tsaUrls=terracotta:9510 - # License file name for Terracotta. - - apigw_terracotta_license_filename=terracotta-license.key - # Name and port of the REST interface of an Elasticsearch container - # Or a loadbalancer which directs to the REST interace of the Elasticsearch containers. - - apigw_elasticsearch_hosts=elasticsearch:9200 - # HTTPS enablement. - - apigw_elasticsearch_https_enabled=false - # Username and password for Elasticsearch. As standard leave it blank. - - apigw_elasticsearch_http_username= - - apigw_elasticsearch_http_password= - ports: - # Server port - - 5555:5555 - # UI port - - 9072:9072 - networks: - - api-gateway-network - apigateway2: - image: ${APIGW_DOCKER_IMAGE_NAME} - container_name: api-gateway-02 - environment: - - apigw_cluster_tsaUrls=terracotta:9510 - - apigw_terracotta_license_filename=terracotta-license.key - - apigw_elasticsearch_hosts=elasticsearch:9200 - - apigw_elasticsearch_https_enabled=false - - apigw_elasticsearch_http_username= - - apigw_elasticsearch_http_password= - ports: - - 5556:5555 - - 9073:9072 - networks: - - api-gateway-network - apigateway3: - image: ${APIGW_DOCKER_IMAGE_NAME} - container_name: api-gateway-03 - environment: - - apigw_cluster_tsaUrls=terracotta:9510 - - apigw_terracotta_license_filename=terracotta-license.key - - apigw_elasticsearch_hosts=elasticsearch:9200 - - apigw_elasticsearch_https_enabled=false - - apigw_elasticsearch_http_username= - - apigw_elasticsearch_http_password= - ports: - - 5557:5555 - - 9074:9072 - networks: - - api-gateway-network - elasticsearch: - image: docker.elastic.co/elasticsearch/elasticsearch:7.2.0 - container_name: elasticsearch - # Elasticsearch settings - environment: - # Important when you have several Elasticsearch containers. They need to be in the same network. Should be a different name than in other environments. - - cluster.name=SAG_EventDataStore - # The node name. Used for inital master node discovery. - - node.name=elasticsearch - # For discovery of all Elasticsearch containers. - - discovery.seed_hosts=elasticsearch:9300,elasticsearch2:9300,elasticsearch3:9300 - # Used for cluster bootstrapping. The mentioned nodes are potential master nodes. - - cluster.initial_master_nodes=elasticsearch,elasticsearch2,elasticsearch3 - ports: - # REST interface - - 9240:9200 - # Nodes communication - - 9340:9300 - networks: - - api-gateway-network - elasticsearch2: - image: docker.elastic.co/elasticsearch/elasticsearch:7.2.0 - container_name: elasticsearch2 - environment: - - cluster.name=SAG_EventDataStore - - node.name=elasticsearch2 - - discovery.seed_hosts=elasticsearch:9300,elasticsearch2:9300,elasticsearch3:9300 - - cluster.initial_master_nodes=elasticsearch,elasticsearch2,elasticsearch3 - networks: - - api-gateway-network - elasticsearch3: - image: docker.elastic.co/elasticsearch/elasticsearch:7.2.0 - container_name: elasticsearch3 - environment: - - cluster.name=SAG_EventDataStore - - node.name=elasticsearch3 - - discovery.seed_hosts=elasticsearch:9300,elasticsearch2:9300,elasticsearch3:9300 - - cluster.initial_master_nodes=elasticsearch,elasticsearch2,elasticsearch3 - networks: - - api-gateway-network -networks: - api-gateway-network: - # For setting a specific network name. - name: api-gateway-network diff --git a/samples/docker/deploymentscripts/apigw-elasticsearch-no-cluster/README.md b/samples/docker/deploymentscripts/apigw-elasticsearch-no-cluster/README.md deleted file mode 100644 index 2750911..0000000 --- a/samples/docker/deploymentscripts/apigw-elasticsearch-no-cluster/README.md +++ /dev/null @@ -1,35 +0,0 @@ -# Running a Single API Gateway and an Elasticsearch Container - -You can run a single API Gateway and an Elasticsearch container using Docker Compose. In this deployment scenario you can use the sample Docker Compose file `apigw-elasticsearch-no-cluster.yml`. - -The following figure depicts an API Gateway container with an externalized Elasticsearch where Kibana is included in the API Gateway container. - -![APIGateway_and_externalES.png](../images/1.%20APIGateway_and_externalES.png) - -To deploy a single API Gateway and an Elasticsearch container, follow the below steps - -1. Set the environment variables to define the image for the API Gateway container as follows: - - ```export APIGW_DOCKER_IMAGE_NAME=image name or filepath location of an existing image``` - - The composite file requires an API Gateway Docker image. You can create the referenced image through API Gateway scripting. For details on creating a Docker image, see [API Gateway Docker Images](../../#api-gateway-docker-images). - - The Docker Compose file references the standard Elasticsearch 7.2image: docker.elastic.co/elasticsearch/elasticsearch:7.2.0 - - Specify the API Gateway image by changing the .env file. API Gateway uses the .env file when the working directory is .../samples/docker-compose, else you must specify the environment variables. - -2. Run the following command to start the API Gateway Docker container and the Elasticsearch container using the Docker Compose sample file: - - ``` - cd SAG-Root/IntegrationServer/instances/default/packages/WmAPIGateway/resources/samples/docker-compose - docker-compose -f apigw-elasticsearch-no-cluster.yml up - ``` - - In the Docker Compose sample file `apigw-elasticsearch-no-cluster.yml` ensure that you have specified the required information such as image name, name and port of the Elasticsearch host, server port, and UI port. This creates and starts the containers. Run the `docker ps` command to view the details of the containers created. - - To run it in the detached mode, append -d in the docker-compose command. - ``` - Note: You can stop the API Gateway Docker container and the Elasticsearch container using the Docker Compose sample file with the following command: - docker-compose -f apigw-elasticsearch-no-cluster.yml down - ``` - diff --git a/samples/docker/deploymentscripts/apigw-elasticsearch-no-cluster/apigw-elasticsearch-no-cluster.yml b/samples/docker/deploymentscripts/apigw-elasticsearch-no-cluster/apigw-elasticsearch-no-cluster.yml deleted file mode 100644 index 4a38c7e..0000000 --- a/samples/docker/deploymentscripts/apigw-elasticsearch-no-cluster/apigw-elasticsearch-no-cluster.yml +++ /dev/null @@ -1,53 +0,0 @@ -# This docker-compose file is an example for a setup with a single API Gateway container and a single Elasticsearch container. -# The image name of API Gateway can be set by modifying the .env file when the file is in the working directory or by setting the environment variable APIGW_DOCKER_IMAGE_NAME. -# To use this file run: docker-compose -f apigw-elasticsearch-no-cluster.yml up -# Append -d to run it in detached mode. -# To stop and remove containers, networks, volumes and images created by up run: docker-compose -f apigw-elasticsearch-no-cluster.yml down -version: '3.5' -services: - apigateway: - # Image name - image: ${APIGW_DOCKER_IMAGE_NAME} - # Container name - container_name: api-gateway-01 - environment: - # Name and port of the REST interface of the Elasticsearch container. - - apigw_elasticsearch_hosts=elasticsearch:9200 - # HTTPS enablement. - - apigw_elasticsearch_https_enabled=false - # Username and password for Elasticsearch. As standard leave it blank. - - apigw_elasticsearch_http_username= - - apigw_elasticsearch_http_password= - # Setting for exposing ports to the outside (external port:internal port). - ports: - # Server port - - 5555:5555 - # UI port - - 9072:9072 - # Needs to be the same network for all containers. - networks: - - api-gateway-network - elasticsearch: - image: docker.elastic.co/elasticsearch/elasticsearch:7.2.0 - container_name: elasticsearch - # Elasticsearch settings - environment: - # Important when you have several Elasticsearch containers. They need to be in the same network. Should be a different name than in other environments. - - cluster.name=SAG_EventDataStore - # The node name. Used for inital master node discovery. - - node.name=elasticsearch - # For discovery of all Elasticsearch containers. - - discovery.seed_hosts=elasticsearch:9300 - # Used for cluster bootstrapping. The mentioned nodes are potential master nodes. - - cluster.initial_master_nodes=elasticsearch - ports: - # REST interface - - 9240:9200 - # Nodes communication - - 9340:9300 - networks: - - api-gateway-network -networks: - api-gateway-network: - # For setting a specific network name. - name: api-gateway-network diff --git a/samples/docker/deploymentscripts/images/1. APIGateway_and_externalES.png b/samples/docker/deploymentscripts/images/1. APIGateway_and_externalES.png deleted file mode 100644 index 0d9f7442fdf45aa8816d36d53bccbb1f47eb2fd1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6362 zcmeHMX;f3mw#HUL#e;x?=^P?r6i|^tqrs$wi-ZJ4pmA124Jbr`$Phq9KtW?rPM94* zTEd_$%A^=TCQ*<R z40R!BFZQ!P5~!l0%~1a4b$IHZS5ZNo+eNb3fByJTs#}g;U)c57QyFBJ1M63w3H^Bg z&xFv11AWi;n(ciUxyH_y^XQK({4>s)Lx`s1zQ;k>YjJN5RM}|WP;W)h-3tt`i%ehd zt&H~ji=OK$S1>R`mfFGWlESKW=j{- z7xWMGm_>YTFdE%BO20G?n+ea$3a52YdcsAGt}8pr-DUYkCoE;pbm=Jyo~wSzL{(w# zY>V5qt}5g&y@-C{u-T<{H&Y>Z_%DGP`$52MgGF3}ssnQUG8ymoU}Rv=*j>Dd;jN@W zr$zJW_MNBlLOPnDhIh8k5Bx)HjQwmEhPIa}tjoRWt)-*RdY19xC0&(}&fxo(nbpEP z#fzBUmpd(6MCZRrR$5Ishs-sl4V|_as`p+t+nM}%G&g_4SGrz_!a^pf?`{HclQ_XkJMi=&pMMU30&);gv9CLKFJ94Z;feZH1Y=hBXSkDl!?x{ZV#8Y;83 z#+1-C5f=UiW1z$a*Zm-zKoYG+^PH_Q=>T70_&~!B&myl`?tDERCSg<8XWKSG>G3T| z0t1OE&)&B{`XL~Sw$`$ZK`XYw@l!krSB0z5bxvC_I{`h(=#GXCpm#6dbNvQPih7)B z`x;8G@;NJw^NXUH;~z7whD6cw-1kZs$y9kK`=lAzJYaS~u#0jM&r)?wu_x>VqdMG2 z;%o5%@s^_jrV9A?dAowI)d+xtX6Fg7xi+}gFAJS1C_s5qm?vG-34Co`xeYT9nC8s= zlI1}IJ>JhROHp3{=bq_)f@%;5tE-;OwgHpP5k+QrSSn4*R!dP}dQ~MpQ;em(zzYU{ ziJ%H5m^TbtVr;nvFk+N8-P|s_*!gEzNO2v zqWIcB^jSFTjsIS9>GUuL3crykLu{B3GTTM3V&x(92$|kL3>dl`_ zxv*`PM-TmxU5~I$qL|XxD3^SyeU(diQrJmvRduNK6lumV%aYPjPqRB~PD)#I;Ill- z@b2%EZejN)$34fhJDI+B7(O4MD%woLp<%^)XK_zh*^$|3uEie0wgG0Rne)(0BSuy> zO_hDy@mG;s!Pc&X`5i+m!$w91+1kX|WDUzAU-_p`6FV|pf7$Z}YFClACc*bAvcJ!X z@MZE3f{xFjt(aC%quGg@FN;jY{i3b@J>9-9lX7qAyhe(lIJRT)!|71;gzZRqtL?df zniJ(iw{`@7IVbP!c3X!ZdA(vu7qh}K+XG8~H%C5C!xxN(CPa4cly)q{n|?WSVLiPH zin#AoOBQ~JVQ$KU`;IlHPPPq@M}2Xa*-`@-ay^MRwA#}=-k4Y%(*6KWjA~HpB){Eu zk3A=fLztT$!5wu&9Z9#F#-riW{ZArchoWM}*dQ|i=VKr`yvS}M;qltaZaGriMIPUF zoBcraJDa&F10LSWUvq5}mlq80rliqXlxp23q<%~299c*!g)%wL_%|G?dOvyM_-h3O zx#}j)1Pcf995Xn0{21uytC`8Ixz*osl`9^oL^Rq-go}Z;*65<&>7*@3@IGbP9DO`l z3xes4lmhraTSeglUKH#R&4lm-Cn545Eyy)iI`FlIl}@cj*n$vFErSu{LE`0gk!z); z)NdOxsY28toDY}h&++5rG8h3K$Nt@kyoOxOq%>L0z`vRBO}H$BQwDQxDud8X=&dE$ zoJ`mwhWT_Qek6jFy?QLoA02=V;Di#6mRQu#T1!geXZ?>lGov@$RJ68qf0}W5?e9aP zw-T~A2#iITPZQxj>n-i>T#Kpyg>J$Qij?V@{^S0A5!q()p1#vds*bVr-Xe3>HVL!u zM+y@AA`&0|z#g2X$>Rc#fk9+&^5GufEDBaPqJ1><>J^IpH_e7+z1>%M>0i_55j zg&OVQ{?pfly_`L{rn9ULN?OGJZ%7kjDy0q9oaa!zWlV*c!Kpu2>?dx?O_Y&!6ThMx z#iw7&goVBnt%GO0tP@7+^?9LlI}7I z)YM3*)Z*pfnW5)J)xzcdD+?qkecpYP6cI73Xl7ypehd%sd6h^$2=^8l>^=Tl^=^7n zxwDt6w5DYAV_3F$+l9g|c7D%L*KkDk^`~>JZIcCOy{ye1`Cx;pKdr$8iCC-AMNafq z!|X3Jb&{s0nOg})7rb_>$tC`CK81`szZL#sdD}Ft?EO2ed8mGZZy&`(!@Ry(NbL#Y z*b%;#XxZR=+(dUwh?IsT=MbaI9+LdJx}#S6Qje1TIo|Qr)?uPEZa=~+Xj#7Fl$0ff zGjClBk5%-4eraaG*KI$Xu@$xbyHNud0ms^G;%q(@D!A*8nhmktxgAGqolPNF9EZeY8w_@}R3rg%F(ocQ|F@MQ3D zMb{3sq4yyRWEQ%Ij4%!&mKi!m=SdD%Sf15jKE? zV-o+=iE<5OvCKjp>0cndm^^-Je_fg09{V04^eZi@HaXO$C@qTX8I4My?Ld}CztYD! z3rsQSSXcg*(M#8aYF;t+fc}`apRzbvkZ*@WZ9M2ytIIo?^J)#oRex^kX|Qx7rF;7R zNK8=M_vNvr44=FD6Z(N~iIMrZ5V_m3J6ihF@+jAdlKLa=xzArkp&WcAO;(EQhdNFY z^oZYuy`LZ3t9j7va3d$G*I{DX>Ur-(<^buVp^D**sC8CmX!0=AhHz9Cf4f}ax-3Op zA`hCKt(ld`w$Bz!_IPbGL)SDyeBQ;|VWS6REB1HfuDUSPxKYtFyFy#+j*Gbqt4eA4 z9%kWUCvJ#HUf~r!5iu=sNydxAC7)#x)#1<6tS;2ZkE|_!OG5?H+LsasE;7Z3-}yPFT*1U7jqWBl%Ma; zVKbu`Ic#Qr3j|sou}o|qBL`77qZs>5BWad=wSu7Ie);ygem@nHTrgiZaOg1;KdPEkLpM=#jZ1o(I_ji^i1KF)Y{k7Df1V6( zAM8wk52#I6s_9Qhhi#i1$=AP_wytel2jV<|$)}`wlc^Kh>A8$O&Bw*;WcsOCV~h*o zR5biiEu@c_E8$J$ZZW&?lc0vTuU&GZ@N;T~prJ2uyTJ2eb8r1?sa5fv6USv_Y3H*H zJ&2>G+^I3$gQ;;xI-T12bv`dkUVdX2ZxQEvh|Arkha7~DthmdgDb)kD5MN9GZzYQH zW&zLqV&Fd#>^lE{;q<~vYzW<#X_h}20Pwg@TQN4MDn$`VoIkuk6pQ05^4&SnYD~{H zT9QmEf&%ixRG3%o(P`Dp)T;NW|?4oY}HW^HU|El88u#> z$1{J;rN(I#U8I73uwr>S>Z>5^9dLu4Y|#A;O}59|t365CiHnJ&qcWm4IT@hICjm5S zs11Q{7hu&FO{xZ8Gt!f98R^uk%GotK8ljn2!A;thkxsQ&dNLUQK zld^Ro+jjsNT)?3&Dh3G72nE?T0HhPgq0*E{OV+Ot`1s<-x18co-zgD>Aq?5_0P-%0 zLp3e|$cijI$QE2*TC<>LWhoJ^(JILHGeEwBVs$`?9M0BHYUv6;EX2Q# zgiAWfhy83<3Kyx<2O?o=73AiJHQ_!~r(a$8U*rG()zIvIXw)p69B`OUzJPc7ZSw1( zitjta7pl&~U$vBfakgd*MM)yYZj~P8e*bjsWr)acW@?K>cmSm;{Lo#=+m}{4x;~`X zujjAtE3L=-5{EZ0Ri)FY(OmElBJk?SYXHv|tha9x5=6_YufPF%VKaTA6H`TQestx- ziEiTHD%1+$?{9?WwvCWF>+~D<1o6E2k?;-6b&bfA3F{vp61_%TsbIe(ebcZW628l= z?(8Hxg!^|%CWRN?BcX~@wsJ{xSnvGM;fjeu{c*bZgNFW(TKsVZbuKV!sgPE;JT~k- zvFxJwq&pY0{S{tOY@iKx|@*~QeuO+1Ixy18}(^w{?k(2&Wa)83#%;jBXaX=Mu+K)5Op91QKC4L-J z-apEE5D@5rAz=5^! zPX*lMlzM<`!D8p1nK zw4Bv17@akGB#*7TGUwwxHIWxDtc*AfP+j`k8(_c_%2Dkw!d~zi^W5+UBV$;VH?UJEwFmDdym+o4{y9wI5Vf+g zZs0M;jFiG=hz6|D*%L#p_X@tT!W=}&v)Kkis}9VUcMY|MY^dNHE6wMa>G8yPutczpQ*jreC|-l z&^^7h9q$KsO|&gLM+rYQr*#oq&sh7l<~DuSTYl6^-V!xEe%v^fBM|V3YDU>lOTFfZ zQ)3g01(am{AXjWhO`XoXR$8F;-a4WU;m5bh5rnJt?cDOrZ{(bclFjB? zift|>bQFByb395*(H5Bjk|-ux-mJTJ2vp-Gn*O+$763hso?DiYsVvaHXocXGg8I{! zWrbFy?^%s;jQ*)0_67jyjbs1F(1hmW1MDe|+R@A_@D_Ut=BHA7l&?eru7s)gx%%&NvzO3uS?7c33B7o`tDzf% zMuQ@LBn&EyfzbCpoRP*q{U|Te5iU- o7UH(%>Ob`Se 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 OKxvYXsud7V`u{)cSOe++ diff --git a/samples/docker/deploymentscripts/images/APIGateway_and_externalES.png b/samples/docker/deploymentscripts/images/APIGateway_and_externalES.png deleted file mode 100644 index 03c158e98280336b160c2cc018f461454562a99e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4849 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 diff --git a/samples/docker/deploymentscripts/images/APIGateway_cluster.png b/samples/docker/deploymentscripts/images/APIGateway_cluster.png deleted file mode 100644 index 6b65aed75af9e5306abf67f755592c8efea14787..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15367 zcmdVBXIN9+)-Jq47ZpTA6lscxih@Wdlqd+I0xAMh73sYMg7jFBqJp3Z0)a@CE=_s| z=^>$a6oG_}gkHZHp6%Yxe&79_>pkE1=bRs0Tv=IL;~XgT~^T+BFEu2|2iJObdP=aJ;FD zgrK7?lt0*rInPrFg2$*TU3>7!DZ$#nyqw9YbW8J)`iTjO2N#o*>8+{w)bX| zt%uL+-U!ms{VY`a<)P3=hM+5AU+=*_x!N@0WqPBGI^~(OppL?s#A`CRgwIvK z5}!AEX=qD5Q~KJrR?Al6MDBpRXgiYFT1IRg5>>#pZsEM-H=8RKTH(mavIRI0G&S4wrWM?^+0Ivkt?AoFu=z5O2A` z5H0Uq?c&D?cQew_31=jIno5Z1>Ak7-uo&m;G^TÐE4ryZIr#-SX4gUpxY#*E~A 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 Y+;hsW<*UzGiXl{Qs4Hb%fBgLa0gbWbb^rhX diff --git a/samples/docker/deploymentscripts/images/APIGateway_cluster_and_externalES.png b/samples/docker/deploymentscripts/images/APIGateway_cluster_and_externalES.png deleted file mode 100644 index 026d6f9b8750246e8b181308c285cd88c0f3df0a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17760 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 CreOpC diff --git a/samples/docker/deploymentscripts/images/APIGateway_externalES_and_externalKibana.png b/samples/docker/deploymentscripts/images/APIGateway_externalES_and_externalKibana.png deleted file mode 100644 index baf6f242e5327e9236156779c1af7a8532cf5452..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5027 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 NrkBl(iY_^X{}(4G%TE9R diff --git a/samples/kubernetes/deploymentscripts/README.md b/samples/kubernetes/deploymentscripts/README.md deleted file mode 100644 index 2c7a135..0000000 --- a/samples/kubernetes/deploymentscripts/README.md +++ /dev/null @@ -1,21 +0,0 @@ -# API Gateway kubernetes deployment scripts - -Use these deployment scripts to deploy various flavors of API Gateway (standalone or cluster) and the dependent components like Elasticsearch, Kibana, Terracotta to a kubernetes cluster. - -### Supported Software AG releases -* API Gateway 10.5 and above - -### Supported platforms -All supported Windows and UNIX platforms. - -### Sample use cases given -* Deployment of - * API Gateway with an embedded elasticsearch - * API Gateway with an elasticsearch as a sidecar container - * API Gateway without elasticsearch (external elasticsearch running) - -### Usage of the deployment scripts - - * Use api-gateway-deployment-embedded-elasticsearch.yaml to deploy an API Gateway with an embedded elasticsearch to a kubernetes cluster - * Use api-gateway-deployment-sidecar-elasticsearch.yaml to deploy an API Gateway with an elasticsearch as a sidecar container to a kubernetes cluster - * Use api-gateway-deployment-external-elasticsearch.yaml to deploy API Gateway without elasticsearch to a kubernetes cluster. An external elasticsearch needs to be up and running for this. diff --git a/samples/kubernetes/deploymentscripts/api-gateway-deployment-embedded-elasticsearch.yaml b/samples/kubernetes/deploymentscripts/api-gateway-deployment-embedded-elasticsearch.yaml deleted file mode 100644 index 408cbe7..0000000 --- a/samples/kubernetes/deploymentscripts/api-gateway-deployment-embedded-elasticsearch.yaml +++ /dev/null @@ -1,83 +0,0 @@ -# Configuration for deploying an API Gateway with an embedded elasticsearch to a kubernetes cluster. -# The cluster should provide at least 4 GB of main memory. -# -# The full documentation is available from the Software AG Documentation website: -# http://techcommunity.softwareag.com/ecosystem/documentation/webmethods/api_gateway/yai10-4/index.htm -# -apiVersion: apps/v1 -kind: Deployment -metadata: - name: api-gateway-deployment - labels: - app: api-gateway-deployment -spec: - replicas: 1 - - selector: - matchLabels: - app: api-gateway-deployment - template: - metadata: - labels: - app: api-gateway-deployment - spec: - containers: - - name: api-gateway-deployment - # Please fill in the path to your api gateway image stored in a docker registry. - image: :/: - # The default pull policy is IfNotPresent which causes the Kubelet to skip pulling an image if it already exists. - # If you would like to always force a pull use "Always" - imagePullPolicy: IfNotPresent - # Ports used in the docker image, the default ports are 5555, 9072 and 9240 - ports: - - containerPort: 5555 - name: 5555tcp1 - protocol: TCP - - containerPort: 9072 - name: 9072tcp1 - protocol: TCP - - containerPort: 9240 - name: 9240tcp1 - protocol: TCP - livenessProbe: - failureThreshold: 4 - initialDelaySeconds: 30 - periodSeconds: 10 - successThreshold: 1 - tcpSocket: - port: 5555 - timeoutSeconds: 2 - readinessProbe: - failureThreshold: 3 - httpGet: - path: /rest/apigateway/health - port: 5555 - scheme: HTTP - initialDelaySeconds: 60 - periodSeconds: 10 - successThreshold: 2 - timeoutSeconds: 2 ---- -# An example service for the deployment above. -apiVersion: v1 -kind: Service -metadata: - name: api-gateway-service - labels: - app.kubernetes.io/name: api-gateway-deployment -spec: - type: NodePort - ports: - - name: http1 - port: 5555 - targetPort: 5555 - protocol: TCP - - name: http2 - port: 9072 - targetPort: 9072 - protocol: TCP - - name: http3 - port: 9200 - targetPort: 9200 - selector: - app: api-gateway-deployment \ No newline at end of file diff --git a/samples/kubernetes/deploymentscripts/api-gateway-deployment-external-elasticsearch.yaml b/samples/kubernetes/deploymentscripts/api-gateway-deployment-external-elasticsearch.yaml deleted file mode 100644 index e1366f2..0000000 --- a/samples/kubernetes/deploymentscripts/api-gateway-deployment-external-elasticsearch.yaml +++ /dev/null @@ -1,91 +0,0 @@ -# Configuration for deploying an API Gateway without elasticsearch to a kubernetes cluster. -# An external elasticsearch needs to be up and running. -# The cluster should provide at least 4 GB of main memory. -# -# The full documentation is available from the Software AG Documentation website: -# http://techcommunity.softwareag.com/ecosystem/documentation/webmethods/api_gateway/yai10-4/index.htm -# -apiVersion: apps/v1 -kind: Deployment -metadata: - name: api-gateway-deployment-external-es - labels: - app: api-gateway-deployment-external-es -spec: - replicas: 1 - selector: - matchLabels: - app: api-gateway-deployment-external-es - template: - metadata: - labels: - app: api-gateway-deployment-external-es - spec: - containers: - - name: api-gateway-deployment-external-es - # Please fill in the path to your api gateway image stored in a docker registry. - image: :/: - # The default pull policy is IfNotPresent which causes the Kubelet to skip pulling an image if it already exists. - # If you would like to always force a pull use "Always" - imagePullPolicy: IfNotPresent - env: - # Please fill in your datas to access your external elasticsearch. - # Url pointing to your running elasticsearch for example: 127.0.0.1:9200 - - name: apigw_elasticsearch_hosts - value: ":" - # Use true if your elasticsearch has https enabled, false if not. - - name: "apigw_elasticsearch_https_enabled" - value: <"false" or "true"> - # Fill in your elasticsearch username for example: elastic - - name: "apigw_elasticsearch_http_username" - value: - # Fill in your elasticsearch password for example: changeme - - name: "apigw_elasticsearch_http_password" - value: - # Ports used in the docker image, the default ports are 5555 and 9072 - ports: - - containerPort: 5555 - name: 5555tcp01 - protocol: TCP - - containerPort: 9072 - name: 9072tcp01 - protocol: TCP - livenessProbe: - failureThreshold: 4 - initialDelaySeconds: 30 - periodSeconds: 10 - successThreshold: 1 - tcpSocket: - port: 5555 - timeoutSeconds: 2 - readinessProbe: - failureThreshold: 3 - httpGet: - path: /rest/apigateway/health - port: 5555 - scheme: HTTP - initialDelaySeconds: 60 - periodSeconds: 10 - successThreshold: 2 - timeoutSeconds: 2 ---- -# An example service for the deployment above. -apiVersion: v1 -kind: Service -metadata: - name: api-gateway-service - labels: - app.kubernetes.io/name: api-gateway-deployment -spec: - type: NodePort - ports: - - name: http1 - port: 5555 - targetPort: 5555 - protocol: TCP - - name: http2 - port: 9072 - targetPort: 9072 - protocol: TCP - selector: - app: api-gateway-deployment \ No newline at end of file diff --git a/samples/kubernetes/deploymentscripts/api-gateway-deployment-sidecar-elasticsearch.yaml b/samples/kubernetes/deploymentscripts/api-gateway-deployment-sidecar-elasticsearch.yaml deleted file mode 100644 index ab2dd37..0000000 --- a/samples/kubernetes/deploymentscripts/api-gateway-deployment-sidecar-elasticsearch.yaml +++ /dev/null @@ -1,122 +0,0 @@ -# Configuration for deploying an API Gateway with an elasticsearch as a sidecar container to a kubernetes cluster. -# The cluster should provide at least 4 GB of main memory. -# -# The full documentation is available from the Software AG Documentation website: -# http://techcommunity.softwareag.com/ecosystem/documentation/webmethods/api_gateway/yai10-4/index.htm -# -apiVersion: apps/v1 -kind: Deployment -metadata: - name: api-gateway-deployment - labels: - app: api-gateway-deployment -spec: - replicas: 1 - selector: - matchLabels: - app: api-gateway-deployment - template: - metadata: - labels: - app: api-gateway-deployment - spec: - containers: - - name: apigateway - # Please fill in the path to your api gateway image stored in a docker registry. - image: :/: - # The default pull policy is IfNotPresent which causes the Kubelet to skip pulling an image if it already exists. - # If you would like to always force a pull use "Always" - imagePullPolicy: IfNotPresent - # Environment variables to access the sidecar elasticsearch. They should not be changed! - env: - - name: "apigw_elasticsearch_hosts" - value: "127.0.0.1:9200" - - name: "apigw_elasticsearch_https_enabled" - value: "false" - - name: "apigw_elasticsearch_http_username" - value: null - - name: "apigw_elasticsearch_http_password" - value: null - # Ports used in the docker image, the default ports are 5555 and 9072 - ports: - - containerPort: 5555 - name: 5555tcp01 - protocol: TCP - - containerPort: 9072 - name: 9072tcp01 - protocol: TCP - livenessProbe: - failureThreshold: 4 - initialDelaySeconds: 30 - periodSeconds: 10 - successThreshold: 1 - tcpSocket: - port: 5555 - timeoutSeconds: 2 - readinessProbe: - failureThreshold: 3 - httpGet: - path: /rest/apigateway/health - port: 5555 - scheme: HTTP - initialDelaySeconds: 60 - periodSeconds: 10 - successThreshold: 2 - timeoutSeconds: 2 - # The elasticsearch container - - name: elastic-search - image: docker.elastic.co/elasticsearch/elasticsearch:7.2.0 - imagePullPolicy: IfNotPresent - env: - - name: "xpack.security.enabled" - value: "false" - - name: "node.name" - value: "elasticsearch" - - name: "discovery.seed_hosts" - value: "elasticsearch:9300" - - name: "cluster.initial_master_nodes" - value: "elasticsearch" - ports: - - containerPort: 9200 - name: 9200tcp00 - protocol: TCP - livenessProbe: - failureThreshold: 3 - initialDelaySeconds: 10 - periodSeconds: 2 - successThreshold: 1 - tcpSocket: - port: 9200 - timeoutSeconds: 2 - readinessProbe: - failureThreshold: 3 - initialDelaySeconds: 10 - periodSeconds: 2 - successThreshold: 2 - tcpSocket: - port: 9200 - timeoutSeconds: 2 ---- -# An example service for the deployment above. -apiVersion: v1 -kind: Service -metadata: - name: api-gateway-service - labels: - app.kubernetes.io/name: api-gateway-deployment -spec: - type: NodePort - ports: - - name: http1 - port: 5555 - targetPort: 5555 - protocol: TCP - - name: http2 - port: 9072 - targetPort: 9072 - protocol: TCP - - name: http3 - port: 9200 - targetPort: 9200 - selector: - app: api-gateway-deployment \ No newline at end of file diff --git a/samples/kubernetes/deploymentscripts/helm/sag-apigateway/Chart.yaml b/samples/kubernetes/deploymentscripts/helm/sag-apigateway/Chart.yaml deleted file mode 100644 index aa6a034..0000000 --- a/samples/kubernetes/deploymentscripts/helm/sag-apigateway/Chart.yaml +++ /dev/null @@ -1,5 +0,0 @@ -apiVersion: v1 -appVersion: "10.5" -description: A Helm chart for Kubernetes -name: sag-apigateway -version: 10.5 \ No newline at end of file diff --git a/samples/kubernetes/deploymentscripts/helm/sag-apigateway/templates/_helpers.tpl b/samples/kubernetes/deploymentscripts/helm/sag-apigateway/templates/_helpers.tpl deleted file mode 100644 index 4024489..0000000 --- a/samples/kubernetes/deploymentscripts/helm/sag-apigateway/templates/_helpers.tpl +++ /dev/null @@ -1,45 +0,0 @@ -{{/* vim: set filetype=mustache: */}} -{{/* -Expand the name of the chart. -*/}} -{{- define "apigateway.name" -}} -{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" -}} -{{- end -}} - -{{/* -Create a default fully qualified app name. -We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec). -If release name contains chart name it will be used as a full name. -*/}} -{{- define "apigateway.fullname" -}} -{{- if .Values.fullnameOverride -}} -{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" -}} -{{- else -}} -{{- $name := default .Chart.Name .Values.nameOverride -}} -{{- if contains $name .Release.Name -}} -{{- .Release.Name | trunc 63 | trimSuffix "-" -}} -{{- else -}} -{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" -}} -{{- end -}} -{{- end -}} -{{- end -}} - -{{/* -Create chart name and version as used by the chart label. -*/}} -{{- define "apigateway.chart" -}} -{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" -}} -{{- end -}} - -{{/* -Common labels -*/}} -{{- define "apigateway.labels" -}} -app.kubernetes.io/name: {{ include "apigateway.name" . }} -helm.sh/chart: {{ include "apigateway.chart" . }} -app.kubernetes.io/instance: {{ .Release.Name }} -{{- if .Chart.AppVersion }} -app.kubernetes.io/version: {{ .Chart.AppVersion | quote }} -{{- end }} -app.kubernetes.io/managed-by: {{ .Release.Service }} -{{- end -}} diff --git a/samples/kubernetes/deploymentscripts/helm/sag-apigateway/templates/deployment.yaml b/samples/kubernetes/deploymentscripts/helm/sag-apigateway/templates/deployment.yaml deleted file mode 100644 index 5379c26..0000000 --- a/samples/kubernetes/deploymentscripts/helm/sag-apigateway/templates/deployment.yaml +++ /dev/null @@ -1,130 +0,0 @@ -apiVersion: apps/v1 -kind: Deployment -metadata: - name: sag-apigateway-deployment - labels: -{{ include "apigateway.labels" . | indent 4 }} -spec: - replicas: {{ .Values.replicaCount }} - selector: - matchLabels: - app.kubernetes.io/name: {{ include "apigateway.name" . }} - app.kubernetes.io/instance: {{ .Release.Name }} - template: - metadata: - labels: - app.kubernetes.io/name: {{ include "apigateway.name" . }} - app.kubernetes.io/instance: {{ .Release.Name }} - spec: - {{- with .Values.imagePullSecrets }} - imagePullSecrets: - {{- toYaml . | nindent 8 }} - {{- end }} - containers: - - name: {{ .Chart.Name }} - image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}" - imagePullPolicy: {{ .Values.image.pullPolicy }} - env: - {{ if .Values.elasticsearch_external }} - - name: "apigw_elasticsearch_hosts" - value: "{{ .Values.elasticsearch_external.host }}" - - name: "apigw_elasticsearch_https_enabled" - value: "{{ .Values.elasticsearch_external.https }}" - - name: "apigw_elasticsearch_http_username" - value: "{{ .Values.elasticsearch_external.username }}" - - name: "apigw_elasticsearch_http_password" - value: "{{ .Values.elasticsearch_external.password }}" - {{ else if .Values.elasticsearch_sidecar }} - - name: "apigw_elasticsearch_hosts" - value: "localhost:9200" - - name: "apigw_elasticsearch_https_enabled" - value: "false" - - name: "apigw_elasticsearch_http_username" - value: - - name: "apigw_elasticsearch_http_password" - value: - {{ end }} - {{if .Values.terracotta_host }} - - name: "apigw_cluster_tsaUrls" - value: {{ .Values.terracotta_host }} - - name: apigw_terracotta_license_filename - value: terracotta-license.key - {{ end }} - ports: - - containerPort: {{ .Values.is.port }} - name: "{{ .Values.is.port }}tcp" - protocol: TCP - - containerPort: {{ .Values.apigateway.port }} - name: "{{ .Values.apigateway.port }}tcp" - protocol: TCP - {{ if and (not .Values.elasticsearch_external) (not .Values.elasticsearch_sidecar) }} - - containerPort: {{ .Values.elasticsearch_embedded.port }} - name: "{{ .Values.elasticsearch_embedded.port }}tcp" - protocol: TCP - {{ end }} - livenessProbe: - failureThreshold: 4 - initialDelaySeconds: 30 - periodSeconds: 10 - successThreshold: 1 - tcpSocket: - port: {{ .Values.is.port }} - timeoutSeconds: 2 - readinessProbe: - failureThreshold: 3 - httpGet: - path: /rest/apigateway/health - port: {{ .Values.is.port }} - scheme: HTTP - initialDelaySeconds: 60 - periodSeconds: 10 - successThreshold: 2 - timeoutSeconds: 2 - {{ if and .Values.elasticsearch_sidecar (not .Values.elasticsearch_external)}} - - name: elastic-search - image: "{{ .Values.elasticsearch_sidecar.image }}:{{ .Values.elasticsearch_sidecar.tag}}" - imagePullPolicy: {{ .Values.image.pullPolicy}} - env: - - name: "xpack.security.enabled" - value: "false" - - name: "node.name" - value: "elasticsearch" - - name: "discovery.seed_hosts" - value: "elasticsearch:9300" - - name: "cluster.initial_master_nodes" - value: "elasticsearch" - ports: - - containerPort: 9200 - name: "9200tcp" - protocol: TCP - livenessProbe: - failureThreshold: 3 - initialDelaySeconds: 10 - periodSeconds: 2 - successThreshold: 1 - tcpSocket: - port: 9200 - timeoutSeconds: 2 - readinessProbe: - failureThreshold: 3 - initialDelaySeconds: 10 - periodSeconds: 2 - successThreshold: 2 - tcpSocket: - port: 9200 - timeoutSeconds: 2 - {{ end }} - resources: - {{- toYaml .Values.resources | nindent 12 }} - {{- with .Values.nodeSelector }} - nodeSelector: - {{- toYaml . | nindent 8 }} - {{- end }} - {{- with .Values.affinity }} - affinity: - {{- toYaml . | nindent 8 }} - {{- end }} - {{- with .Values.tolerations }} - tolerations: - {{- toYaml . | nindent 8 }} - {{- end }} diff --git a/samples/kubernetes/deploymentscripts/helm/sag-apigateway/templates/service.yaml b/samples/kubernetes/deploymentscripts/helm/sag-apigateway/templates/service.yaml deleted file mode 100644 index 1f0be84..0000000 --- a/samples/kubernetes/deploymentscripts/helm/sag-apigateway/templates/service.yaml +++ /dev/null @@ -1,33 +0,0 @@ -apiVersion: v1 -kind: Service -metadata: - name: sag-apigateway-service - labels: -{{ include "apigateway.labels" . | indent 4 }} -spec: - type: {{ .Values.service.type }} - ports: - - name: http1 - port: {{ .Values.is.port }} - targetPort: {{ .Values.is.port }} - protocol: TCP - - name: http2 - port: {{ .Values.apigateway.port }} - targetPort: {{ .Values.apigateway.port }} - protocol: TCP - {{ if not .Values.elasticsearch_external }} - {{ if .Values.elasticsearch_sidecar }} - - name: http3 - port: 9200 - targetPort: 9200 - protocol: TCP - {{else }} - - name: http3 - port: {{ .Values.elasticsearch_embedded.port}} - targetPort: {{ .Values.elasticsearch_embedded.port}} - protocol: TCP - {{end}} - {{end}} - selector: - app.kubernetes.io/name: {{ include "apigateway.name" . }} - app.kubernetes.io/instance: {{ .Release.Name }} \ No newline at end of file diff --git a/samples/kubernetes/deploymentscripts/helm/sag-apigateway/values.yaml b/samples/kubernetes/deploymentscripts/helm/sag-apigateway/values.yaml deleted file mode 100644 index 2124ffb..0000000 --- a/samples/kubernetes/deploymentscripts/helm/sag-apigateway/values.yaml +++ /dev/null @@ -1,64 +0,0 @@ -# Sample values for apigateway. -# This helm chart deploys a kubernetes deployment for an apigateway and a matching service. -# This is a YAML-formatted file. - -replicaCount: 1 - -image: - # Use the url pointing to your repository. - repository: :/ - tag: - # The default pull policy is IfNotPresent which causes the Kubelet to skip pulling an image if it already exists. - # If you would like to always force a pull use "Always" - pullPolicy: IfNotPresent - -# Secrets you need to pull image frome the repository -imagePullSecrets: [] - -service: - type: NodePort - -# Port of Integration Server used in the Docker image. Default port is: 5555 -is: - port: 5555 - -# Port of ApiGateway used in the Docker image. Default port is: 9072 -apigateway: - port: 9072 - -# Use only elasticsearch_external, elasticsearch_sidecar or elasticsearch_embedded, -# Depending on your environment and intentions. -# Replaced the sample data with the one that suits your environment. - -#Datas to reach your external elasticsearch. - # Url pointing to your running elasticsearch for example: 127.0.0.1:9200 - # Use true if your elasticsearch has https enabled, false if not. - # Fill in your elasticsearch username for example: elastic - # Fill in your elasticsearch password for example: changeme -#Elasticsearch_external: -# host: ":" -# https: <"false" or "true"> -# username: -# password: - -# Docker image for elasticsearch. Default is: docker.elastic.co/elasticsearch/elasticsearch:5.6.4 -elasticsearch_sidecar: - image: docker.elastic.co/elasticsearch/elasticsearch - tag: 7.2.0 - -# Port of the embedded elasticsearch used inside off the container. Default is: 9240 -#elasticsearch_embedded: -# port: 9240 - -# If a terracotta_host is set, the api gateway(s) will try to connect them to the terracotta host and cluster them. -# Please be aware that the terracotta license have to be available in die docker image of the apiGateway. -# This will only work with an external elasticsearch -# Terracotta_host: "terracottahost:9510" - -resources: {} - -nodeSelector: {} - -tolerations: [] - -affinity: {} From f0e60ab3505f136389f18e134b760bc883014cc0 Mon Sep 17 00:00:00 2001 From: Dhivakar Asokan <48990091+dhivakar-asokan@users.noreply.github.com> Date: Tue, 26 May 2020 11:22:03 +0530 Subject: [PATCH 18/22] Image refresh --- attachments/651659260/apimgmt.png | Bin 0 -> 1909223 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 attachments/651659260/apimgmt.png diff --git a/attachments/651659260/apimgmt.png b/attachments/651659260/apimgmt.png new file mode 100644 index 0000000000000000000000000000000000000000..f1ff478546dd98e8c9acfeeddd42f4f5ceea33ad GIT binary patch literal 1909223 zcmV(;K-<5GP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGr5dZ)e5dq33^FIIp03mcmSad^jWnpw_ zZ*Cw|X>DZyGB7eQIxsalGBzMFFgi6jIxshK*kZB(0RMPNL_t(|US$1Qvvf&zriXdV zbHtg?H{@7Z1)v&03uv{Ppb;{oNoKm?4UIQ6LEVyCMm8lg{fPQI`U$#}=|(h})S`(1 z8e;+ z+?Q<<%IWl^h@L#tk6T4}~8}y&OubSufpgtL*mM(l4#DE~m1ijZvqY zYlYu?w6Wgp%BkHhYx>yikEQT*tJW<0fYCA5>J8xGTD_F*epgDPS$d4E%QLN7y{u^O z#I+VTZKMVLG#LMWe*g}~%00CjfF2HoVbC`1@a!IZ*1?7C)4?SkvJvf2~;h$3rzN3%b9{y>y7+WbF zU>>#WtHD^gchu{Y z4K)0;Sd?C?U(R|xVAz(~a#;?x1&{CPs{zeB&|H{0e6K^ZMw@5(JA4Ua(8>_J*Jn$5DLjRX8GU6-33V}@z?UZ;&dxM+bt zWy^l#uP%Hd51nZD$h(rWV`+!#wX)&8*lfWMZNdW$+G_K+#n-*K0I&{lC=bi^wyf+L zxJR@-sCUBmYx#hCY=0|%@^{c`meq1ycJQh=Sff{@)h#%DoG-Xn-UCMHE}`o3qY$2lgGj zcI29Jhv4&nfC;zJFLy62B6-o7b#QiKj3@pM zq5IFS&cJ`Y{O10i@$}10XM|2z(D^2b_fcMpQgr_UX29}e|01KuY5Q}+jOFo2=jHTa$J2@{wpOXPUXZ|ZM#7ZMG86)$(t6>75W zaSabQ%TPOl4p@Tky(p%yx&8B0W49_le|1$}4V1A`e*5%THptkX0cZ;rt7Vz++eLp; zo{-%YG-t5URZH5O!o#CZzbqH)@<99IZnIyP2{e|E562zdfk$w#fv+~u@reGZZ8qG4 z?HKmZd7Cos_sc!HV9@B6oAIbT9OmV(-YrWVTgUOF3|DKGQcoR zH!JW2S2MP)OviY;(5KMm1{|xWUNO!-yf+^7qDLR0?0zSdjzT+^R?L z3+ljkqTdIuf7IXD)XUGheRR{Ze1wB=ezn(-6|fB@PvFk=yieXShm=;J9uMtg13banY?N13!KV7JRHiGm%Z{8 zy6?kwSuT*@`}L}PKYuF2RyVrgP~ViRGAWnng>Pq{(6e2}ht8`Zx4_zF{Oavfvs)f# z>+*3~%F|&{&X4!yU;j^jUVi)k{k!rvgIj!rPFc~`C35zMqjCAG_rEEfi|cZZoIQN^ zL%I6=t8&1n`)>M#PNaYM;q&V=Yy@(EfA`(P4BY}=;PE=+dEM)mez#NZ=dq4TJIEU)|OclbbBfj|AvHabJuxJPzYz*L7no7m0;_hF98Pr=b2 zy*ew8t3~9yjSlZ{ZH2$IVJx@^*jN7YxrLrvV%LuP1GEkImo>k)xvpJ#fUo-E6g#@a zH$B03P3{?B6OQsFINSki=ZLMR;pLuRk^K#Wnqh17fz;DY?BEyZ_}9p=wq1Rv52yZU zqQCd><-1v}{A7p>wYTLFxEuN{=&>!jUw=mXctX$q$<=LS_5)Zchi2*bN9DKMdHkX# z{e$`Pv|Hobp!?e0as{5>Ty%LJKd?P6*JtPGuU7nt-%O|Fzy0O6z`7}4joSFK&>g

=cMB-44+pMl=;0$y!VdbW^M7{U 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 z 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

hhlU4;L#bQ3&D0S@aR)PCtmuaKy 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

;@t8jS zXFv7kS3?w1rUPnvfSd{~25}O%wwxRgDrUVKMoM0)Oj>h<)p8kvHZd9dfF%%?%2%z9 zQ4X$b0^tHdC;{5jmrJ(2nS!7V=Iq&VTM_ICV_^uGWeOwsZm^!qG1wy%M38%0 z)cXJ;J~)F3Y6255DEBWQp56?lA;OiAMDQsZQTd5QSWVvjMHnXHI{FQr;XpA789XR2`h!Q^3(v4x9Cgxe_vcFh0?L#lDjb-h@D$yqyhh8&bC0~{S(;t!c^`|)sgslo zM9`?U?drKz%h0Z~M$4UBa>UM|0p*TYj?*@DcM+lW*=H`;^^FutCS|2OfN!>9jh<3q zERC}O^^BshW%9{j6IeU0&r$4im{`ulsBN#t?fiyT1R%scYH{h1)#fxpn95Hd0VqWy zfMF?8`VKNffM;wK0IlVu0>(-Qkc^|GVL>@YnkcX4umfG?tt({38KpC5Hroi`yl+yt z4Y)~iW{5HihcPx?pC|=L2wJ0^ow*g1b_9i+i3F@jABVVR1L09X0RH7SZraaXS+!T! zllIY_1N$c*o?5543eEK}fM7{@R8C>-x_>}l-Z_O9N6RR5^@;dwB@tk(p~Dtt4?{6u zK+gcYp$kKVG$2VzMZ3x?XOz-Xq&U6;0MHad5Jh$d|E@sq(>}^TWJnt{k)}vEMd^Fw zCGC`hMrF#LOU9@d1gXs@R-pfS7g|6WDiUIhAt#}sXf!!O7IP_5cutBHW!nMJDQXhZ zaD#HL2{YyAL-9{BI)d%Bhm zKof95fYaO>Fz0GEZMl>-YHU-7sr}MtZ&0-r@~tC;chOW1)vai-jFk0{TN-qlWEO29}3*0vMBf$V@4oIps^nTmtAv0SxB~ zCBW#WX*ud?`P2r0WJO{(Df@o40WcHJn4;iS4!lmkNGT^IuK<&BJZRHFU!g;twBqNi z)^a0eHJh+%b7Xzx7USOCt%5}deZ~s|YBz&Xs-;acD`Nj#LO$*TJhkDCj4-8s(d_#O zz^MFb+6?B0N2m6vCq1#SDYAJ&MLP7YoO|u=$N_=qM?3t>*^}Uzaq0!ccit&PkmfWf z5gFO%UVa_9#dWz2i}Rd^4^HfC60`GL>sE*jEJq)G?c-zn_U%V@>p{&nx8nBv)0dIo z5i7yhQ)JJhY7-d_z~Whof>eIWBytU_*%lDc3_0DXw@vxde0euzDh*E*Sr>s`ix@Aj zT}a!950CA=S{E4!-%@`~3@g<~5-qIB<31cU97Au&&l0j>u2esO@*#cKhGs>>nw<5t zT*xL}*W{RVkWc=gOJ&&9Ya{5b2hC2Y4@L^IPc*QBaeEzrP|QXE6x>JK3K-+BTrAq9 zRN783&JNo>tDcSQVBEJ4PnvdEW4Nct3+VXbR?7a;vpe?J-h9zsyLt{8o^oD$|F~iQ z^!s=1AAS3_{mFX|?W40Q{HW#6L+YyZ35+59zk&?S!VB?C$m#VmMw4hPhAc`W7qn5g zmf$Hvyc~1_d1(Mv937!0plijnUEN4yNKnUke4!E6akY=Yj2IPM;v67)&_Z=V!X5H>L~QD zrM*h~MwMKz$Z_IMDd<6wYz&WiK5%F;!lyP|PeSY3Kr2Ka2y;X**yY5~-Ud_XWhy$N zZ0QXSxh_lamNRjN&KdFm8L4i>QI;Yx6z!zniYy)ReCb2UGr6XezCe&vtAA8CIpo|~ z%sVVO%2mpf>`rvbSmB{^3{#|EM^Oy=+~p3x{2G}EdijbB32Ex>PIq3Ow_IFEuOes|90o|ki;SEG_J*y49G&w1Un&hiCDt3peKg)09wUkL};ZMFjKQtE! z(8~DM^rQZ{5#~4Yi)R8yC_!za?`WX+HJ{5hN}BcnW6`G1KYdl6Uil%jLI zKXH_THU0VAuf_YG7KoQS)p?liQk^xF+B?SwiE_Lm`m1`XOtnU*_`a-z`Wl_fwMt>A zDaYkYpU}hOHhXcccb|If#?&q+!X~j$uj6hw%Puqjgi$T|28^y4|!e%e{UvM>^ELL#~23eJ114}N7wrGsl9)AXm{&o z+JJ2}kIew?nW9%t(IuTZ_y#=|0H2k>dN&FQJ44?o+Ovk?FB_&!LmSvqdVaI9u<~Kc ze*Rk0URq08tJ1V#cxD@lu7ru^49F?=+Yn5WL7!>Wop|f5yES`o)N*^^3s=`2lk^7Y z{Rp@bn^Xq+UUP{37@(fmh}hCKYz{s5HW>T8X2(w21N+9^j=hU*&=;0R$SdUrD$e() z*$E8o?|%8J70+F?LHU^RNqTC|3GIC6U|@HebL({iR>tOfL?0dx0_a!p2$(AeF8Jxo zMLUNwP{jW^@a$&`Auwjv?$oPxg08H~R*NU?QYmidw$j$cF6zKbD_~)*Sj{m`yM-)t z3;ocqO4->!j_)@>F{7TS(W8R1NiB&tdpI1}JGAWt8}zu+@zuBkfbW=grK5`e22=7q z0tU^}Pwg?d2kHzWi~SrWj?n4nGuTd~;82o{Tl?fthuwtfq{1Y2l|E#CsyedcqoTDg5{hbIjvI_fLr((#~OyR>6J|CyKU z@BQ{K*njf3f6;#a(>Lt3OG>p_aBb1XKECy^Y5(lc-nakaAODH{-~XS#Z~y3b|HA(G zoA26Qxn(Dm*Y9`i^-o>%vwUQ|!Pd4n`cF6vu6SjZ3&v-Yd z_B7-D>I>)X8}*J)QYgU2V)xFi)}C0o ztn@ian`1Lqnn(|LHltNYwAc9Qatc9zkq zNybMb2Te{iR69}gq+ALr2JSl`f2*z(}b%UfA6xh4`J6KF#zG&CW02HjM7UISZM z!9<(Iq?M?LR`kp6RC+{ZKG5EPa^Q9tOWE*R{TNz=ZND|JHrP}7rAL9d-8wt7W3YM? z96ko0uVBY3@T>=(*0bff8^~6nZ0+wef`B`nu|>lP4;0(n%-Q*3%F|pbAmkBPUcrhz ze)A~mIKoOmzRIr#fC|Yjlb<3QbNr(qCheP*m_>Yr4&nt`l5IY+3U#_y#*P~F>{)EI zPl4fAH{fc5U5OS5tPkQnCBU-Q#M(Uu=%u>Jb%Gmu~ z3J}za=*wD>%Q3B5?!f0w1*cLUW%1BNVQYZ>-RVOc3ybqkMnuz+cW16&u54|>R48cr zNc!#J0rCxck?o{C%Z{64&vEa580c=!gLNMjhF0d5M5n)Yb;C9aQTxGzW2<*MwwcM< z-B#1e>8x#U?^-b(hkoG`>K#EQV5}fN7q+t=wcVRr(Bi_jk-d#R`VBjVJCgZAj4A|cF0*QXI~0MhOR=vX!Eudz(~$>MWh66 z$o*P!qnu4q09#hGWHF`NnJEa}x(I|?cSv0@E@7k-0PS=j@`ka{urc~r<0S*zg%yoO zhC1j~G_>+?X}9qSZG2d10gO8c!Wc}RvTCPiN{J#Rq=}cw9N{Ion3y$#ETpeq?GJ zV-iDgYW6ykn8Oboqpn)+w~)X_ur8y#l&S+f6o=kur=s}N(5;rFP!<3^0zr!48!I}Q{#U;2l@LZ43Pp}3I>)29W%z{<_{xbH zK=@82LuiNSTxH2qpnlbNZGxxe!=8GF%E*x<8j?Y#vMiKl+#W}E@YY10(>Zczs3qK7 zqotfOi;j46sFKpEY(N4h@)Ac_UG5iClT1_y^2CeY0FRe&SP;Gj~522%F=jmy+~ zW_dW?Cx39-r1|z1HNm_QUD6&q0_j`0F^Ne%ADvOUWZ-Wh&wo~U|hB_N~kOR z9f@mmAnrr?Dw;!WpV5~Q#zae{<`8%h!64w+Xw8s8ZF>jhU1l75D8eqvbA>S5k>5H}& z0`yg?_R=oKivdh)H9Pv~$bNV*v^#?|;I(D-ZWPeFVr>TdBb54Y{`{-<#Y^i}KI_>* zs{?w)kZ!jD#WVDnWQTUmA6gqg=R4_3z91Xt&~qe7UqRb)8j7a+{ejEP1%2Keb?kh0 z9WWlW_m8W{mkIKDiZPEogQqLwuAN|v9CYe-sSvkRzi$VML_r2Btx*sD5s;c|YCMFo z#XX7y6wO4rriTKD`z(fRl3voL$S7Alo-PYz#$awg$$uj~No*9f1 zIm^EH{g3QDgvcFa;31&zm@+j{dvj;gzWnkf`>Su*SX-TCvCs(xKI{LO)EZA--Wo!8~bTtCRFRX>$l>EDMT1U@g#5V?ZT7wT7UG!Pd znxOATXZ2-0<^!J;SM;m)GmzsNq&R7q4& zI8(pFl%w2udA-( zK9#FqDp!AKm*g~6_Y%8nALsQ?FQtXkoy(WLJ$_TR>hEt}x?0aw`+WjI=k=0T zQeSnBuX18~lo8{ghtDTNdun^bZd};(=+}=9k10XVe0-k@eq7X(m-@={cl&X*iT>o7 zibT_ExzQ-}&ri{YJFFoh^_%)g^>o|8>(AJ5q2H^1;k@vc(wMlzl;5H;zm)U3Usw5! z9Q1#F(rfJPQ!yHQeOX?+EOl8vpO6147xGWORJ#8AIsPqE_~`iZ<>m8NpDM~}V_6)p z-h9*{k6PSSNLSgPrT%SL2~+i zYQ8(R>32CVn&|JnM%6y9p4vV1!zoy*R&T*`T*z2z*>WZpw4FlQuCA`x<Xofk3D|5GyW%jFJF&;`v>=_F8*GYDV}^14X=K69`#ElH>erUlS5bm z6YBG2g>-?w`hmwkROa&edW(+L4wpg5@(_lI0$*C_5>51Kg_|hJ)2dN~#z`1o={$3h zzFncuchX=+uG2m*tED`6w(BXyVq6ad0LQK@mu!Qjj>>g=iZObskiu>Y`zoS4XCr&3 z+;H8c0ICLhUbA}QGi_iu?ts6m9V_vSTtxdGB`lnXSOMHC$J9qPIo2~a#4cS&LBE!o z+TVG8%|3fQYd1H-)@p`r46O{Y5hq~dRWP!g%bLPXDn$w1_twW{tG1@LnN8W7Pi=UA z_B7_)%x{Sk&_9+#G_Wg3aOJ873fnBg~+t}t{ z&wvCoHl;Rb?GC55iVeNKxdu)>^N9u&HdsE1T}@foK{UtHP;6pnK>+B)pywJEZ+&=l zhCYHfWXn~XU{Ou%@*I9o(T=hklvXZE-?ZSPpk|6zz|_&W?Vr@J0cO5w;Ay|-0Sg}3 zg~=KTCav36KmeSL9n)oOm5y`H^`g(_XkZ!e!4UlE`UIL|SZ$~oZ}718D!TxdKxx1I z{#}l9j%xD3PR?3v3O_R`L()u4rYT=!@Db$c88_fVVv&?QfS^=6&EednEfRtc1BmIQCa zv1PI2&KL(p-z%y)2tJ&Ejzuck*T69R(REXSi(aY?i(UXFn)cv1er$#=*rS z4@i<7Usj&vYSk2^CtWfeDUAZuhP={-=}~a2oP~!66);@NUVD1YF;G_lKiE!^8ZNWB zzm4&&6_m=2t<)-&X4}qfq&!krlR)F~2s1ovm1+z72HOKUA)3+#)c27U+OJG2T{WRJ z>UHg0KFYYBr#wmTC1#m`%e5a*4Xi8sNB$b+)xVIL+S8i}(<%%Fk!9g)$v;h+DDYGM z3(<}?t5?9KHe}te!`Ij_+HxMJ_^|yc9$v z`&a>@U1(SvrlzrfwGV=VQM7Sq2V1O5UntsN&R-2mc6!~v2!~ccJJ;jyLkSB zPpEu!)P!bQ_Qs`i9>7$8@BubW(vF)U`XK4)R1^q^gkJUu?Ggf$lT!BkA@Zb&ymEsa zUJ-tlCMxC9wwcfPrqe4_dV+qDPMa_$OWg!ZU^fouVRw`&@K$<9o4HEIY2|+c`E@Rn zvYnzM&i5lrp|N3vebXJ#WVtpBu!Y8yXy`Z4pcDI9U0)O!QFp_Ws z$tIE}e%L(D6cvO+q(B`1)_J;P|@GK6{ zd_0@8I)bXb61Tg(75fhI?|X*|-s@O@(z7sjQ!$&jB%gAS4yj*YhMkO_?X`whX|(Nx zXT#F;L(k4+lhNM0=-J=>&Ifij4#R759MH$Sg-evuTB%#KA$G0S^hpoNqhJI+O3=n7~Ip@4flZ-)M=HHOw~BP+NroQxpfcs9B=o6XX6`8;OO?81(!eLKV+ z9YY6_S5tUQ`%1(muU`AvU;XMKM&=1jT}AkxA?znIPGDF?uB0$9<*<=cX$%mE&^V87 zpz_*ug}MUjwMe^fFJ8G|>(qO9GtaTPogANdN)j~)&hjPTp3fYBC4+SZBG<-$Ei|e} z!6Hbs5uaw4irJ_yzmeIg)E*MPimvQK)rwrycYzxbw(e6$won$DVbGEpW3;i;ZX-15MhM~v0aqC- zm!p7E7(t0prK|!Br_Cy{kVOj?M`(1YM4dL&AP70e5!VpYz|trX<*rtQO#mUQVcP=yZfeeEE}R@YmDIO`Gzi=mPrM7$FRi$$6_( zFwta+wn&koVE8QsT4{EiQF>g{2Q(@_m7J7vipE098I59~o^kqRWjb;rL^IgJ8X?-_ z%Zp(;DJs=f8;|ZFP}9^);7m@mz9Pq|ucDIVlI1q)Jzs7t08%*tbR0FO_K4;@>MZO* zs|N@Lv``NTY~>{H11#mp(~NYkn6WE6S-Y{3we3{Yk_cQy^=X+{g7TB07=lZiIRH{o z>Sy&40E>Qr7c^U_<%x2}PGCw+V$f7)aOJ1ghFMw`QjBZoYbgN0D*_69Wh=D7%j!a7 zTz}f?+i|&N6X;p_&&Coy2r+E{6Q1=gF1|p~hXG)kQP*sBx8DTBWau}o;OM%5K1SG8 zM^gB4Yf+mK;I0eZR-t3@Oc#0+K&dnV3sf`;*y{E>@G?MHoAwESg#cvJo-vHjhJ-tc z99bX-dOU_%2HlHx#j7iz*d#)pYP(ZKj)tkU2B2vGU29pNqE0l~A+Y1d9zao!8ci%H zG7i(i1)h}DlU%$}r9q+0A!R6+u%d=1njK_Z0&-6AED1=ZAaX||%0y*(ga*&>oU7Dx z6+o+02|a|gqEJ^c9va9cEpN;r3yJ`I8AMuPBB#9~e55!vnFK3%e@LY&LaEm7S_S%1 z1nZ?$3^VHd)y3! z6%hbi_&Py*&gXLWDS&j5AF!>(14(F0yJAyM6i5sH{H+C=Bo6lT#hrX7z{>yK_ zZMRT@A09Utf9RTL1>h?!bIJl_M9Tsw-64i*tzmUdxFP44vI#yf6);#6(wX$3j2z_; zRnBXzq(M=^Uveme5g1^z28P%^O1=+}E4PF2*_7*-*P(B1D<8C*+es@FA> z+LyO=F?=TogatI2K(`1uEJ8!ZbYa<28s1+{v{c|x<+DeVdE~D)i7La(Ww>%w>)PJk z`*!=CyY|QTdv<#QtwWy=nhmQ~DztCl8_=C!iz9bqb_zILK%*o0TKNp`R(tlr!!pKH z8vcZ4cxFw~MEs9(%pm)eE-1qIDl%v3JVzAMk4ibCX#V+PX!njgj4S+${ENXmG6KTT z%SUBxertB2ShQ=!sQnF$x!&2(ZlQ={37#2Kq#u0V(WIgDm|TtMG=b!>(sTu^7)m<` z7u}?3%LazyFF$+5qZS(UwH)6o7+WIp4mibV zIY167GXLI5!#?7@r?gi=8TbQ_{K8gshq=-`1mMq%qSF=Of)0+MQ#84(UE7zr#-UaE zFNL9?Rb`s2R%#jT2@;j8p&aQ(O)?84%W1ldq(pX0$Me=Tk}dj969IR~VmXMoCW5?6 zz=zsjR?+OsJxD~c6iWGWo@+;W#DR~4V+J0iKEtMTnIf{*#2&@CQ&d{R!91UkgFE&V z6)kgAk&hmU%T1mh!=EV`srqm+*SYhGH<$B(W!pr6dX`UCi+H*2f9dtakZ`9UH~GFN zykxkjlZ3OD2Y7o~9G3j$>l4SgFv>D2R?k(N)mUA)oM_P0sXv2%dWMSj(>kLcdOd!g zj&jlRQ}UeeGM0IyU%Tup^_E}ZZ|UB-#zE(yB~3PHlikleb=h_2H$QyjJR>l#6*qpj zZseu0Up`ldmUWZiS-Ly<;Z^Q3j&-0{7{yevsT&gN11{UhXiL zPLj9LU+NS6R?jS7GV;6(j!Py;pK46>@;>ta>K9$JJhpr;M|ED$@Y3}D@k`Er@v)wy zXX+Vpt|EE89Q|3g;PGquNFS%i-__i^;LGE+@pBdZ zEDWQ-hX{5@Dju*6^!|lX(Jrp8+fFtGMvMEzxi+@br07VPUl;{m@JTc^Y1u??i(0AG zSvsI+KcSap`+uS@|L0y_-m(wWa_?q-dq3zIlqDKdce%5i)6PK}dOgocVEHWFp!>Z2 z`lo^RqtsLP>h0ybW^ml)&*h=ZYjsj|%yE^ia=Z>4=B+-J?DZm`ctwL{5%x{=qRlZp zJ60_kAR0{_A7N+A3JJ_4lgev z_N@>1!Dq6aqIP`NwwadqBhz2p%G&}AA#8S7AK1y^z^2^}c3hZo3fT#|OsOyG*iy~< z*y`YQG12OJ7K6WG!BGqh1IDb^?Zrz4>(D3feO$FBwU4i^G4>e8wBvbgD2WcMcd(Uc z6j0v2f9C{@v#>4n`70Mo)&WOrayW%9iz3^_rr&>9@!$$Yo(rFcgGzxqwb(dpsRjB7 zyb}gj#L$s>bW>IluhRka7z1~h-MGB&lMN5reLG!=+1Vm$ZHVp^%$We|m9iPTeR2c_ z!2SjY#L=x|Fmsr`)8^PmwKCwWY;WAy#XcO^DbJRT7e^NYr)}7&W1p`vrcrzULECoI zD;~7*@O12f6x;cPuj0@cDtJySY>paTbo2=9gOx7~04`et->SV+beL9_kHB3a2qv9Q zoAxQns0{iKY3r#El3*h_Zl{Bu0xt+#Rw{MJ z-g0m^+f6&8uE#y(5?Hf0$A*FrbKv7Qp4#xVlCl*f-#lFp#!IU^K-RRa+Q!}xO<*s4 znLgSrrtP2)rhOGR+{hg#qW4Au9R@TJFIrB zsdSmxZ_2~}>1!A5rR(SH{lha)aW%*Onv8 zalyR{^tbjJY*1gNuD!HcwA~!s1#RnA1&(U9nqJF52GvP=aQXS~zl1ua1ZDPWvY1cC z8I8xYm0>~?B@^rMyqzL=VohnAmv^-~*e%$GO8aaIG6HdFRo6HWv;F$e4q8*2#Fpt} z5B6)=G4k8NTU@TyOdX*!#$A3cU(ty?>h!y|g6!y{hu^t(YR9daeYD3oA)l2=WQ=@X zqwlnycZ&S*RLsaO^_Q&bh3v(4+j`xuZ6cerY3;}8*NSWrIwW zkjAlmGU*v1!q8QMPi?HL2?cFlU9GpQqX1I+dX6km{Zi2OwJRI81`lXrLjEuXV=8@B z4ZFQISXh08{zK0=pF=OQE5hiu;Ag+^SHAj)PCSG76wR5=rrl^Q2n4J=nduq$42dEf zwG3ZNvILSGpwTgMa%q`bfx*6*#mEhf-I>0#R)bc2VkY=pZX9?vq-z6eBzpjUZsHjR+EH6a*qlvs-ieRynsN^yE~~EWgHWHXgdO zQUTGkl_}-)ZU0n2D{0?A7`CaSa?v*d0oqA84ns>BkGVGjk8Pkl6~!!ICwf*4mHJaa zNRcOl2|$`LIfmJrGr-_U+c!1bM~QYJ*c#(g7mwFF0KTC+wWo}yA~?6!a+XX5?YSFU z_Qo@t);~FB+!$z-)|kGO<1~Qam;?4bWdP$lLtu&&Ha0XFg@6x26ZC78_Aq)FL+Wbi z2WFl_#{xLMF^D7`FQwrT@KD+S8FQ|f9@Ezfv_=Q|L`nvLp$P5{<0#%zB!4NZ=mB^D zewVxmL%4Li-$Snh?h*bdCn*jo#vnAP4Nb&PZORGK_H{s2tIzmS=VE-tlpiyUywj=$ zMOkZNs+iCClEfTJNrts@`sw~Lqb-mS1=y{oBbGy1YlGVrj2<4v0MBeI9ko1QP#{G) zG{exm@=(s9zcF-j6#yBd-cPS4fX@N@7|^4QSe1V?9$nZYJ*(BC-YH+nA$qNyHGI=G zEvZ#6fBCtm>>TBMghBePTlbKwfLi2N6Q-PFU`UtvW~uPAI!MvvS<057lgecIOkfPl z(YTx-V^o&2tjHAQ4A!pqa?nnBc89*wJ{e(TO&nRRi8L%*YoX~R2Xt*3e$wV)pL%A? zUfhY_)kWze^y3g8`qbEny{(@x7WkvM=$o4o?8q5FOZU`_kODC0E3a(g3d zc?{0^!F$X7)WO6ps}6R&McZ-P6AbWqD4Bc51or%Xw~VR#A5B};j`h=KLy#e)6H)9d!x4dgNX^8Q}m?lG>@SjsLy ze?fuedDzOM0r~`C!uUks9p#GCD@pn303aDUnZwhnYZ2YrLH=ivoyknZw0D6FgBWd5 z1ees4@(A}d+m8NH-t<+*`i-00_VYI{+b_Rx*?#KzOI9jo?4VY&Z+v`!{5iCDYfbyk z-d*S|VcUT92{faPl}7;V9yAa7L{2M3+KM{?6or)1a>+1n_->2p?LfFp?B zAV~j38M_cVLE|KF7y+CH!2kj?nnYBJ1Uk>1*Wgj7(ao}}Cy#Vh7$=}Dv^!ITYKQ<Gsd#_J^0~{0ET8F*^MA{i@TI?0j4tu#Jb9^pss*pd<@s0$ zoAPpZ9oXW^#+to&aog@6*X*6WQ|hHrqeuDtx9Y)5-_(A!PiH*pUt`F386&cXJcSDN z@V*eq=_cN)>L>lpKlP2;>(%BhQ$o5;k9^{s_DK=+ye5v9zx}V%fcG75FPEcFj6UxZ z?sMJ7z4~<8dHh-$n#-5tb6v0Vs=w~hxNt!eCLTY-zw2}P z@yWG1{^Z=_*C+S#UsvfldZyRiFa5W#|H+qH;VT<-{o~(Wj-Swf+QVBDTZ(R#3~=7! z`eC;XhE;G(6nTJdXm{;FrD_k)Y8ae7I|B>0M}4l8LsNOx!J4VKZIrUM14chzEFcTh zzS?rUn1Yojru33NNd%4gM3GinQUm8?sww)^xIz+c6M4)0&$9mdtN!pl5nbq7{q{j$ zp3}?w%devh+UmzufWMdYzkKso5A_qvW6S&eo4=mWnO^EEznk+*KIS(+J?KE+Rkq)% zfC-uW90!-`nYvAmbk_m=(7r?o`a2FL>tJju5>LD#&>{NM1Wg+qqW)4kNMW5AxK%mq zIA7dlY*GW6{oUrjYkh4;pyTY}r1#JxevT;eMTG%NV|j zUVrU;&dSZUtwn=Y0xNaF8e{b7m2<21JUC#lQb8XYSPxv(1@l&w7k%hCqEClGyY+F! ze*b$9?VUl$u03~-K8o0I6tYTpXm<`Pv=@69c@hXrvG>OI;a&ryKV_G4T)&;8eL>o# z6@MCUIw=&f@7}>qI2%}EKC%ngB^$JBhVeR7uv1){u1TL`gP_}z;z?*BPZ^4`UQY+? zdF(_@QXG4(ZDB1a8Xci%_DW54??Ss{$9jt1u0rd*3HW8wF&W7V?7q*gt=KcUfK?hj zs|f2Oq(B&8%!Sn(-~;+3l0#Ra6F+q!iG4T&2OQWc$1ZNJI=0ogYw~Z3&U#d7TN8|{ zO&n`|QI`DMERek@|2$p-xPI}hz&efW@^6U1; z-~7OCe|Tc84!EOUwVmBnd-2)pcJG5b7Q~huYJ*hSG0>Z*5yXZPPtKHHlK#JQ=g6)- zwP73E>$d;k#1dd0jd2fLhB#R|;^!eNW%Bk2?5@qx<)qXqNad&3CX4_45B|a)-7Q<` z{CS(h3)P4F?hJbNwd*$TO>BgHH%!N^MV~&G!`>>N(pO>o!Y_QuZiA)1{=IvC{VC(~ z;ogzu*9+E;rtHH;+YTNb*eQLl4Hu8Qw2^)gzEmKcZ0FGcTafWkJ-2dEfv?`xY$OD;!~^HVfJsI!BYZEA;PKdt^tvk9#wNVm!C_2wq4a8;a;8 z`M=~WTaV0ab=t*_8t|N`+xCa$2DUx+F8z0X2Rmphk8K;V#<=fM-{1J)0Ga3>Fgw4I zvKKBF?b1fVF0Q3KH~krXavwVFB6}vo73{94UA>rxZe#Z7q-PhBGkf~#26DD*I|*p9 zShBb8-L~d5U>8yeE0xR&xtWzVcWv*iWnYIs2FW#Wu2#~+)6kzX5xDbF0D#{Qj_cOP zep9+u+4K=`8R`~&Gv_%9jO`<*kSoX%=@t)AK-7v}B>%MWwPb2OmvtQU;}y+be!W74-cI@qk%L8!wYY3Nu!$sv8Cz+eR~E7&N&^TT|)ErpFI z9}`8{2{Kk2yQ6u1Wt4P#9{W)#h!$P!Fg_!UM;yKluW0o|*fy}wM=$}bV{__7!8WFC zXRWT)C{Gh^3N8`d3v+T6P(^sgQ44yNW8!(9r*V%lzQd0E6iM1Rx6ORWuB;_(Ov5q? ze4t-0uGH;6xstWlpV_t_+Cp@fb{Z)=ad7Gryce(=@NC{EF&e4`?$FnT)5_)bSd z3ts){-}-888nb3NWT0v4cECyun-9zs%z2+f*Hm}m*Lc7fII?jeXsn~t?8yE~X# zyEnG>U>R*N5-5b}Gz%z!FM+JQs>gG!-e`Sh2&_au#cbFuuN?wj7|O3lRn}ti>v!`Pgaz z$_9$mce)-AEwVE9h=ODgB?vQQ5=n#;iYJ-y4HC71fKpS?slLIhmQ@t9Y1$F85z40z zz=Yc^nF7!<_?m?V#fg_pIfYy}&>*!{0A0Y}Q@@B{5Q55O<(oe|2HCyI!fIL`$fwfk z!~x3Mlu(9&mhZ~}oR;U5$H-tX%R3l6Fx_Us)&X*wH9fA>ohD--G?)}YMMrA$vamM4aKQ@zLh+UTJ`5g^**KnACBQfcN-k;IImniPb^ZELlJuub^5wE#^OfaZw0ZtrYbu>?;GaUpb- z7D=sEw38;96s0VO&1fiqAGC8AOYK(2cYoJLt%_pPro?N2&o)NhQN4{}BBKPpL6Bh&9&)~O%c1;F?8wCM(ABEDizuk8RTPwdr;+xD~1 zKV@4x1q`c>{j2YOV2=RNn)~SSeDS50(1nnv2^yyjffd!Q3C1`bDiEmXU;#r#Vn77ba#3C1?leT^3xyx2NKC#(q&i7N;Kdjm$fC7y{7s~CfrKE6= zHgx=tzHrml&`BR2)UAG2wKAaVb5}}kOzrKpERqRY4W2k1AggGP(ub_k4#~f^_zc;; znJwB*9$G?f%4sWw8k|cvO+6w;dn(kc4V#4$Hb9wcV=l?ph{6g2+Ph<*$#T>F0&)Ur zoHSV}M`aQ=Kf~~tCzJFaV4CM@miu}kV88Y3uKnot`}RRIV7C;B4$W$B5lzmNl9CO` zWi4fImzNV07(Y>j#VYlSjr#5=c=dA09-P*#kj(+ws0)MKK*`j2mL^G*TTV*{wY;>1 zF$~c{FG*i^dt)tafAv$(*k5`5Y5VzWyLKHJIpY4W-Faw#cI&=+|Fq{Z(5viu$Et zT(*(A>nP_0q?H32#At6mbJbE95Z}9f&(pw(76j^5f)DrOhy3J|b;#e8<>~r#(#u_5 ztcY}B3_s4xo$aavcX|Iju8+D%Z^RX6L~}gT--1!XuuEF-zEgQR$9<}uXhFyM@6Xop zCoi>A7wCGwR{#9M<=N$ZKk?hUPh~HU`8eqsiqZHz9)-tcJ$XHO-m*?lUJEBMmACvY z!)5tZouX6AGQ1pJ^yE7K>ow=F`snd<`LeurdFj91j^(G`PbLUNTl((3?d3pS@aY60 zt$k&*scaGKQmG(Y!0_4wB7=PHb2z$b(zJ(_nw_Ad+t@kt6?6l5ND+p@ zC{vGFAP6)PPh{Ma>z4K4I=;ArpK~q`bdvrM zpZ>U>3)gGvTRhwc5RXQVk_poQ!sJ4x)zrZ;C#tWPFzy8uSE2abXZ*D)d0=V`vwn`ub zt^||3yj}1K{aZ(4D`P)tZw%#aRRC8LTz;_Mvrd(IaP71YCI!C_sJ&Jo3p4k@cG_P> z4uzOfbp{f)hOxYQVcmi`aPzqWcqs_((JC)&H1v31%!%D3ysZ4G?>?-dQ^NM#R?_Rsv5e#h5l( zRbGVezaO0J8IqS6t*q$A0kNZ{wlhv^s6cyW|K8-=&1D}+wZd=aX zIrw9O?Kh4=-{5|*!8{zbE;KL4aC6f2m0HTrJvgb@6-B^~rgnVPuynp)*>u6qt)@+B z66N5~M6}YV-ae@KD%J$Ju?>daT+KocBkRiJ1&u05M5z)ND_{rgWI0=fqZF`n)*3K= z6I(52sBaHDODX*5R>(+tO#y3h<$i|Wn&4M0>0hC&0eG6B^fYm6;7RQvGKSU^qAn+# zf(fqeY}jA=+)MU1e&uuao4@d~{nV=$?eg}jWwEKwptnE%&Ik58fAAf92#^2$fBa|m zPyYEg?AF~Qt7+qMux%)ughH^{;^M84J$iUx7q70{#cSL4{=4_U5K-r)1-1v(M(~g6 zN3e+c7&?%j>W2b6gdE*sZ1&>{${f8igWVvjgN+qqc(zP@2RcU?Q7AfrEaKcyAWwE_`*l<#2 zY067yV(f$XZkTPn7Gnv%Br~U$aHuJC6sjOZ)cJcG2?C@Q3$L-R>^tmuXQ_ z$&||ur2>>=QP(SVP%f1K-(qKj{VL6&+aDQhMVBvtIo~e}J41UQXk}R!qHYftcI%{L z^(ifZYLfD#eUTWE{PX;2l9-g+qOYj)9d;6$~yqnpDt&FW;n|7ep z6^wO7qYGbkCIPFphwiHy(Vi^ymxM3-;NUVgty0mPw2&*xIp1AoHqd@g2IkArch78R z?A4u|DN}EyTKDu)3eM8=E1I-hXaX+cazm?_cD=a6)m%f4Px*iysI4Fa+*JfU8TuHA>pgo)f>nW1%$S+@edVwzL5R`BO|99rw#hJ z<^gsg>bnX?-&)W3YTtA*Yp2Mh2gs`XcTcU=780}_3*@l6(jJKR`#f0TGXR0duk+~9GDvoqsanyqH~`nYqSEPk1m${ zhz4V(JlqS$E>8bkDyHqZomIO?dns1#LdV|HQ9cO{IDQhC@Z`1Bflu_{lixZ5eM)zt z>($@7Pa0Y&Y8BLajGR&0o*g+}q3I?#W53q0M<=J~E2TKn%G`t{<7v;p5of&b@73(y zLEAScZM3i}p|5Nzhz=2>FnQE`7z5W6-a z+0Qt{BS~}*J%AjRFE0|;2ASBYdd)V^GHuzP6y~;o_g$`=ys0R9-yWOX$z3EculZ(*I269|0 z!qfmw%%4Kz6>x*nLwoLZXfrSaGcne3q|49>K&!#mfA!bC+MKi)JbHl6R8+U}3a`Y& z2-P8t&}_M8(q$0RxjcP7qT{H9oVmWtit~wB#y87~FpzTY4!a#oVpyl$QK=;u7$rPh zohqh*0(`bINTG`SlS5mnEVNW^9soS?1f_c!%0PB-C)^4V^9-dSnV<+YI!gDTvvM5E zz*3~TmRkrkYbHaiAmva+5Ngv5bvomXkWpJ100>=6FBB=EYZVEnXkTqks0{;@iziCQ zDndGj08>stIV6-DUCW~+%Nu}<9$-O={~Rc4EslbQ(c-joOq~Vf-eo}ED|hUO0UU<` z3-U|FLYAQZxn$O=D2_U1Xh!>4K$>=fuGG8MMF~b2tV;+(<#$XaV*s3pX{lZ!8S)vC z(@KMWoLU}bpy)>U1)UGE#*zr_G+jOSh<|M?sGN7*Q4c`YwFvDfp!n2J+Bjj{g}CID zq*2mM%9A#NNCc9!bNi6KSfC&jg&^mtaudl}p$LKjAW5@OBb1?pUlL}}vU5d#shn(N zVPAOu3PKvAhHEt$p_yog3Dyal68{eXt#Z=Kv7pHH7cXvjF1`nMj;zs!Q7vK%%Gq5_ zSph~-WJd;K*0>B&VzD>?H50P)rI=mX&U!?ofZ@4Z+@4yC*-egJJy(L97WVPpvEABh z+FK7FT6Ng67{=0DA0OI%lzffxKNV0#V6{+E9Y9^YxN2=E?aqT^tJhlyy%N8oc3&Ia zp(G&-1le+?Rrww@J1$3_fP$2%9FjT4TgxJcbgt6LXmgkCEKHx6S`j1_5E8yr5by?dic!YDSOC8YWTG^sxH`*9iv-F9eMQ6w=1ay_obTe$kbAXf^Rl&|i~r%9@7N_aOs$z8vWT=t~L|>FND-1UN2ZgjO4UJFIjZKz1dQ0acm|NnqG%((M|^5>>K@qvMXfPygJ;$T>g;9k;cd4xP0s1eO0F3?)+BSY7LJR zuTyz=U*}cyt&U3Z5jrR)GRbQbwmi1Eob-iB; z*5N+2PyNc}%d+^VYZ;y8i);M3e0@?kzyHbcCvW|GT(>93^em}}Pn^{%LvPAaG^AD_ z>9|%oUBEDTaGWugA}OTv_icy-Xqbe5w^B{NmV;&;R7>$+Pu(QWx(pjhhp?Xe|gGLW6Wu809R@ zR;|_OZ+IO86$NhDG>U>})#_FBw$kXNOA5G}jnr+*wR_%VJY6tZuSP#k$Mm;K5 z6OsymSxqJE8nkqEYtz>9dFTlGpJE??AEa}YG1c45Kko^u&X9ldS~dj^RsGe;{9pF{ zk`8qGiD54p;O+Ha%QBbk*ZJj9-RIHl%O5_*qG!nv$(&E>pzHL>0nwSh>mH4e%Jje$ ze!Fu(_dYq!eX5{1Q%_v}Ue-l@iG;OdbYgcpai@~o4#+&Z!WxZ^Rmu(PqpK9b+wYES z5B%Fy00WgkUD>^ZrX37gHe?ja$7j}%v%PlaflsyCzz&95Z5go^xS-E?T;zL4dQ*G! z%ruD`v(5Fiy>ssfTLOKF3~r6JH`ELafG%nctrbXFw*ekSA1J6we28Idb9B4{lY;1~ zwd9H=QX%Z1xm{h&dpj0jr%X)I$W4o2#K%_>d`5gTzVF^Wvp!?~;gRtO=OZ=HYpCZjO6L=sFwqO{+=Qu*J4l*KCfSECgn@o{d{y`aOtEL;tL5c{sWz zHCnL?arOCf#pOfjGOoy7WPwtNZlWs_;N@B$*@B+CoX=Pb9llnIV?#|m#o9CH&)G4y zk?h`=cQ06=)3s+yt9Ah!_sxy0efC1Z)&gUDcC+ZZQBKWuFunpjwh9WE(KNrDzF}Wc zdr%$PdMO9bfTcIDiBds7ExxRpjtjhQ+m_vR5O{!~U zm~^6~?~wYRG+WlHbuEt$tq(!6(0QExiZVtv=~*(t*g`waUeB?{r><;+xBW#5K{@#K8x8JQ| zb9C%nDr+~^*6czuW}n?zwO@bjY5Tbw>-LvkzG#2zXFqK}_n8-LKNheL+9%Lt%#wqJ z#a5;sP>1zy+B0pP=O{;W5560Zq1Qy%PRfi0I4qNiVGGd*!kO5v(qrqzf)z3mtAmq2 z!2Z<+q8Bzww!pTjBWE?)s^BNz7Yl4MkxzlXk|SC+bpt#0Tt04DXh*3q6VRSimh9)X zV$x14br0S-=+5kZYvS}Z91rZNe8hhBm5a7AXxju~roF2)aX&`DRpGT7IF{S&_^jbJ zxt#LrsVKCYr9L6X9r@4DoluXD4rxZQ@nyY}*xRl8iIZ0P4ax4^A!!!ZksW~Zi?9|c(~m-^R&1*2vPTF!|a_+ z><#qM8GNLPIj!Q9zrPL0(Ov~wp}Ke6^}xNtTHFIym4|w3W7~51w4K4vd;Oq&aMH8~ zX9~ItSQ|UA1ugH=Z=v>nejA1!!i0;yiNZnQYlZViiuzkv2V3`qp#vbrVWv;l~&8~y!Olr zu0)adKqmB0E|v5#Y|~Dy)E73AF88#I(3tkAQ`*fevhv1G(JmtAq}TM;9(~efIxW1cE&wn!}a|1~dVMOzm?#vf`^cwBN;6A&Gucx>DIyG3YH}$^~9+ zcCa%-$Y9}eB%q?Hu*FlfB@;k0a87bt8At^Bg=eSkw^hcDp*znt!7ZJsJ=c_8t*TWk z7|2S)tu|@X;2=5!(c*y!S|L5|Pkd5DDQBk(+9sYvckXi0-@aJzv{S+>FJH-_FP14) zFCY^?v*=st@{T=t)U^FY$pZ#`?>Nx_&v%T(Z(j)mBPwuF!KjkM3P39}PF!StFvPv1 zs?CEjmmQ5(2YW3DALZ@RX2x~l9BiPpPgSkn0*rSV17Q*ExuA1eaT}&Dv>~%n2N#sJ z4&E&{fRz4=^$~#w)^%^WW@-_RCWDw<;R&1A|P6bd_ zU=l5X3DLPjK+Q-|CtMK%L}@ufIIK+wqr5Sol`cU}dpbh|FM+F^Jc=~dF3vLqrL0$~7yDAkN2djWa>+neWYM>*OMaGGhF(Ptsr8Cr>1hhs_x)SW=f(D)RPDB+{k2s3C+X#c6*vy5vQaoO04UCd@}4St&-Sk3^9 zVag9LCY*0lZreftRtf4fN~n}cSpng=4NZLd#zm*i+b30f?&+uON-=IfypKV6bZjr7 z=yw3wTZN@?(6ZW1?ve7}D5WiwE!bX7D-lArvr+IqzhCaz8OKJ-+YBH0vU8rPyxNsx zgwH}N0m63k^18kG!ZrdC;aQh+KV(%2cKS-7NRwQm2N9x-Ii)y|betj(1)&uwAi7y@ z_$mIK+XjjUG3`o0o6kf68`DJ(`dzV~zP4`9ttIXLe$A$_tWBU987^4_n4G&E`b+uE zNE@mO? zb=p?Jz^cLv(^=1c>c+NjT6JIBwL>4uz118jtya{I8qnGxtnG zXfgARis5D79G3GL=tWC3Q`9|ozi;T-*5S* zP{#9>hN_NCo5^W`%$am+wgY{Sx;@+6F4}S9&^pM=bS`JFT->zhkO_bJnJs%cAF}WM z;5M=%W`FBT&)a97KWEqj_LbMJ*;;gJFP>kuwQv&ffviNoWD0Bc?1dcHvJW<0{oYvI%y7j?hsWt2fuec8m#z%+3IMX& z8(@gi&%Ks?wiLB17%&HIj7<7FkFJq({Ay@yYmC_uvL%W!8H>#UAb=(m_-S9u?Phj} zQG5!`XA>EWmx(pB8U*E_O@MD)-m>jXz;2#jx8Hv4W&7C|FZ*hTIyCo(?>)4C1fBfB z?f30#hlhUe043~`$Gks6?luIFknx28W6D?$kvmTzGhW!p+vQBuuG7C4*3%A5FRkTm zi?TP<=t5*{z0n3>XqoxK?w(Yvj*)clux{@kRPF9j&F<5HQ#y5qJ_tdl=~To@80tBA zG6Bd+F$NLkzmF!60}D$a%jNKpVY`Ct(Z+vrcvx7Ds>#x+3GGk#rE4_7B#omzK{SCR zxuJ=;DYzks4pU^jM33lS|72u1xaKA~>@`-hrzzC`X*G)gm^*@HsBuPymzFYXGF@^@ z%SQ)bil#vSpl>72N085nRL1FD(XpOhgmws@dwL3ZIo&M^ja=ppC z9DF|hryBWv^rP=VLC484C;2T0vgZm{9aJ|ym8;&PgE_DJWy~xiWYyoo+mh?NbiK;r zhdcL$<8%kdRWD&TN~SDb%yB+dp6aIOI)@l1{ovzARzaVs-!%4P)tl>mY$#oSRmif$<#z#cM$-FRxJK>OOV86c)lFrL>CGp< zMWtRJ{ZnNqOno5?>1{y|tDQP8TGsP*uN;~xMUFrXj-sE`OrJpVe${UdJpL5+(s$jf zm$yZ4A6RbzFO^Mu)!$qXIaA5yvo#^Jto8C4Do(fg7^r@frPKbYH!ocy9@C{uuG1Jl zKIf(Cyw2#CZqxYc;PSYxSRNODsgb(!aa(w)f0obEGq~P=KBfWnm2^4pDELd*TmdS= zWFWo;AU+RWN0(QuA`_=y2`ZF~I;jzkbeFy6U)0$B-fvVJNA4@sZLu47DLM znC;%li9M{IxzkYMM^Rl$ji%h{rEJ13gJG|%ZrVmBYjb4&On8H5%bD#?ZR)=4OWMry zMB^G*TI20`LPKh!=uADO9#vO(U#Z=?TKvRu{aIe`zm_j(#N~zP7xH*b~guYCTdWxz{KuwSjy zbw~FGm_HwpLk8OdjCC%N=6OvEU}xm0?@O19_HnsoGi(S=6mOtoKDP}X%B^6l#KE9J zk8a(@7I?0N?gX9O+};J_t=Lv_VOP^h8wA4OPWoX1-UYvEZKgX~z{w|#mdj*KLYy?a zcFsuB)sDO$nxH%ob{-Ixb(0vl!UM;sBOKlWO zmIe!_z%QdHdKg+$B(wCa`bc{eC9x~hQTRYu7}Bfuhv@&96_C^IUf1%mgvDnAuv^BS z1~2ZeX6z>X_N%YHV88L{oA%npHCrpi+%{1#m{ykj;Nv6vKm1>R$Ntm*&!5^q`@L`3 zyLTS>YJp%#dOKuh-1-SvvL-2H<H%b&Vz=LUQmJIZMR_TIg#O+geAOVqGC&|WEUo~4b zJA*!tDkIAmVm|pKI+OfSdc+C#zihKGe4$OB`~40k2K-vpX7~#`m)GXQO2Y~6gw8ba zq7}kn@L;Xdu+rM9y?fNcMqf|{G7I_g%P(B9H^KZ=-vY=3z2qD{>-4SORWMQv8p2kE zSEXYL*p#wejaccEp?4&e?hFfX%4c#bnr4!L5z%z*pZWg8rc0 zvo`l=vti{y`SjD9_Sx$jmH=mz>m5&3)EUlvl2Ccqo7k(9R>aCjJ$ra`h&?i}J+8aY zxX5>+)zhU?%AUHg;d^mu#qo?WdU`Exn0NI3+@4FDJ^#}4cKgx5}95}wzg?j5_i9w!xU#`Y98(=g`&r5E|Z=o^X#QxV_ zi;s|j@7_PQ_wOIs$!Wt^;E$krZ9=SxwF{ehTZOM|+I2sIutYK;DjnK7v@Ykb5Q5SH zYceMW9W>i*WFzuEk+2N%Vg$cE*sIuC1G<|=s1sNNn?Zgjx!!^iY^1~rG%~Ut_I3p9 zv&y}62P}q6#@26i6d3m%`)NQj78^Dw{X@Hj^R)_Q5tfYt z)>(u-#agwkmD3#1V)UO{jAU!EeW}hFHnIAhUeIy zBPUrPh9Nl#A*2H~qQeJtzUna+5z{G(EXCIL4)WPxn1uFmK#@m2x)zo(iBeB8+A*O% zT}=Iz$47RgobTE!GC`Re`Hb15YvW!MAsz#qowv)SB#ha&7y>f{s7VAO9?9JV+=xCz ze0o#|2G-_%tsaIneGm@LEUx8&C^hA*qNWh<6h=l!(Ef6pPbxd4F3NWrj;AaK(+=v4&29A;VypXa_b%)81v zftHC;w-t1pSgb{R6m33-@Mny%oJcZSh7gt%!3gG)LQxJPIY5#aC=tfxTsmN1IA5@x z2z{Ga=Af>jr zXRfZ>VQb{+ga#ePPfO6K>l|8DdV@$3+F&eKP@Yj}S9#PmQ6}EYq6B6DHaYX%MW7JJcF0~3|4Z6K`P_sK6 zPrz?$j0<*&^|U&MGPUVd2g7MF(j?y)fTLx_C@G$Qgffg`2xya=G9U_qwg2FYFWD}@ z==a`xXutRNheDC`A-o1(X3&;$>PG-UN(nWUF$fJyM`~4wR@nfT0njJ{#;cS{Ssno3 z8==tXD16pzw%`?vYUD|s?{Z*75CQ@m)po;;V)4Hw3bcV}M<67cu&>=eMX|~ugO1RQ z^O(M7JVMir*{$0RW_qMFFoiV0+da$0K= zOUpM!kOH>+cZaS=`*L3ELI#|d?qnEvih!E_3RH7FkJUaVv8eW12{4-ILyjw&T{QmK zCF{=%LHCQ5DSC&Z=ue%~m}?`MXnbxN?p6-=5a4l!{L%gh)d6yunldb0i*8~(r1u+~ z(~kH9o)bw%edDY#{5FGk6+t`G1RKvsHBcsBT>Nt$orwrTCJIByNs4Sl@2WNe)xtT- z$1S<$zxl37N;%K;R`f60#GU`{)TDXp3q{}v0qY*MST8wbg`M=z`&P$zyCYBc>NjJo z`^E1|XDjtkbtyzn=%v$~7xWMS4@5C^6y2+1dZZle`m)@hjj||LP1W1S=<#1_>}7j3 zX@P2^CAVHL>ga(Q9MkF$uMcIpBl&STbeXqH&qaK@bC5?;PwrD4W?|dT!`D}~JQx3u z9-TOTQU7VhknUSZEvccK^-&>`qbEH3_0#+RnX&4 ziD4c0T#{7;{5oDLQ~R!{&hF5njheWY{j9vF zN;9IdN1fV;@#_kABCl%b%oA|X5tyO@hG~Kym7Zmcf!K$KOX!Cnn5Kce8ll%#!8;r2 zygfueMBz=*k0OqM1GEFZG*_@gaJiC1PD1L~bIjNPr`GL6*bKuIws(0H!iLG9M>lc_ zyS!GkORFW{1IIUG12(++R!M4#PHDl`$XL1Hj2lm`<2{}2l zZ{InxNnFeSqxS9F6}zuZ)38Cmu$8p`^gsGpy9Jhb{{V?Dx`GxKnjvP8!(clZzFI9C z35_gWEPz|go<5hhUwn4mW%2<0G8**kHg%PZy|9|HtoA?xM+Ctb3UCN9p0W6fy~=$f z`gSr=nn2mfF{kSwzthvcy;e$FVG2&iw(6hOY|w0@t2b=Y>e`FvRvCw;Z6+gjnfEGV zl26C5$zryf&shvxDNT9X`7FOv*isYpe$Jhlnh4*gAIspy0em1^dB52+?Z@$PrDkUx z&UF{|VQcJq__#5*dy3SBCk}_;pVNkY#JP_eQ#+`S?fvEeJ8EHjU9je=_N2*M5*)c$ zVN4kB32nPayASGMKlGr=Zqvpj3cOtHx?@ic_B;F7?jh_-#(u1b`-Er)UD^kGVY}pH zd!v(OH_iY{3+O`=1b+`sx-oSpr!& z^*s*mR2z19*0KNWzx_S?&;Q}SunE}a-H-R}^xmPRz~YiSvc=}u4oXiU+5h0)k$w87 zUa@&}Vn+`TVH`c&!~)gMd&wt#6} zZiy~~^uf`C8uoL*Za#n6&KgatLz@}KugUcn3rV|p{>$Nm%yJHxhvxNRI> z%4+2*K5otJoBOAB@Zq6-xp8LghjshE{pir{YOkA*Hq>gAaMV}vf8!2z#Rypl zcF%&dfByL$+f49$XmcYK!@kAd2E*MhcYVUNFPnP^@6#hu#t%{BDUN0%P3Y7tnl{^B z%UcQi{)MZXwhl%uB*OF}w2n|5f*U4?WvvJtLEEd;QRr(A`+kbe?yDF=bGxydwHLM% z?g#2|kL>d*HrnA?9s4hCtJG@~TF^>wp$VnLP~ewr_bxO!LoR9KQl;&jF&>&!%cqL= z4mACMzUyL}mas3@wc>g-x9S)>16<$lL3ZPg#jx8Z5US*SAHF_4Lk?m$U)d_bH|zH5 z!60sz7bcz0~JbdV@c$(p~y^jHWhW?v(mKg@< zJs*2zfOvRPx4X5Dog&M!*@A8Du3EAL(u3|&@r?TmNAv-l246B5(q+)y3ZL3nA|ZT1 zU&^7b4Oz8nd@36Yoh&Ri1P|=fX00UHDdlZF8#AqhQV>}XxwW9*m9avr$poAflqUX{ zzX9#*7{@1IQ60WHIme|R#BKfQ6qz?Q?K7u<)(&MTxJ;`I&aGx`y+j`=2NZN6)%wl1 z?%5A+SM7sGXXuxKul7-Xex<{_Nq=6ZkL456K2+6OAKf_QxeGhLUb0^El;hZc=)3L! zU5l;w=&WU@P3$WwH-!%s6}}9xkiU&~Ad9q`S*uU>gNeqCf_6uQ%1m2LQ;%lM2|Cg=>VokgLu zA$&`J!FUnQYacCTthk6gdv+&dPi-db>bb1#p$`=>`dqDHe;b?hN)|l^|2HxPTL(AX zl=OiQ&A3QJg8}thkl&NbeAxu3SRrvm$R?$Q93ib7blTJ)hTzpk zJeqh21)|(5=X~Fz=(O?DP&wx4!%!?`$``0KFOks9GHLos0H1rcyiZYrSQZGiljN(pN~*XVZbs8+LNZWWNw20ZlunOVDgziJ<0;AnU14q&2#5H4l}KH(S5#>2C7 zgkT>fA|6r74=HxdNGrNVPSq};XusUBxlbUW%%GbXdO=R~2z~m_{X_a`V8LwB;wXSr zF=m~BLKWb7##Q;&( zOUAH(j8>M&=pFIwDh6qfI%#u{0fJgNFJ=4;M#u$$c4$npW!eMm$&fa8ufOrMy;zFc?L&+J`bv2y zwR}7YZAma|iPWj&Bs@C+baYYjO3RZBA~=w1KlkDl42m6l>(Qxw?cI-%DFM$Toj_i1 z=aarPc#V3;;GJqqbccRH$jTk28Ez>|ji;2Zmc~i{DyRBsr;Sq7Y&-n~&nu-)7~aw{ zU8Q&NnO&6Pgy#vEYVslvaEc@6HlfKkZd|nQzjy3lx5!vtOr||u(WkC&S|8ber;LKe zsO+NH+8BVzV2ZZ(JnhYXUyf+Zf$XZqFRa;xtyQ~#>^OHZk8EvN2LnmV1Jh~715i}L zK#QbPR^30d&z(PK?Mj)k)IJb#bkWRqQfYg5d}wEYrFeP`dO@C0CoQ#8PJcy#D5^j? z^?&%VWqa`1ox?M`M8CcEOwnGvT(k#w4=uQww!>b>Y6E(06tw3>H|@SP(J{pgyr@aE z$imj(0Xc@X0rFWJY2G}x|J^UWVg1{Cp1x@k(h8=oZz`>gtHKEYFoFhl6{G8?pF3~A`NnhhYp>j3>=X77+3`p3 z+_yh{|Gs_g{*is}!9Fwv7)Ey`g6IlOJ~8%rD7Qi;Nx#IcfNo8~ zKlxO|a_HME^pvE0?P(B(rWyXF(~)~X8IUCh0-WQ7&iUq{4)m7JQ91lXvpTGo96>rS z8uj!k0yZj>KXUx?)eUt;)oJ;<-Vg~u3xjAbXPCQ*-FW6O`cWIE&#c)WA;STqw5<gF!MvPoDwi=mK|E3P7(=7q!@(iF~5Lkczz3ZuJwNa?om0LpQ4L z9;N;9=ZFxXv6rr#w<3n%TOaLN9sZD9Q<2_2wM}xG(nWRx*{ZKf_kZe7>LT6aPo%!? zq(mmW(IrCDo0sb6ZK~Q&xbDjm{jis;+m~a=n|g^i-N@8= zo~d#kH<{8jIUx59W#~D6tw#QFW0%$Q=Xt++9ci=Ied(xQ)?HPhell`7>Kljp#IE`t zgPKm&{s}c~2d&WBM+P5)QM4Ik1;et9v7?k@Q!w8Q?B#|eeZH!KF+Mc`rCg&^bll#( zhd${aPp7?Z+Bi`wtwf>N}RPmKZg1>E9oN@ zy${xEf)Y`m^vlFI_fxP@m^!DhE5tW%m0R|p+(aKhOJLq1V;4h~&yhRAS5gv}&#&3_ zQqm49XZADCZrbNAl&pZh(taN?WVM3Cgx9qxyRdAA-;2P+esufH-g|h;ID&01ZqucT zpw@bnkfq}>cQ&PFL(5bD1qOM0G_d$;!FuSXbR3&ADwlvr6zU&&OPo+iaX`H zN8f(twHp?~cK^ZK59qt1^-fPc0)8HeSrm+4E}z+jT+qI7eb+v2we9WEiaU%Ih!X^( z#IO%F@hH1Ey%M!^@uaO|hyLNCGdsjiOiUw|2TWx1auu4dK-T8@N5>VgY!b|tvJ-3) ziHZWW;JJVS`$fL1o$UcOwUi32O+pyUO%H>1@4=ZxDQ9~#%c+rRk14pt<&}bwl;)z* z86cyFo?@^CP8`Cw`DD~W)4tonDXqL8Pd)9-b|Gg|Np2N&?;$3eCi}~R_R#TJ!M}P8ISxd^#gRL646=ODAWdD5`Cb+Tz%-bpFBIW zQ#esQ{jT7Dsh?XzK1bh!Um*XYZ!_fjT0U%-!S#<%8tz1~>h9}QvKnt5oLBKFdV(u< zDTB|wvuW3t;&yW-?wW3Tg2+91_BlSz`FYdUd{Nt4k6U3iZskS~{~w>QJF}B|$Hg%& zA;&5=Q((>4mtywf@S$zymTYNd)gGK3nd%56(7zF6B8<-$!#5huv-Z>9oLCK4xDEZ9 z&|nOJoxrEZ>YIT*4`q<;^;Ju(FPR@bE&CKy3F%nS5~-l2@FAkCVsOxbKCI)!Yk9_y zLuMprt}+FBWX5`^L9rhj2I-tE;`(8?@k5|dA{=m=*e)oKJywsp!H`k&)9-j#{s7;s zi+JWGj+Tw&KgY+4oe5{_G@P)r%KGTUMX}m+r{A=Zdk(%-J@=jEl)ZL&6F$pfm+%K= zBP2K6zmQ4U8oXX9R&CJ4R`S^?yrSNX>IcxCg|Gu-OX36l?(Gfxz1Q-#wCu5mhZk0A zOwb3&7kX1MAF|OFGODYY+mT^0T<}YeBt0Pl7HKh$q)RB4c z-yDwP|1QzPO<1^&_pzUg@^>OCGOhPTBi`5EbdO7$$jlJh1o78PV6kFrXg$dgHcgv< zGbF`>|K~+NjJS<915^^VqD?w(u$)ZW9sk6>4zHK-9q(~{Fqn4r;=`k+-MYKOSh1rp z(iHvHVoudmim?UF)9KrJ@eG|Zvb2E}m<1|vA!8s8sKrmXf!Czs6<_hdqxz}M+Rfm^ z-rhp*$sUK}wo}NtjC&=O>Qq`EJ+;L1w%3xjnvU5TvZRvA;~Dpc#%iFw@aeEG=scZp z^1c4;Kl!0j?-M90DM+2S@=jDoaAf%)N)@4(G8L=&0UD~Mmau^>qqNo8G!vWym|$=g zsi7!7z(q<*SsvoWVxrBxWUZI)avq6$1~x67XS{Tbl_JDqFATA z?t^(mDjm^K4LMg&nV++f8fwBgC@q0rIb-T@tAJP%;3Fa>!YE8YqOw}c&6+JG{IO>-MY=nq!pxsCyrZv2AN8%-^}W zXG_+%rK}g82|FXMrWp|gDH>81Aj^pWHfnv_ug&d?+RUD-<2*`LM{vEWfsbJr^GG?d z3P9vhDjWGEMm}e+z*l?us55G(mAQnJ4~% zQ;0eh;sJzz3}8~0K`gF1hA4aJKI-+Xr7?CqD7&Uzy|Hdr_f|~x!`i);3vei_N+&Xc zI7+>G#j5o->xD7`?6LBUXXt`Q0#f-@%w^tOKqDQkQI@DYO4ak4vZiXJinQ1irkD=l zSMk0aKp@`MpzwfVEN$b4fNCuIlo}7+8e-^J{kD#ksXRP1bE_n@eE`=Vz<~?h&z#WegW|dVCJ3V$2Ha zx?_E;Nenul0#cg*=mrjf9Lg3tKmkWJCs9)u$+Q=mOyJW2PNFM)0S~yNeCX8QdhM$H z;EikWYRf)&{=_!Wp|HB^8m@+?+Oe0xFV`6-_f}oDA^JcYO4`8DF*5BkNY{h`eb{Q8 zTXYb=D@#)iRKxsCpmUYgJOkuT(U}$23KrnHh12Yrs*gh3R3kqbidjzpsa12q44u%p zbt!BA?C-sf!`x#WfKoZ#V?Z2+lG&FclrU|hA1qCqs9u2A44#E7f-~o}pBc9o4Hiv}61D_zWGZ%nUUTZLxk+p5d{jkk>ZkETe}u0M%K3 z&miwQ@t|fh(iG}V^2Pp{JuY!y^imsi^2O6rJIASLVM7Agr@6MVasC;aD^;Om+j1n5 ztYa=4ciHE;xVp@vFW}7typ_=J@Q({AW0#~$lzqJj{w#u|+O*aYPFM3#yeZ{`{PGyL zY3!U_e%Jq8#;*&WV?zaS;avqP+$K8uWYPSL=kZM4dr_K!pYCbgg4cM&;u_XLnUC6F zQ8VeIiym^+aHqwz&8Jc~ZEQ#?5_G}%(+laxG5oD8o1tA<-?msNY-g3?m&paH_o>o4 zU2F3l3czO(WoH89SqnA0Q!w2fFNX$hKEhp$#|63g{qHi=8MDhi`H~j8R=?^xjn2)3 zpZZhKFqO;82x&s3?=M*|)Q1&rX{IJ8fvQ4&C1ygXtzXlGrvr6XQNH@V~Ml zCGRS|w!-~-*jqVZ>eu8M4CK~XAeEHTa+_z8J$W_45VAE&)X@=M@d>Qy#wi&Tn=8;C zn1LM_WE;o%qS>^=YSqqP`tL4Bn=)(l~BA<7?YUQivvF4jk+)*9(=cRCDu>r3xx zt3XV(X#B-1Q}6)vpF$69+Bk;cJvHB&O?6Um3-{xv<>}nuCbYY2CkBd zo{6Z)n81Y^i_eE03`DKNeEisIpGV0a%J839kmtw2A2amxL1%71KR9-{Zdf0he~jJ_ zKm#y_&lf=c!5ZjQ#{+ZLyIr;%w(IUr&MK_Q-`+oRn0u>`u~YD89ek33IL2+P0j=7s0-%ps6-6R628v9aPDV zAQ-LIQ^FMYfu^eUzJzSNy}fS#;Po5!2X`;q+c!4tm93nu;D=37@Q?6Ae*W~t{<}{f z+n@g8b9;1F1m~RD-`+d7*S1&elh2>pi~V!(mEZQC9a(HSW;fryV^2RjvUPm?rIn=R zma=w!er|rS56Hl(#iFG$DSP$nuiC?VPn_T3bS?rf-M2VV!?YxOtikC?(O!AuvZcUy z2Tu?2?}Ds3{HX*!r$dlWXR~CtvG3r5v(pQ^a`lR3GckLze`3q<{^s(Eotzi#`pqrt zcJU27F*~?8F>g9)#Y)?i-}u&7Z&{l${>|U~%&L#?IeiccBrH(K+5o;9OagW?3))AG zsi_@*44*upta`@oMG>n1+n6E;ISSuwtrZ{Cq&=o@SV|} z+ANVnsieI~1bK%K)aNY(ZKUs2%2dpnMK{FYuVwsRW%tA4mO)QzQ?gd7xrVl1Ty*WM zir!`%^5vCGproe~_h@t#p!M3*l9D{C&ZlgF+0XDJ>a4{OJ_~`PuN0E5Khw3f1XwrV zN=<0(R9{=VT=rPOH*Ltt*AkvCb^5NHk;(u!xaU#1V`?5c1G5d#nfa*MH?FT)2E0CI zx-Hhc!?$#vPNS#XDPPFIII1e|i2twTBa8^Xt~Rvful6m8pb5prAW&G=l%Ze+vu zwdJ(EkDdth+pc%iL9Gdn>01u{nTY$`Y1u|eO&IZQapcNPPs;g z*;?T^#SydE#cVdIgUmn(WDnA)1ke!uV8agl=d}X*qK_|oT9dCZ#isjRrG&6R3+v_A z#t}M933f_0(>jjvPx|n>vXE73F^!(XdYH;Rs|>UnllJ=X6YD4)7{q^aS<9@unjTB1 zx|k&2GKb;|VM*2b7fy)rJk3K@Gvs6I1cFYeC|T&DTC*o772C&;9HO_E(WiS`>$bU` zv+-DsS_ihagwNFL*h*o=GMO~?iFq^62L52Jtz?0T1!7*?X8kj>p>3n5YPFgD=Ha<@ zrtl4O(J2idzD5{%*M_s2gaQ%J%^IQNcGx=wuEm$&lCI>T)#W|uf9wXdau}M==%>S@ z{4N~kPO?D*#fDU}OQooz$n@Xg5iXSF)^&=7AcE)|WYf_uAXYFBG_rBu#b><{=!LG( zX(`1f6iZaY&T_ryDs8N0{MJB5e^SKPoQ7>BokN$-F!xb=V{^%_z^lb#8~a$o2cNkl zCodRaiY>f)d}9CPYR=ZV{yF!YfDw2E{yO#!K5z+2{2dSCmokT?AZspY=NZF0_~_X1 z_qWpUMbC!tX&fCS8LnXGT&W{);%Y{{LcoXcNTWNp=lFeX?CU%bQ{Cx6Y~yXcEE@~#(>9`^h{jI0`0u1-jge@0E21} zV-`Asp;ft+-l*#`Toci>HE=jp2Xz97(r&l{d#c$RfXG_lQ3s#^*UElPw1cdLohT6R zw_FtCHS9U!xQ?k}7%ov@Fv$OM0D2u0$|mHz18lg7YWq~J<1Ny=U;M4uKef&ikE5FH*i2)S-)!jsX(8M$qf3;p{HtdsW!HDP84XD^-zGMkWbk%bJR{{ z1;&>Hwu<72p>&^ByVe?yEE0-XdlGad15^`Cj=7o!It9&j%DB*Rp&|5@TN4ZhOlz7- z;6yNw0YciSRsa}FPT?LMS6xPLhxKbV64q6#O84OV%IBd%3&twyB z14vC|b>wg239$A!4J=+En|DV(1ULs6TPf>SAK;OUyLxYZ42K#KbVfZ30J4T#nk?w=Y?k`5@c2 zyR&5xfU-_ND8sVU2jIk$E+e9bBjE+;)ZxJx7q0@ugtINTQ!*8G85S}`b7c1vN8v&>-OwM1jrE&=gIK~klfDg{QNbCuxC?6J5^?JTj&!PI z1>RN`(~EN31-=5@Plh?kyw=khz+cs#;Z#+}L3A2=38kGv_O(l@9r3wO+4;x>x<$ZJ zrIxsfH377Hxt#ssH(xbB!10%lkDW6Z3$QML`p1=yGlXCroOrM8ZKz2N1`58cKugh2 z23Pg4mFWw)+(wNKEGoFk(uHPPjvg}D)Ad#@j zS;>C2e`F_Kctth;XFm8G*Tz4zx9)D(JT$d;)>HQ0#)|p-9sAbKx{b?S`xL{wpUI4IG(Uh|LW(T*x%mY2OMC-wD#!IYpYpXPXuib z-p)q7w#)tYpu1`}uB1Yi!;uaF1k|udwN2}NkDcI*loh0^_3W7O-aoBb8GR}{A*V-2 z26c2V0sv7^*=5zBCjtQ82oq7m>wGfe92LaCQt;m*``qvBkQza&^ppbjE|9}d)lNnI zaW8nECwbsgxF6diU8(2tH*Yv_tDizD8WGpKK$3oP4}L7Zxki60kS6(7ut;AjqoAOX z%bf+=xZ~vTRTPD*(qpPDuz%im&0E#XYBU{SH?Y6ym;;PK)=;Gz^2~FFU??b<$%Sku z8?mpydfC47+Eu$#NZEQSY&l+2*{OZ-f)6aAa#?5<>!P#O+)lX?aqO|=b>fa1BDZ2( za$ha`E?Kqk-`a^SAJj?x%Hkfqw3z%|G`{(ZpS&dn+r@gPf1; zt;^fCxs+qLPls?_xZ(_wz9!sdN|J%4~b8-0W6!OCy3(m-E?35`VRy3g`I7ZB5>@TW?%xUz*Bq-0<*G&e@a z@BF?9W-p%Qf~LAg7xCrFvhcd>)5}u}I(F*r!?$}bKQ$KJSfkK;+y}ei}~sKjwamE1*7@ahAw})=gaX>HojzAHoT`2Vd%#O_D9*r zr|qGgceIH+wler#&C;4Uttt`XgO*AB6Ia6)8?MbQ1@`p25^dDSAdk*WGM)iWZ!i@% zow^)$+TbpXBo3T-(D8wI47pPvU3gbPYT8fL=w!p1jbER7Co=p$im4k>(eca#)Hg@ zU-&87>Uq-Z8iW3LNmG4klWVaC|NcvVzx?U0a^q$N#4~(uQ7UQiS@~=}VL+Ze=5O^u zQ8JE#M7===9O?s)g7XJ0D;I0diJYR>`t2U;(X&@Ct=QMEuVCk@R>XHW?ad5Jiya7A z(?7+L#~wtm4Z*10JE(yv+F#v zP6T@R8OH{8@%uLlww?*Q%tkLhR1lr4dgL!EJxisN;2V|yK}U^L>T?SAs#t3hu-CSe zb}8wz7CbATRKa9zNa#uGozw?ssW+HtuM?J0cruX;;^Rfk7xh`3aqO&O=U3CcT&4LM@D|7yT`9~MWjx?9eCGi6HpTr^G7XoOpCNDs_J_~Pz8B!L z6#lS+dU@=SN~}ha5BWXvmla4-S;Vb;(r#VaadRlv>+rvnfNZA)MhVS*?4!(Jw34-H?M%fGWOYLpSxy>!h_qFHf;$T-ss|UfPcw+VL^fPNgx3Z#eYB!1 zysJ~dy}{Ha?J4*wzB{Nk@%gZ*@TWGXt`*|;_U@9~d{IJ0S&3<^eIy=2=c^KcsEXd; zeI@BBp-3n7r6Y7&UIAkuKWl(BO78-m`WG8sYaOS<5l{Sf^ri`uth3h1BOaZ3X}5?snex)>bT^i(5j;oUICa#b>)~YuL4_ZNXpPz^5M0hvsjMZ2ih*`}Fv^ zHKqx>1aXrgfQr3VkVSAp0oWKb@lgF>o$KfX!0**}-^j9lo2riFKf* zOR$5d=0jwH_0mad-9sB)N_LCFyMi)`>!^Z;GK!U~r%j(Ryyc88&r$+{5?EB0M}5WA zJHRFAz-tHRHM?lEED`sc>YeMffJ$k-U=HGmFJ2tkv%@3XEv(zSSGMeWVa3{whJE%7 zTL*A|dT?a1Sjzl5m84Q!_+D-NS)dELBy3Mk8}{P|C-&FBIkT}hiatWdv2`lNmO!Vt zo&mfj{H!k}35m{<22s39_($=}nN^XEA+%D-J=IcIph4lTTWdMn#pjf7s6JjD9di&o zVeCpkRbpzN2dOtnM+s}#i)4Imui%rFSQn3c-klYArfqff&iH|O@@ zi&N`@)3WIl^G2=!U@iQ>F6&xYO1TX}@v2VQ?3XHbg1!`eOtY>(w2dfo1Wj;;@aGC})ckG$;8qr!c0QF|q1}>YjB6G~7ARIt@Fs@4Sk^djh5)jO<%kuw6i5W@ zVUS01qybsWt695zX$=FHgqe6Q0#`&h60w+_BM`rMc4Wd@y(RyKy0)S`+SU4>9t&ajzjixTZUxq_AE`X%4CJdTp&e?^bDXb@Hm9&JFLZwHzUm1?TjN#+C|e5P<6pod6z^Y&cdRp zRl}&!x8t*OrzBL?LEW%jMi0-?F_J3xuW*gBb|qK}q|ZD7E4MMg<1Y7%S)-xdUalSY ztcZc>Ou|+kc~Qh zx6IseCN-?pQL+@gQpdn5+tM{h;+hf4t<~+?(n=mD$>WYW$&eNRp>>R%>T3p*eoN=& z07czt03Cg40|EjVysfo_`DX)bRNC;L$5zvRXgYGc?KwcVGDu4Bc`C+rXqxTil&$*5 zwiZ^vQ#+>!AV#tek4`27z)Kv(h~nn8F+4rOi3s_o){&M%egtBdbKGM&?=mWqtf}gv z$9Z2(ZWM^^xE)dLG@{s`hjxw=;V8Tvwy>9HFR$BDHiEE^O{XE$313)IJL^-{ImY!G zYY(NiU#>fav64-@jR4g@bY1tMl8##U_`HwL+++X7-?-4+g6seD~sY$Qf=|$$0aX#sxMUctKbO6u<&>`6h;HZg?PE=@j)CD$> zxhw$A&u6s@-G@GM(B*dK0AqJI*DZl;#ODKm$k-i&)seFAfA=dkLng*J6ib^c79Mpi z!M&ArrDJjX=&uT3A&)YZ!_z|^W&px4_YS4dX;S*krGxQP{nP6kNqc;7;hc!Ad<=y; zvRVfo00=HC0E`k=jcPfuDxni`Ix6XoT>1bhEdYW}&uC}5iCn9$vNDi#yiG@}$LPO$ zXM%j8C%woJp!+}j{?}{`8TyNRPwkfvUtp*Kr|6z8US1+Pw>2D_o%Lmr-K}dPfex$H z?VNFFBS{fUW!?(qG74zxWBm*e+_8=}y_lbBz8OYy%1vT`X8|(>^c4VUj{DYPE!3E8 zJ(snWT*e+>6y0WlcAX)cHH+u=!IKNd9Ss&=xl1t4s98FlMt6!A7zeT}!yn{1op#@{E1UM-oprmsgbsjzJ}6DAlo^}ToMJK2pdAECRzkg@T-ivr}Xgbz~U*Ep610cPy`=yo*(VNd+T-fKxN*TGH zqNAjb6a*?`YdQ%1JQQ)6SjW(?hRi<2G4o*C)WCB*K_B7dsvpKCfL5Kqb)431s33Z) zI5NL~_p1HYD>rNj+gt)@ef0dqK7M@2?K?(k%CI_ryO*xuWPI$+XEjd3(<$| zj6)lBnvVl=b38xAIKlz!4|+m6$Ti%R{GfaFyZgyK736WX3Hd46m&p-qb-F=H99`&} zD^pIdF9L28>3Z}!w{VWG%T~wkDf?NGA(eGeU`tMlf?JDH6xuYB-e3&82gE|38sm*v zTqjka)0l_rXtcV{w})UI##B(VP=5%$7-C*=`|*$NxsL8n9-g}AzIk^S+D7c^(z0D$ zNm?G>7Y@*g6hDqh8XIwuK&U7F1V^^^KTKr)jNyNq7e91pVd+v@`&=IZXtT5}(r>eDezW!30f_etzSE~WlA zm#qc{{q^G)F2JD;>z4uF#SFQf?j`=>cg+Y+a%0oqy60lVUk1_nDcWlTLt}Ph!zT`^Sr4-sazbxgqOf_lu*U zyD|6F02ZI&HQiGe@IKSx2XkXxWvdmO7Dkm^FJ#)Vd)V;7&>f3b5M3KkI(1mbPf)<9 zhYl3R5zhG#a-Wp)OV%+l0_*y4ti=Em6#c`<&x%-P>J-oTB$+hsFxL zVAG$2*Y+hgAsLVfDzyqEdgT0j@7{`xD z1XOM!YB{dC#C(!C&aHOG^^@`h!|pV!3!Gp-RhRZR`!zs(%)Yvtw69$&xJ~FDxW=m^ z^w2lYoO8Yj-+sH9U$Px&qb7k@@HxUUKe%m%&xM?TCAU|y7MS7-ur`OMWm|?fzIuHJ zKQRQhlFx@6d&c-qN&H&;Gu9}GO;;&MjY;Lov|%ipsO)ZS76l^MJ?ye8d4Tc|&h`jf z^1Jj&gSj<3T`MdvS-V-abNt$~QWNaov@#fFqfoFc*l|AU^BE<9g{;K z?Fa8z54;6rf>sOvSiJ4@CvquWAR1R{@P4CiU;XWOt;kxHkBb&gicTmh=q|5w^NI_|ezO02z&%iIIUM~ z7K+>VzW+`8qks5YR=cR%XP-YYKeFX#Z5O9O`*wK`{edp458-{V?|2eqZbKK$^?+yI z@eJ+iYR>L~F)J*F?5IvGPgrN^QR$Z=xKF&J-b!8Wqs-yWe8Spb;6|@+yK6ZYR91su zWrR!bDQM`0PLivKM;FLd$O<`hF+SEDnVl)lfG&}*r^fQi%&meg)ikn)kI}~GP`S}` z*kdW)S4k3`_8s;6He(zr)g@I}0y}@g`l-PFa+S!hYPxua9f*+u4 z_sOJhaj@>(kIz0B*z2n)S01C@ZJI9_bY)9fV2dhw1pQEB-8<;HQ)Ra+=qMj_%(}Cr ztya&Xv8Y>1B_y5V*N>fQ#TH>#-nqVM>j|(hdbTG(!98W$`~5Z;GtBx6OQ0KghLQ?p z&sB;9_2A0Ks3CJKjPD4|8}P^kZ2s)HW@lY|QiwNzk5xjesFSN;%&knyHkfk^S-F*q zf@SgjS!X{!=SjU`qh7-{SM%n_1}b(o!q=4lQ$)7IjQ{PORq)V;UD;l->J;BJma%7z zv3>BOXiqP6vZ`TScxoMebz>=IZ(ZB8-PN?UJ1uOR->wG7_TDRd_TbS&yHeP)3ACy9 z+Lq7c?NSzekMHvDK74|_=k3Ff9$-(^+!Fo4oTV2XCPkj4&sfN>l~sN&-)epT

bhEpLXLjJr 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

&iw*FF~`kDHjgb2~CnN{OJ7+ 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�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

|59ag61p{p5v&)cajRDc8+>q+lEq8lUB!4en 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≥uz&s16`gdZp-r&;D$Vzo3F>`o_;wE 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

)0xQ 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

qI(`>e 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

(YU0H>8JJMX6{VMp-e3hpIWv*xQPz^J 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%0D)Vq7Cz%#b&sC~}Z+y!3>;5MxYBGPgdtY#{RDv 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

  • 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%0AJR&YLdIDM!N&r#3V{L_dknf@AR@}Zq|Maawd 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