{"note":"OpenAPI conversion -- returning structured metadata","name":"microcks-local","description":"Microcks API v1.7","version":"1.7.1","base_url":"http://microcks.example.com/api","endpoints":44,"raw":"@lap v0.3\n# Machine-readable API spec. Each @endpoint block is one API call.\n@api Microcks API v1.7\n@base http://microcks.example.com/api\n@version 1.7.1\n@auth OAuth2\n@endpoints 44\n@hint download_for_search\n@toc services(8), tests(7), jobs(9), artifact(1), secrets(6), keycloak(1), resources(2), features(1), import(1), export(1), metrics(7)\n\n@group services\n@endpoint GET /services\n@desc Get Services and APIs\n@optional {page: int # Page of Services to retrieve (starts at and defaults to 0), size: int # Size of a page. Maximum number of Services to include in a response (defaults to 20)}\n@returns(200) {id: str, name: str, version: str, type: str, operations: [map], xmlNS: str, metadata: map{createdOn: int, lastUpdate: int, annotations: map, labels: map}} # List of found Services\n\n@endgroup\n\n@group tests\n@endpoint POST /tests\n@desc Create a new Test\n@required {serviceId: str # Unique identifier of service to test, testEndpoint: str # Endpoint to test for this service, runnerType: str(HTTP/SOAP_HTTP/SOAP_UI/POSTMAN/OPEN_API_SCHEMA/ASYNC_API_SCHEMA/GRPC_PROTOBUF/GRAPHQL_SCHEMA) # Type of test strategy (different strategies are implemented by different runners), timeout: int # The maximum time (in milliseconds) to wait for this test ends}\n@optional {filteredOperations: [str] # A restriction on service operations to test, operationHeaders: map # Specification of additional headers for a Service/API operations. Keys are operation name or \"globals\" (if header applies to all), values are Header objects DTO., secretName: str # The name of Secret to use for connecting the test endpoint}\n@returns(201) {id: str, version: num, testNumber: num, testDate: int(int64), testedEndpoint: str, serviceId: str, elapsedTime: num, success: bool, inProgress: bool, runnerType: str, testCaseResults: [any], secretRef: any, operationHeaders: map, timeout: int} # Created TestResult (empty shell cause tests are executed asynchronously)\n\n@endgroup\n\n@group services\n@endpoint GET /services/count\n@desc Get the Services counter\n@returns(200) {counter: int(int32)} # Number of Services in datastore\n\n@endgroup\n\n@group jobs\n@endpoint GET /jobs\n@desc Get ImportJobs\n@optional {page: int # Page of ImportJobs to retrieve (starts at and defaults to 0), size: int # Size of a page. Maximum number of ImportJobs to include in a response (defaults to 20), name: str # Name like criterion for query}\n@returns(200) List of found ImportJobs\n\n@endpoint POST /jobs\n@desc Create ImportJob\n@required {name: str # Unique distinct name of this ImportJob, repositoryUrl: str # URL of mocks and tests repository artifact}\n@optional {id: str # Unique identifier of ImportJob, repositoryDisableSSLValidation: bool # Whether to disable SSL certificate verification when checking repository, frequency: str # Reserved for future usage, createdDate: str(date-time) # Creation date for this ImportJob, lastImportDate: str(date-time) # Date last import was done, lastImportError: str # Error message of last import (if any), active: bool # Whether this ImportJob is active (ie. scheduled for execution), etag: str # Etag of repository URL during previous import. Is used for not re-importing if no recent changes, serviceRefs: [any] # References of Services discovered when checking repository, metadata: map{createdOn!: int, lastUpdate!: int, annotations: map, labels: map} # Commodity object for holding metadata on any entity. This object is inspired by Kubernetes metadata., secretRef: any # Lightweight reference for an existing Secret, mainArtifact: bool # Flag telling if considered as primary or secondary artifact. Default to `true`}\n@returns(201) {id: str, name: str, repositoryUrl: str, repositoryDisableSSLValidation: bool, frequency: str, createdDate: str(date-time), lastImportDate: str(date-time), lastImportError: str, active: bool, etag: str, serviceRefs: [any], metadata: map{createdOn: int, lastUpdate: int, annotations: map, labels: map}, secretRef: any, mainArtifact: bool} # Created ImportJob\n\n@endpoint GET /jobs/{id}\n@desc Get ImportJob\n@returns(200) {id: str, name: str, repositoryUrl: str, repositoryDisableSSLValidation: bool, frequency: str, createdDate: str(date-time), lastImportDate: str(date-time), lastImportError: str, active: bool, etag: str, serviceRefs: [any], metadata: map{createdOn: int, lastUpdate: int, annotations: map, labels: map}, secretRef: any, mainArtifact: bool} # Found ImportJob\n\n@endpoint POST /jobs/{id}\n@desc Update ImportJob\n@required {name: str # Unique distinct name of this ImportJob, repositoryUrl: str # URL of mocks and tests repository artifact}\n@optional {id: str # Unique identifier of ImportJob, repositoryDisableSSLValidation: bool # Whether to disable SSL certificate verification when checking repository, frequency: str # Reserved for future usage, createdDate: str(date-time) # Creation date for this ImportJob, lastImportDate: str(date-time) # Date last import was done, lastImportError: str # Error message of last import (if any), active: bool # Whether this ImportJob is active (ie. scheduled for execution), etag: str # Etag of repository URL during previous import. Is used for not re-importing if no recent changes, serviceRefs: [any] # References of Services discovered when checking repository, metadata: map{createdOn!: int, lastUpdate!: int, annotations: map, labels: map} # Commodity object for holding metadata on any entity. This object is inspired by Kubernetes metadata., secretRef: any # Lightweight reference for an existing Secret, mainArtifact: bool # Flag telling if considered as primary or secondary artifact. Default to `true`}\n@returns(200) {id: str, name: str, repositoryUrl: str, repositoryDisableSSLValidation: bool, frequency: str, createdDate: str(date-time), lastImportDate: str(date-time), lastImportError: str, active: bool, etag: str, serviceRefs: [any], metadata: map{createdOn: int, lastUpdate: int, annotations: map, labels: map}, secretRef: any, mainArtifact: bool} # Updated ImportJob\n\n@endpoint DELETE /jobs/{id}\n@desc Delete ImportJob\n@returns(200) ImportJob deleted\n\n@endpoint PUT /jobs/{id}/activate\n@desc Activate an ImportJob\n@returns(200) {id: str, name: str, repositoryUrl: str, repositoryDisableSSLValidation: bool, frequency: str, createdDate: str(date-time), lastImportDate: str(date-time), lastImportError: str, active: bool, etag: str, serviceRefs: [any], metadata: map{createdOn: int, lastUpdate: int, annotations: map, labels: map}, secretRef: any, mainArtifact: bool} # ImportJob is activated\n\n@endpoint PUT /jobs/{id}/start\n@desc Start an ImportJob\n@returns(200) {id: str, name: str, repositoryUrl: str, repositoryDisableSSLValidation: bool, frequency: str, createdDate: str(date-time), lastImportDate: str(date-time), lastImportError: str, active: bool, etag: str, serviceRefs: [any], metadata: map{createdOn: int, lastUpdate: int, annotations: map, labels: map}, secretRef: any, mainArtifact: bool} # Started ImportJob\n\n@endpoint PUT /jobs/{id}/stop\n@desc Stop an ImportJob\n@returns(200) {id: str, name: str, repositoryUrl: str, repositoryDisableSSLValidation: bool, frequency: str, createdDate: str(date-time), lastImportDate: str(date-time), lastImportError: str, active: bool, etag: str, serviceRefs: [any], metadata: map{createdOn: int, lastUpdate: int, annotations: map, labels: map}, secretRef: any, mainArtifact: bool} # Stopped ImportJob\n\n@endgroup\n\n@group services\n@endpoint GET /services/{id}\n@desc Get Service\n@optional {messages: bool # Whether to include details on services messages into result. Default is false}\n@returns(200)\n\n@endpoint DELETE /services/{id}\n@desc Delete Service\n@returns(200) Service has been deleted\n\n@endgroup\n\n@group artifact\n@endpoint POST /artifact/upload\n@desc Upload an artifact\n@required {mainArtifact: bool # Flag telling if this should be considered as primary or secondary artifact. Default to 'true'}\n@returns(201) Artifact was imported and Service found\n@returns(204) No file attribute found in uploaded data\n@errors {400: Artifact content is invalid and not understood}\n\n@endgroup\n\n@group jobs\n@endpoint GET /jobs/count\n@desc Get the ImportJobs counter\n@returns(200) {counter: int(int32)} # Number of ImportJobs in datastore\n\n@endgroup\n\n@group secrets\n@endpoint GET /secrets\n@desc Get Secrets\n@optional {page: int # Page of Secrets to retrieve (starts at and defaults to 0), size: int # Size of a page. Maximum number of Secrets to include in a response (defaults to 20)}\n@returns(200) List of found Secrets\n\n@endpoint POST /secrets\n@desc Create a new Secret\n@required {name: str # Unique distinct name of Secret, description: str # Description of this Secret}\n@optional {id: str # Unique identifier of Secret, username: str, password: str, token: str, tokenHeader: str, caCertPem: str}\n@returns(201) {id: str, name: str, username: str, password: str, token: str, tokenHeader: str, caCertPem: str, description: str} # Created Secret\n\n@endpoint GET /secrets/{id}\n@desc Get Secret\n@returns(200) {id: str, name: str, username: str, password: str, token: str, tokenHeader: str, caCertPem: str, description: str} # Found Secret\n\n@endpoint PUT /secrets/{id}\n@desc Update Secret\n@returns(200) Updated Secret\n\n@endpoint DELETE /secrets/{id}\n@desc Delete Secret\n@returns(200) Secret has been deleted\n\n@endpoint GET /secrets/count\n@desc Get the Secrets counter\n@returns(200) {counter: int(int32)} # Number of Secrets in datastore\n\n@endgroup\n\n@group tests\n@endpoint GET /tests/service/{serviceId}\n@desc Get TestResults by Service\n@returns(200) List of TestResults for the Service having the requested id\n\n@endpoint GET /tests/service/{serviceId}/count\n@desc Get the TestResults for Service counter\n@returns(200) {counter: int(int32)} # Number of TestResults for this Service in datastore\n\n@endpoint GET /tests/{id}\n@desc Get TestResult\n@returns(200) {id: str, version: num, testNumber: num, testDate: int(int64), testedEndpoint: str, serviceId: str, elapsedTime: num, success: bool, inProgress: bool, runnerType: str, testCaseResults: [any], secretRef: any, operationHeaders: map, timeout: int} # Requested TestResult\n\n@endpoint GET /tests/{id}/messages/{testCaseId}\n@desc Get messages for TestCase\n@returns(200) List of request and response messages for this TestCase\n\n@endpoint POST /tests/{id}/testCaseResult\n@desc Report and create a new TestCaseResult\n@required {operationName: str # Name of related operation for this TestCase}\n@returns(200) {success: bool, elapsedTime: num, operationName: str, testStepResults: [any]} # TestCaseResult is reported\n\n@endgroup\n\n@group keycloak\n@endpoint GET /keycloak/config\n@desc Get authentification configuration\n@returns(200) {realm: str, auth-server-url: str, public-client: bool, ssl-required: any, resource: str, enabled: bool} # Get current configuration\n\n@endgroup\n\n@group services\n@endpoint PUT /services/{id}/operation\n@desc Override Service Operation\n@required {operationName: str # Name of operation to update}\n@optional {dispatcher: str # Type of dispatcher to apply for this operation, dispatcherRules: str # Rules of dispatcher for this operation, defaultDelay: int # Default delay in milliseconds to apply to mock responses on this operation, parameterConstraints: [map{name!: str, required: bool, recopy: bool, mustMatchRegexp: str, in: str}] # Constraints that may apply to incoming parameters on this operation}\n@returns(200) Operation has been updated\n@errors {500: Operation cannot be updated}\n\n@endpoint PUT /services/{id}/metadata\n@desc Update Service Metadata\n@required {createdOn: int # Creation date of attached object, lastUpdate: int # Last update of attached object}\n@optional {annotations: map # Annotations of attached object, labels: map # Labels put on attached object}\n@returns(200) Service metadata has been updated\n@errors {500: Update of metadata failed}\n\n@endpoint GET /services/labels\n@desc Get the already used labels for Services\n@returns(200) Already used labels: keys are label Keys, values are array of label Values\n\n@endpoint GET /services/search\n@desc Search for Services and APIs\n@required {queryMap: map # Map of criterion. Key can be simply 'name' with value as the searched string. You can also search by label using keys like 'labels.x' where 'x' is the label and value the label value}\n@returns(200) List of found Services (filtered according search criteria)\n\n@endgroup\n\n@group tests\n@endpoint GET /tests/{id}/events/{testCaseId}\n@desc Get events for TestCase\n@returns(200) List of event messages for this TestCase\n\n@endgroup\n\n@group resources\n@endpoint GET /resources/{name}\n@desc Get Resource\n@returns(200) {id: str, name: str, content: str, type: str, serviceId: str, path: str, sourceArtifact: str} # Retrieve the resource having this name\n\n@endpoint GET /resources/service/{serviceId}\n@desc Get Resources by Service\n@returns(200) List the resources attached to a Service or API\n\n@endgroup\n\n@group features\n@endpoint GET /features/config\n@desc Get features configuration\n@returns(200) Get features configuration\n\n@endgroup\n\n@group import\n@endpoint POST /import\n@desc Import a snapshot\n@returns(201) Snasphot has been correctly imported\n\n@endgroup\n\n@group export\n@endpoint GET /export\n@desc Export a snapshot\n@required {serviceIds: [str] # List of service identifiers to export}\n@returns(200) Snapshot file representing the export of requested services\n\n@endgroup\n\n@group metrics\n@endpoint GET /metrics/invocations/global\n@desc Get aggregated invocation statistics for a day\n@optional {day: str # The day to get statistics for (formatted with yyyyMMdd pattern). Default to today if not provided.}\n@returns(200) {id: str, day: str, serviceName: str, serviceVersion: str, dailyCount: num, hourlyCount: map, minuteCount: map} # Aggregated invocation statistics for specified day\n\n@endpoint GET /metrics/conformance/aggregate\n@desc Get aggregation of conformance metrics\n@returns(200) Get aggregated coverage metric value\n\n@endpoint GET /metrics/conformance/service/{serviceId}\n@desc Get conformance metrics for a Service\n@returns(200) {id: str, serviceId: str, aggregationLabelValue: str, maxPossibleScore: num(double), currentScore: num(double), lastUpdateDay: str, latestTrend: str, latestScores: map} # Test coverage metric for Service\n\n@endpoint GET /metrics/invocations/top\n@desc Get top invocation statistics for a day\n@optional {day: str # The day to get statistics for (formatted with yyyyMMdd pattern). Default to today if not provided., limit: int # The number of top invoked mocks to return}\n@returns(200) Top invocations for a defined day\n\n@endpoint GET /metrics/invocations/{serviceName}/{serviceVersion}\n@desc Get invocation statistics for Service\n@optional {day: str # The day to get statistics for (formatted with yyyyMMdd pattern). Default to today if not provided.}\n@returns(200) {id: str, day: str, serviceName: str, serviceVersion: str, dailyCount: num, hourlyCount: map, minuteCount: map} # Invocation statistics for service for specified day\n\n@endpoint GET /metrics/invocations/global/latest\n@desc Get aggregated invocations statistics for latest days\n@optional {limit: int # Number of days to get back in time. Default is 20.}\n@returns(200) A map where keys are day (formatted using yyyyMMdd pattern) and values are counter of invocations on this day\n\n@endpoint GET /metrics/tests/latest\n@desc Get latest tests results\n@optional {limit: int # Number of days to consider for test results to return. Default is 7 (one week)}\n@returns(200) Test results summary for specified  last days.\n\n@endgroup\n\n@end\n"}