Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Use OpenAPI standard for Dataverse API's (Swagger) #5794

Closed
skasberger opened this issue Apr 25, 2019 · 17 comments
Closed

Use OpenAPI standard for Dataverse API's (Swagger) #5794

skasberger opened this issue Apr 25, 2019 · 17 comments

Comments

@skasberger
Copy link
Contributor

It would be great, if the Dataverse API's would apply the OpenAPI standard procedure.
You can find more about this here:

@pdurbin pdurbin changed the title Use OpenAPI standard for Dataverse API's Use OpenAPI standard for Dataverse API's (Swagger) Apr 25, 2019
@pdurbin
Copy link
Member

pdurbin commented Apr 25, 2019

Bill McKinney did some great work in this area of adding Swagger support three years ago and I just pushed his (unmerged) branch to the IQSS repo (it's also still in his fork):

https://github.com/IQSS/dataverse/compare/5794-swagger-poc-etc

There's lots of other stuff in there besides Swagger support so the task is to create a new branch and copy over the Swagger bits we need (I would suggest looking at 9a8cb0e for example of the Javadoc annotations to add, as well as the dependencies in pom.xml). Then, we can build Swagger docs with Jenkins. If anyone is unfamiliar with how Swagger docs look, you can see https://services.dataverse.harvard.edu/static/swagger-ui/index.html?url=/miniverse/metrics/v1/swagger.yaml

The reason I asked @skasberger to open this issue is that on Monday I met with @whorka @doprdele @mallove and during our discussion of Dataverse APIs and integration possibilities (slide 9 of https://docs.google.com/presentation/d/1wjEOlFuBo_j6yLf_stpKgDQbOPlTTc_yPI_ETsjSCh4/edit?usp=sharing ), @doprdele indicated that publishing a Swagger file in JSON or YAML of Dataverse APIs could help facilitate the creation of additional Dataverse API client libraries. (@poikilotherm seems to agree: http://irclog.iq.harvard.edu/dataverse/2019-04-25#i_91801 .) We currently have libraries for Python, R, and Java listed at http://guides.dataverse.org/en/4.13/api/client-libraries.html but a potential client library for Javascript was mentioned.

@smillidge
Copy link
Contributor

smillidge commented Jun 2, 2019

Open API is available when deployed on Payara 5 via the /openapi endpoint automatically.
This is part of MicroProfile and Payara supports MicroProfile.

Example Output of /openapi for Dataverse

openapi: 3.0.0
info:
  title: Deployed Resources
  version: 1.0.0
servers:
- url: http://Steve-Linux:8080/
  description: Default Server.
- url: https://Steve-Linux:8181/
  description: Default Server.
paths:
  /api/v1/access/datafile/bundle/{fileId}:
    get:
      operationId: datafileBundle
      parameters:
      - name: fileMetadataId
        in: query
        style: simple
        schema:
          type: number
      - name: gbrecs
        in: query
        style: simple
        schema:
          type: boolean
      - name: key
        in: query
        style: simple
        schema:
          type: string
      - name: fileId
        in: path
        required: true
        style: simple
        schema:
          type: string
      responses:
        default:
          description: Default Response.
          content:
            application/zip:
              schema:
                type: object
  /api/v1/access/datafile/{fileId}:
    get:
      operationId: datafile
      parameters:
      - name: gbrecs
        in: query
        style: simple
        schema:
          type: boolean
      - name: key
        in: query
        style: simple
        schema:
          type: string
      - name: fileId
        in: path
        required: true
        style: simple
        schema:
          type: string
      responses:
        default:
          description: Default Response.
          content:
            application/xml:
              schema:
                type: object
  /api/v1/access/datafile/{fileId}/metadata:
    get:
      operationId: tabularDatafileMetadata
      parameters:
      - name: fileMetadataId
        in: query
        style: simple
        schema:
          type: number
      - name: exclude
        in: query
        style: simple
        schema:
          type: string
      - name: include
        in: query
        style: simple
        schema:
          type: string
      - name: fileId
        in: path
        required: true
        style: simple
        schema:
          type: string
      responses:
        default:
          description: Default Response.
          content:
            text/xml:
              schema:
                type: string
  /api/v1/access/datafile/{fileId}/metadata/ddi:
    get:
      operationId: tabularDatafileMetadataDDI
      parameters:
      - name: fileMetadataId
        in: query
        style: simple
        schema:
          type: number
      - name: exclude
        in: query
        style: simple
        schema:
          type: string
      - name: include
        in: query
        style: simple
        schema:
          type: string
      - name: fileId
        in: path
        required: true
        style: simple
        schema:
          type: string
      responses:
        default:
          description: Default Response.
          content:
            text/xml:
              schema:
                type: string
  /api/v1/access/datafile/{fileId}/metadata/preprocessed:
    get:
      operationId: tabularDatafileMetadataPreprocessed
      parameters:
      - name: key
        in: query
        style: simple
        schema:
          type: string
      - name: fileId
        in: path
        required: true
        style: simple
        schema:
          type: string
      responses:
        default:
          description: Default Response.
          content:
            text/xml:
              schema:
                type: object
  /api/v1/access/datafile/{id}/grantAccess/{identifier}:
    put:
      operationId: grantFileAccess
      parameters:
      - name: id
        in: path
        required: true
        style: simple
        schema:
          type: string
      - name: identifier
        in: path
        required: true
        style: simple
        schema:
          type: string
      responses:
        default:
          description: Default Response.
          content:
            '*/*':
              schema:
                type: object
  /api/v1/access/datafile/{id}/listRequests:
    get:
      operationId: listFileAccessRequests
      parameters:
      - name: id
        in: path
        required: true
        style: simple
        schema:
          type: string
      responses:
        default:
          description: Default Response.
          content:
            '*/*':
              schema:
                type: object
  /api/v1/access/datafile/{id}/rejectAccess/{identifier}:
    put:
      operationId: rejectFileAccess
      parameters:
      - name: id
        in: path
        required: true
        style: simple
        schema:
          type: string
      - name: identifier
        in: path
        required: true
        style: simple
        schema:
          type: string
      responses:
        default:
          description: Default Response.
          content:
            '*/*':
              schema:
                type: object
  /api/v1/access/datafile/{id}/requestAccess:
    put:
      operationId: requestFileAccess
      parameters:
      - name: id
        in: path
        required: true
        style: simple
        schema:
          type: string
      responses:
        default:
          description: Default Response.
          content:
            '*/*':
              schema:
                type: object
  /api/v1/access/datafile/{id}/revokeAccess/{identifier}:
    delete:
      operationId: revokeFileAccess
      parameters:
      - name: id
        in: path
        required: true
        style: simple
        schema:
          type: string
      - name: identifier
        in: path
        required: true
        style: simple
        schema:
          type: string
      responses:
        default:
          description: Default Response.
          content:
            '*/*':
              schema:
                type: object
  /api/v1/access/datafiles/{fileIds}:
    get:
      operationId: datafiles
      parameters:
      - name: gbrecs
        in: query
        style: simple
        schema:
          type: boolean
      - name: key
        in: query
        style: simple
        schema:
          type: string
      - name: fileIds
        in: path
        required: true
        style: simple
        schema:
          type: string
      responses:
        default:
          description: Default Response.
          content:
            application/zip:
              schema:
                type: object
  /api/v1/access/dsCardImage/{versionId}:
    get:
      operationId: dsCardImage
      parameters:
      - name: versionId
        in: path
        required: true
        style: simple
        schema:
          type: number
      responses:
        default:
          description: Default Response.
          content:
            image/png:
              schema:
                type: object
  /api/v1/access/dvCardImage/{dataverseId}:
    get:
      operationId: dvCardImage
      parameters:
      - name: dataverseId
        in: path
        required: true
        style: simple
        schema:
          type: number
      responses:
        default:
          description: Default Response.
          content:
            image/png:
              schema:
                type: object
  /api/v1/access/fileCardImage/{fileId}:
    get:
      operationId: fileCardImage
      parameters:
      - name: fileId
        in: path
        required: true
        style: simple
        schema:
          type: number
      responses:
        default:
          description: Default Response.
          content:
            image/png:
              schema:
                type: object
  /api/v1/access/variable/{varId}/metadata/ddi:
    get:
      operationId: dataVariableMetadataDDI
      parameters:
      - name: fileMetadataId
        in: query
        style: simple
        schema:
          type: number
      - name: exclude
        in: query
        style: simple
        schema:
          type: string
      - name: include
        in: query
        style: simple
        schema:
          type: string
      - name: varId
        in: path
        required: true
        style: simple
        schema:
          type: number
      responses:
        default:
          description: Default Response.
          content:
            application/xml:
              schema:
                type: string
  /api/v1/access/{id}/allowAccessRequest:
    put:
      operationId: allowAccessRequest
      parameters:
      - name: id
        in: path
        required: true
        style: simple
        schema:
          type: string
      requestBody:
        content:
          '*/*':
            schema:
              type: string
      responses:
        default:
          description: Default Response.
          content:
            '*/*':
              schema:
                type: object
  /api/v1/admin/assignee/{idtf}:
    get:
      operationId: findRoleAssignee
      parameters:
      - name: idtf
        in: path
        required: true
        style: simple
        schema:
          type: string
      responses:
        default:
          description: Default Response.
          content:
            '*/*':
              schema:
                type: object
  '/api/v1/admin/assignments/assignees/{raIdtf: .*}':
    get:
      operationId: getAssignmentsFor
      parameters:
      - name: raIdtf
        in: path
        required: true
        style: simple
        schema:
          type: string
      responses:
        default:
          description: Default Response.
          content:
            '*/*':
              schema:
                type: object
  /api/v1/admin/authenticatedUsers:
    get:
      operationId: listAuthenticatedUsers
      responses:
        default:
          description: Default Response.
          content:
            '*/*':
              schema:
                type: object
    post:
      operationId: createAuthenicatedUser
      requestBody:
        content:
          '*/*':
            schema:
              type: object
      responses:
        default:
          description: Default Response.
          content:
            '*/*':
              schema:
                type: object
  /api/v1/admin/authenticatedUsers/convert/builtin2oauth:
    put:
      operationId: builtin2oauth
      requestBody:
        content:
          '*/*':
            schema:
              type: string
      responses:
        default:
          description: Default Response.
          content:
            '*/*':
              schema:
                type: object
  /api/v1/admin/authenticatedUsers/convert/builtin2shib:
    put:
      operationId: builtin2shib
      requestBody:
        content:
          '*/*':
            schema:
              type: string
      responses:
        default:
          description: Default Response.
          content:
            '*/*':
              schema:
                type: object
  /api/v1/admin/authenticatedUsers/id/{id}:
    delete:
      operationId: deleteAuthenticatedUserById
      parameters:
      - name: id
        in: path
        required: true
        style: simple
        schema:
          type: number
      responses:
        default:
          description: Default Response.
          content:
            '*/*':
              schema:
                type: object
  /api/v1/admin/authenticatedUsers/id/{id}/convertRemoteToBuiltIn:
    put:
      operationId: convertOAuthUserToBuiltin
      parameters:
      - name: id
        in: path
        required: true
        style: simple
        schema:
          type: number
      requestBody:
        content:
          '*/*':
            schema:
              type: string
      responses:
        default:
          description: Default Response.
          content:
            '*/*':
              schema:
                type: object
  /api/v1/admin/authenticatedUsers/id/{id}/convertShibToBuiltIn:
    put:
      operationId: convertShibUserToBuiltin
      parameters:
      - name: id
        in: path
        required: true
        style: simple
        schema:
          type: number
      requestBody:
        content:
          '*/*':
            schema:
              type: string
      responses:
        default:
          description: Default Response.
          content:
            '*/*':
              schema:
                type: object
  /api/v1/admin/authenticatedUsers/{identifier}:
    get:
      operationId: getAuthenticatedUser
      parameters:
      - name: identifier
        in: path
        required: true
        style: simple
        schema:
          type: string
      responses:
        default:
          description: Default Response.
          content:
            '*/*':
              schema:
                type: object
    delete:
      operationId: deleteAuthenticatedUser
      parameters:
      - name: identifier
        in: path
        required: true
        style: simple
        schema:
          type: string
      responses:
        default:
          description: Default Response.
          content:
            '*/*':
              schema:
                type: object
  /api/v1/admin/authenticationProviderFactories:
    get:
      operationId: listAuthProviderFactories
      responses:
        default:
          description: Default Response.
          content:
            '*/*':
              schema:
                type: object
  /api/v1/admin/authenticationProviders:
    get:
      operationId: listAuthProviders
      responses:
        default:
          description: Default Response.
          content:
            '*/*':
              schema:
                type: object
    post:
      operationId: addProvider
      requestBody:
        content:
          '*/*':
            schema:
              type: object
      responses:
        default:
          description: Default Response.
          content:
            '*/*':
              schema:
                type: object
  /api/v1/admin/authenticationProviders/{id}:
    get:
      operationId: showProvider
      parameters:
      - name: id
        in: path
        required: true
        style: simple
        schema:
          type: string
      responses:
        default:
          description: Default Response.
          content:
            '*/*':
              schema:
                type: object
    delete:
      operationId: deleteAuthenticationProvider
      parameters:
      - name: id
        in: path
        required: true
        style: simple
        schema:
          type: string
      responses:
        default:
          description: Default Response.
          content:
            '*/*':
              schema:
                type: object
  /api/v1/admin/authenticationProviders/{id}/:enabled:
    post:
      operationId: enableAuthenticationProvider_deprecated
      parameters:
      - name: id
        in: path
        required: true
        style: simple
        schema:
          type: string
      requestBody:
        content:
          '*/*':
            schema:
              type: string
      responses:
        default:
          description: Default Response.
          content:
            '*/*':
              schema:
                type: object
  /api/v1/admin/authenticationProviders/{id}/enabled:
    get:
      operationId: checkAuthenticationProviderEnabled
      parameters:
      - name: id
        in: path
        required: true
        style: simple
        schema:
          type: string
      responses:
        default:
          description: Default Response.
          content:
            '*/*':
              schema:
                type: object
    put:
      operationId: enableAuthenticationProvider
      parameters:
      - name: id
        in: path
        required: true
        style: simple
        schema:
          type: string
      requestBody:
        content:
          '*/*':
            schema:
              type: string
      responses:
        default:
          description: Default Response.
          content:
            application/json:
              schema:
                type: object
  /api/v1/admin/batch/jobs:
    get:
      operationId: listBatchJobs
      responses:
        default:
          description: Default Response.
          content:
            application/json:
              schema:
                type: object
  /api/v1/admin/batch/jobs/name/{jobName}:
    get:
      operationId: listBatchJobsByName
      parameters:
      - name: jobName
        in: path
        required: true
        style: simple
        schema:
          type: string
      responses:
        default:
          description: Default Response.
          content:
            application/json:
              schema:
                type: object
  /api/v1/admin/batch/jobs/{jobId}:
    get:
      operationId: listBatchJobById
      parameters:
      - name: jobId
        in: path
        required: true
        style: simple
        schema:
          type: string
      responses:
        default:
          description: Default Response.
          content:
            application/json:
              schema:
                type: object
  /api/v1/admin/clearMetricsCache:
    delete:
      operationId: clearMetricsCache
      responses:
        default:
          description: Default Response.
          content:
            '*/*':
              schema:
                type: object
  /api/v1/admin/clearMetricsCache/{name}:
    delete:
      operationId: clearMetricsCacheByName
      parameters:
      - name: name
        in: path
        required: true
        style: simple
        schema:
          type: string
      responses:
        default:
          description: Default Response.
          content:
            '*/*':
              schema:
                type: object
  /api/v1/admin/confirmEmail/{userId}:
    get:
      operationId: getConfirmEmailToken
      parameters:
      - name: userId
        in: path
        required: true
        style: simple
        schema:
          type: number
      responses:
        default:
          description: Default Response.
          content:
            '*/*':
              schema:
                type: object
    post:
      operationId: startConfirmEmailProcess
      parameters:
      - name: userId
        in: path
        required: true
        style: simple
        schema:
          type: number
      responses:
        default:
          description: Default Response.
          content:
            '*/*':
              schema:
                type: object
  /api/v1/admin/convertUserFromBcryptToSha1:
    post:
      operationId: convertUserFromBcryptToSha1
      requestBody:
        content:
          '*/*':
            schema:
              type: string
      responses:
        default:
          description: Default Response.
          content:
            '*/*':
              schema:
                type: object
  /api/v1/admin/datafiles/integrity/fixmissingoriginalsizes:
    get:
      operationId: fixMissingOriginalSizes
      parameters:
      - name: limit
        in: query
        style: simple
        schema:
          type: integer
      responses:
        default:
          description: Default Response.
          content:
            '*/*':
              schema:
                type: object
  /api/v1/admin/datafiles/integrity/fixmissingoriginaltypes:
    get:
      operationId: fixMissingOriginalTypes
      responses:
        default:
          description: Default Response.
          content:
            '*/*':
              schema:
                type: object
  /api/v1/admin/datasetfield:
    get:
      operationId: getAll
      responses:
        default:
          description: Default Response.
          content:
            '*/*':
              schema:
                type: object
  /api/v1/admin/datasetfield/controlledVocabulary/subject:
    get:
      operationId: showControlledVocabularyForSubject
      responses:
        default:
          description: Default Response.
          content:
            '*/*':
              schema:
                type: object
  /api/v1/admin/datasetfield/load:
    post:
      operationId: loadDatasetFields
      requestBody:
        content:
          text/tab-separated-values:
            schema:
              type: object
      responses:
        default:
          description: Default Response.
          content:
            '*/*':
              schema:
                type: object
  /api/v1/admin/datasetfield/loadNAControlledVocabularyValue:
    get:
      operationId: loadNAControlledVocabularyValue
      responses:
        default:
          description: Default Response.
          content:
            '*/*':
              schema:
                type: object
  /api/v1/admin/datasetfield/loadpropertyfiles:
    post:
      operationId: loadLanguagePropertyFile
      requestBody:
        content:
          application/zip:
            schema:
              type: object
      responses:
        default:
          description: Default Response.
          content:
            '*/*':
              schema:
                type: object
  /api/v1/admin/datasetfield/{name}:
    get:
      operationId: getByName
      parameters:
      - name: name
        in: path
        required: true
        style: simple
        schema:
          type: string
      responses:
        default:
          description: Default Response.
          content:
            '*/*':
              schema:
                type: object
  /api/v1/admin/datasets/integrity/{datasetVersionId}/fixmissingunf:
    post:
      operationId: fixUnf
      parameters:
      - name: forceRecalculate
        in: query
        style: simple
        schema:
          type: boolean
      - name: datasetVersionId
        in: path
        required: true
        style: simple
        schema:
          type: string
      responses:
        default:
          description: Default Response.
          content:
            '*/*':
              schema:
                type: object
  /api/v1/admin/datasets/thumbnailMetadata/{id}:
    get:
      operationId: getDatasetThumbnailMetadata
      parameters:
      - name: id
        in: path
        required: true
        style: simple
        schema:
          type: number
      responses:
        default:
          description: Default Response.
          content:
            '*/*':
              schema:
                type: object
  /api/v1/admin/dataverse/{alias}/addRoleAssignmentsToChildren:
    get:
      operationId: addRoleAssignementsToChildren
      parameters:
      - name: alias
        in: path
        required: true
        style: simple
        schema:
          type: string
      responses:
        default:
          description: Default Response.
          content:
            '*/*':
              schema:
                type: object
  /api/v1/admin/externalTools:
    get:
      operationId: getExternalTools
      responses:
        default:
          description: Default Response.
          content:
            '*/*':
              schema:
                type: object
    post:
      operationId: addExternalTool
      requestBody:
        content:
          '*/*':
            schema:
              type: string
      responses:
        default:
          description: Default Response.
          content:
            '*/*':
              schema:
                type: object
  /api/v1/admin/externalTools/file/{id}:
    get:
      operationId: getExternalToolsByFile
      parameters:
      - name: id
        in: path
        required: true
        style: simple
        schema:
          type: number
      responses:
        default:
          description: Default Response.
          content:
            '*/*':
              schema:
                type: object
  /api/v1/admin/externalTools/{id}:
    delete:
      operationId: deleteExternalTool
      parameters:
      - name: id
        in: path
        required: true
        style: simple
        schema:
          type: number
      responses:
        default:
          description: Default Response.
          content:
            '*/*':
              schema:
                type: object
  /api/v1/admin/feedback:
    post:
      operationId: submitFeedback
      requestBody:
        content:
          '*/*':
            schema:
              type: object
      responses:
        default:
          description: Default Response.
          content:
            '*/*':
              schema:
                type: object
  /api/v1/admin/geoconnect/mapLayerMetadatas/check:
    post:
      operationId: checkMapLayerMetadatas
      responses:
        default:
          description: Default Response.
          content:
            '*/*':
              schema:
                type: object
  /api/v1/admin/geoconnect/mapLayerMetadatas/check/{id}:
    post:
      operationId: checkMapLayerMetadatas
      parameters:
      - name: id
        in: path
        required: true
        style: simple
        schema:
          type: number
      responses:
        default:
          description: Default Response.
          content:
            '*/*':
              schema:
                type: object
  /api/v1/admin/groups/ip:
    get:
      operationId: listIpGroups
      responses:
        default:
          description: Default Response.
          content:
            '*/*':
              schema:
                type: object
    post:
      operationId: postIpGroup
      requestBody:
        content:
          '*/*':
            schema:
              type: object
      responses:
        default:
          description: Default Response.
          content:
            '*/*':
              schema:
                type: object
  /api/v1/admin/groups/ip/{groupIdtf}:
    get:
      operationId: getIpGroup
      parameters:
      - name: groupIdtf
        in: path
        required: true
        style: simple
        schema:
          type: string
      responses:
        default:
          description: Default Response.
          content:
            '*/*':
              schema:
                type: object
    delete:
      operationId: deleteIpGroup
      parameters:
      - name: groupIdtf
        in: path
        required: true
        style: simple
        schema:
          type: string
      responses:
        default:
          description: Default Response.
          content:
            '*/*':
              schema:
                type: object
  /api/v1/admin/groups/ip/{groupName}:
    put:
      operationId: putIpGroups
      parameters:
      - name: groupName
        in: path
        required: true
        style: simple
        schema:
          type: string
      requestBody:
        content:
          '*/*':
            schema:
              type: object
      responses:
        default:
          description: Default Response.
          content:
            '*/*':
              schema:
                type: object
  /api/v1/admin/groups/shib:
    get:
      operationId: listShibGroups
      responses:
        default:
          description: Default Response.
          content:
            '*/*':
              schema:
                type: object
    post:
      operationId: createShibGroup
      requestBody:
        content:
          '*/*':
            schema:
              type: object
      responses:
        default:
          description: Default Response.
          content:
            '*/*':
              schema:
                type: object
  /api/v1/admin/groups/shib/{primaryKey}:
    delete:
      operationId: deleteShibGroup
      parameters:
      - name: primaryKey
        in: path
        required: true
        style: simple
        schema:
          type: string
      responses:
        default:
          description: Default Response.
          content:
            '*/*':
              schema:
                type: object
  /api/v1/admin/index:
    get:
      operationId: indexAllOrSubset
      parameters:
      - name: numPartitions
        in: query
        style: simple
        schema:
          type: number
      - name: partitionIdToProcess
        in: query
        style: simple
        schema:
          type: number
      - name: previewOnly
        in: query
        style: simple
        schema:
          type: boolean
      responses:
        default:
          description: Default Response.
          content:
            '*/*':
              schema:
                type: object
  /api/v1/admin/index/clear:
    get:
      operationId: clearSolrIndex
      responses:
        default:
          description: Default Response.
          content:
            '*/*':
              schema:
                type: object
  /api/v1/admin/index/continue:
    get:
      operationId: indexAllOrSubsetContinue
      parameters:
      - name: numPartitions
        in: query
        style: simple
        schema:
          type: number
      - name: partitionIdToProcess
        in: query
        style: simple
        schema:
          type: number
      - name: previewOnly
        in: query
        style: simple
        schema:
          type: boolean
      responses:
        default:
          description: Default Response.
          content:
            '*/*':
              schema:
                type: object
  /api/v1/admin/index/dataset:
    get:
      operationId: indexDatasetByPersistentId
      parameters:
      - name: persistentId
        in: query
        style: simple
        schema:
          type: string
      responses:
        default:
          description: Default Response.
          content:
            '*/*':
              schema:
                type: object
  /api/v1/admin/index/filemetadata/{dataset_id}:
    get:
      operationId: getFileMetadataByDatasetId
      parameters:
      - name: maxResults
        in: query
        style: simple
        schema:
          type: integer
      - name: sort
        in: query
        style: simple
        schema:
          type: string
      - name: order
        in: query
        style: simple
        schema:
          type: string
      - name: dataset_id
        in: path
        required: true
        style: simple
        schema:
          type: number
      responses:
        default:
          description: Default Response.
          content:
            '*/*':
              schema:
                type: object
  /api/v1/admin/index/filesearch:
    get:
      operationId: filesearch
      parameters:
      - name: persistentId
        in: query
        style: simple
        schema:
          type: string
      - name: semanticVersion
        in: query
        style: simple
        schema:
          type: string
      - name: q
        in: query
        style: simple
        schema:
          type: string
      responses:
        default:
          description: Default Response.
          content:
            '*/*':
              schema:
                type: object
  /api/v1/admin/index/mod:
    get:
      operationId: indexMod
      parameters:
      - name: partitions
        in: query
        style: simple
        schema:
          type: number
      - name: which
        in: query
        style: simple
        schema:
          type: number
      responses:
        default:
          description: Default Response.
          content:
            '*/*':
              schema:
                type: object
  /api/v1/admin/index/perms:
    get:
      operationId: indexAllPermissions
      responses:
        default:
          description: Default Response.
          content:
            '*/*':
              schema:
                type: object
  /api/v1/admin/index/perms/{id}:
    get:
      operationId: indexPermissions
      parameters:
      - name: id
        in: path
        required: true
        style: simple
        schema:
          type: number
      responses:
        default:
          description: Default Response.
          content:
            '*/*':
              schema:
                type: object
  /api/v1/admin/index/permsDebug:
    get:
      operationId: searchPermsDebug
      parameters:
      - name: key
        in: query
        style: simple
        schema:
          type: string
      - name: id
        in: query
        style: simple
        schema:
          type: number
      responses:
        default:
          description: Default Response.
          content:
            '*/*':
              schema:
                type: object
  /api/v1/admin/index/solr/schema:
    get:
      operationId: getSolrSchema
      responses:
        default:
          description: Default Response.
          content:
            '*/*':
              schema:
                type: string
  /api/v1/admin/index/status:
    get:
      operationId: indexStatus
      responses:
        default:
          description: Default Response.
          content:
            '*/*':
              schema:
                type: object
  /api/v1/admin/index/test:
    get:
      operationId: searchDebug
      parameters:
      - name: key
        in: query
        style: simple
        schema:
          type: string
      - name: q
        in: query
        style: simple
        schema:
          type: string
      - name: fq
        in: query
        style: simple
        schema:
          type: array
          items:
            type: string
      responses:
        default:
          description: Default Response.
          content:
            '*/*':
              schema:
                type: object
  /api/v1/admin/index/timestamps:
    delete:
      operationId: deleteAllTimestamps
      responses:
        default:
          description: Default Response.
          content:
            '*/*':
              schema:
                type: object
  /api/v1/admin/index/timestamps/{dvObjectId}:
    delete:
      operationId: deleteTimestamp
      parameters:
      - name: dvObjectId
        in: path
        required: true
        style: simple
        schema:
          type: number
      responses:
        default:
          description: Default Response.
          content:
            '*/*':
              schema:
                type: object
  /api/v1/admin/index/{type}/{id}:
    get:
      operationId: indexTypeById
      parameters:
      - name: type
        in: path
        required: true
        style: simple
        schema:
          type: string
      - name: id
        in: path
        required: true
        style: simple
        schema:
          type: number
      responses:
        default:
          description: Default Response.
          content:
            '*/*':
              schema:
                type: object
  /api/v1/admin/isOrcid:
    get:
      operationId: isOrcidEnabled
      responses:
        default:
          description: Default Response.
          content:
            '*/*':
              schema:
                type: object
  /api/v1/admin/list-users:
    get:
      operationId: filterAuthenticatedUsers
      parameters:
      - name: searchTerm
        in: query
        style: simple
        schema:
          type: string
      - name: selectedPage
        in: query
        style: simple
        schema:
          type: integer
      - name: itemsPerPage
        in: query
        style: simple
        schema:
          type: integer
      responses:
        default:
          description: Default Response.
          content:
            application/json:
              schema:
                type: object
  /api/v1/admin/makeDataCount/addUsageMetricsFromSushiReport:
    post:
      operationId: addUsageMetricsFromSushiReportAll
      parameters:
      - name: reportOnDisk
        in: query
        style: simple
        schema:
          type: string
      - name: id
        in: path
        required: true
        style: simple
        schema:
          type: string
      responses:
        default:
          description: Default Response.
          content:
            '*/*':
              schema:
                type: object
  /api/v1/admin/makeDataCount/sendToHub:
    post:
      operationId: sendDataToHub
      responses:
        default:
          description: Default Response.
          content:
            '*/*':
              schema:
                type: object
  /api/v1/admin/makeDataCount/{id}/addUsageMetricsFromSushiReport:
    post:
      operationId: addUsageMetricsFromSushiReport
      parameters:
      - name: reportOnDisk
        in: query
        style: simple
        schema:
          type: string
      - name: id
        in: path
        required: true
        style: simple
        schema:
          type: string
      responses:
        default:
          description: Default Response.
          content:
            '*/*':
              schema:
                type: object
  /api/v1/admin/makeDataCount/{id}/updateCitationsForDataset:
    post:
      operationId: updateCitationsForDataset
      parameters:
      - name: id
        in: path
        required: true
        style: simple
        schema:
          type: string
      responses:
        default:
          description: Default Response.
          content:
            '*/*':
              schema:
                type: object
  /api/v1/admin/metadata/exportAll:
    get:
      operationId: exportAll
      responses:
        default:
          description: Default Response.
          content:
            application/json:
              schema:
                type: object
  /api/v1/admin/metadata/exportOAI/{specname}:
    put:
      operationId: exportOaiSet
      parameters:
      - name: specname
        in: path
        required: true
        style: simple
        schema:
          type: string
      responses:
        default:
          description: Default Response.
          content:
            '*/*':
              schema:
                type: object
  /api/v1/admin/metadata/reExportAll:
    get:
      operationId: reExportAll
      responses:
        default:
          description: Default Response.
          content:
            application/json:
              schema:
                type: object
  /api/v1/admin/permissions/{dvo}:
    get:
      operationId: findPermissonsOn
      parameters:
      - name: dvo
        in: path
        required: true
        style: simple
        schema:
          type: string
      responses:
        default:
          description: Default Response.
          content:
            '*/*':
              schema:
                type: object
  /api/v1/admin/publishDataverseAsCreator/{id}:
    post:
      operationId: publishDataverseAsCreator
      parameters:
      - name: id
        in: path
        required: true
        style: simple
        schema:
          type: number
      responses:
        default:
          description: Default Response.
          content:
            '*/*':
              schema:
                type: object
  /api/v1/admin/registerDataFileAll:
    get:
      operationId: registerDataFileAll
      responses:
        default:
          description: Default Response.
          content:
            '*/*':
              schema:
                type: object
  /api/v1/admin/roles:
    get:
      operationId: listBuiltinRoles
      responses:
        default:
          description: Default Response.
          content:
            '*/*':
              schema:
                type: object
    post:
      operationId: createNewBuiltinRole
      requestBody:
        content:
          '*/*':
            schema:
              type: object
      responses:
        default:
          description: Default Response.
          content:
            '*/*':
              schema:
                type: object
  /api/v1/admin/savedsearches:
    get:
      operationId: meta
      responses:
        default:
          description: Default Response.
          content:
            '*/*':
              schema:
                type: object
    post:
      operationId: add
      requestBody:
        content:
          '*/*':
            schema:
              type: object
      responses:
        default:
          description: Default Response.
          content:
            '*/*':
              schema:
                type: object
  /api/v1/admin/savedsearches/list:
    get:
      operationId: list
      responses:
        default:
          description: Default Response.
          content:
            '*/*':
              schema:
                type: object
  /api/v1/admin/savedsearches/makelinks/all:
    put:
      operationId: makeLinksForAllSavedSearches
      parameters:
      - name: debug
        in: query
        style: simple
        schema:
          type: boolean
      responses:
        default:
          description: Default Response.
          content:
            '*/*':
              schema:
                type: object
  /api/v1/admin/savedsearches/makelinks/{id}:
    put:
      operationId: makeLinksForSingleSavedSearch
      parameters:
      - name: debug
        in: query
        style: simple
        schema:
          type: boolean
      - name: id
        in: path
        required: true
        style: simple
        schema:
          type: number
      responses:
        default:
          description: Default Response.
          content:
            '*/*':
              schema:
                type: object
  /api/v1/admin/savedsearches/{id}:
    get:
      operationId: show
      parameters:
      - name: id
        in: path
        required: true
        style: simple
        schema:
          type: number
      responses:
        default:
          description: Default Response.
          content:
            '*/*':
              schema:
                type: object
    delete:
      operationId: delete
      parameters:
      - name: id
        in: path
        required: true
        style: simple
        schema:
          type: number
      responses:
        default:
          description: Default Response.
          content:
            '*/*':
              schema:
                type: object
  /api/v1/admin/settings:
    get:
      operationId: listAllSettings
      responses:
        default:
          description: Default Response.
          content:
            '*/*':
              schema:
                type: object
  /api/v1/admin/settings/{name}:
    get:
      operationId: getSetting
      parameters:
      - name: name
        in: path
        required: true
        style: simple
        schema:
          type: string
      responses:
        default:
          description: Default Response.
          content:
            '*/*':
              schema:
                type: object
    put:
      operationId: putSetting
      parameters:
      - name: name
        in: path
        required: true
        style: simple
        schema:
          type: string
      requestBody:
        content:
          '*/*':
            schema:
              type: string
      responses:
        default:
          description: Default Response.
          content:
            '*/*':
              schema:
                type: object
    delete:
      operationId: deleteSetting
      parameters:
      - name: name
        in: path
        required: true
        style: simple
        schema:
          type: string
      responses:
        default:
          description: Default Response.
          content:
            '*/*':
              schema:
                type: object
  /api/v1/admin/sitemap:
    post:
      operationId: updateSiteMap
      responses:
        default:
          description: Default Response.
          content:
            application/json:
              schema:
                type: object
  /api/v1/admin/storageSites:
    get:
      operationId: listAll
      responses:
        default:
          description: Default Response.
          content:
            '*/*':
              schema:
                type: object
    post:
      operationId: addSite
      requestBody:
        content:
          '*/*':
            schema:
              type: object
      responses:
        default:
          description: Default Response.
          content:
            '*/*':
              schema:
                type: object
  /api/v1/admin/storageSites/{id}:
    get:
      operationId: get
      parameters:
      - name: id
        in: path
        required: true
        style: simple
        schema:
          type: number
      responses:
        default:
          description: Default Response.
          content:
            '*/*':
              schema:
                type: object
    delete:
      operationId: delete
      parameters:
      - name: id
        in: path
        required: true
        style: simple
        schema:
          type: number
      responses:
        default:
          description: Default Response.
          content:
            '*/*':
              schema:
                type: object
  /api/v1/admin/storageSites/{id}/primaryStorage:
    put:
      operationId: setPrimary
      parameters:
      - name: id
        in: path
        required: true
        style: simple
        schema:
          type: number
      requestBody:
        content:
          '*/*':
            schema:
              type: string
      responses:
        default:
          description: Default Response.
          content:
            '*/*':
              schema:
                type: object
  /api/v1/admin/submitDataVersionToArchive/{id}/{version}:
    get:
      operationId: submitDatasetVersionToArchive
      parameters:
      - name: id
        in: path
        required: true
        style: simple
        schema:
          type: string
      - name: version
        in: path
        required: true
        style: simple
        schema:
          type: string
      responses:
        default:
          description: Default Response.
          content:
            '*/*':
              schema:
                type: object
  /api/v1/admin/superuser/{identifier}:
    post:
      operationId: toggleSuperuser
      parameters:
      - name: identifier
        in: path
        required: true
        style: simple
        schema:
          type: string
      responses:
        default:
          description: Default Response.
          content:
            '*/*':
              schema:
                type: object
  /api/v1/admin/updateHashValues/{alg}:
    get:
      operationId: updateHashValues
      parameters:
      - name: num
        in: query
        style: simple
        schema:
          type: integer
      - name: alg
        in: path
        required: true
        style: simple
        schema:
          type: string
      responses:
        default:
          description: Default Response.
          content:
            '*/*':
              schema:
                type: object
  /api/v1/admin/validate/dataset/{id}:
    get:
      operationId: validateDataset
      parameters:
      - name: id
        in: path
        required: true
        style: simple
        schema:
          type: string
      responses:
        default:
          description: Default Response.
          content:
            '*/*':
              schema:
                type: object
  /api/v1/admin/validate/datasets:
    get:
      operationId: validateAllDatasets
      responses:
        default:
          description: Default Response.
          content:
            application/json:
              schema:
                type: object
  /api/v1/admin/validatePassword:
    post:
      operationId: validatePassword
      requestBody:
        content:
          '*/*':
            schema:
              type: string
      responses:
        default:
          description: Default Response.
          content:
            '*/*':
              schema:
                type: object
  /api/v1/admin/workflows:
    get:
      operationId: listWorkflows
      responses:
        default:
          description: Default Response.
          content:
            '*/*':
              schema:
                type: object
    post:
      operationId: addWorkflow
      requestBody:
        content:
          '*/*':
            schema:
              type: object
      responses:
        default:
          description: Default Response.
          content:
            '*/*':
              schema:
                type: object
  /api/v1/admin/workflows/default:
    get:
      operationId: listDefaults
      responses:
        default:
          description: Default Response.
          content:
            '*/*':
              schema:
                type: object
  /api/v1/admin/workflows/default/{triggerType}:
    get:
      operationId: getDefault
      parameters:
      - name: triggerType
        in: path
        required: true
        style: simple
        schema:
          type: string
      responses:
        default:
          description: Default Response.
          content:
            '*/*':
              schema:
                type: object
    put:
      operationId: setDefault
      parameters:
      - name: triggerType
        in: path
        required: true
        style: simple
        schema:
          type: string
      requestBody:
        content:
          '*/*':
            schema:
              type: string
      responses:
        default:
          description: Default Response.
          content:
            '*/*':
              schema:
                type: object
    delete:
      operationId: deleteDefault
      parameters:
      - name: triggerType
        in: path
        required: true
        style: simple
        schema:
          type: string
      responses:
        default:
          description: Default Response.
          content:
            '*/*':
              schema:
                type: object
  /api/v1/admin/workflows/ip-whitelist:
    get:
      operationId: getIpWhitelist
      responses:
        default:
          description: Default Response.
          content:
            '*/*':
              schema:
                type: object
    put:
      operationId: setIpWhitelist
      requestBody:
        content:
          '*/*':
            schema:
              type: string
      responses:
        default:
          description: Default Response.
          content:
            '*/*':
              schema:
                type: object
    delete:
      operationId: deleteIpWhitelist
      responses:
        default:
          description: Default Response.
          content:
            '*/*':
              schema:
                type: object
  /api/v1/admin/workflows/{identifier}:
    get:
      operationId: getWorkflow
      parameters:
      - name: identifier
        in: path
        required: true
        style: simple
        schema:
          type: string
      responses:
        default:
          description: Default Response.
          content:
            '*/*':
              schema:
                type: object
  /api/v1/admin/workflows/{id}:
    delete:
      operationId: deleteWorkflow
      parameters:
      - name: id
        in: path
        required: true
        style: simple
        schema:
          type: string
      responses:
        default:
          description: Default Response.
          content:
            '*/*':
              schema:
                type: object
  /api/v1/admin/{id}/registerDataFile:
    get:
      operationId: registerDataFile
      parameters:
      - name: id
        in: path
        required: true
        style: simple
        schema:
          type: string
      responses:
        default:
          description: Default Response.
          content:
            '*/*':
              schema:
                type: object
  /api/v1/admin/{id}/reregisterHDLToPID:
    post:
      operationId: reregisterHdlToPID
      parameters:
      - name: id
        in: path
        required: true
        style: simple
        schema:
          type: string
      responses:
        default:
          description: Default Response.
          content:
            '*/*':
              schema:
                type: object
  /api/v1/batch/harvest:
    get:
      operationId: harvest
      parameters:
      - name: path
        in: query
        style: simple
        schema:
          type: string
      - name: dv
        in: query
        style: simple
        schema:
          type: string
      - name: createDV
        in: query
        style: simple
        schema:
          type: boolean
      - name: key
        in: query
        style: simple
        schema:
          type: string
      responses:
        default:
          description: Default Response.
          content:
            '*/*':
              schema:
                type: object
  /api/v1/batch/import:
    get:
      operationId: getImport
      parameters:
      - name: path
        in: query
        style: simple
        schema:
          type: string
      - name: dv
        in: query
        style: simple
        schema:
          type: string
      - name: createDV
        in: query
        style: simple
        schema:
          type: boolean
      - name: key
        in: query
        style: simple
        schema:
          type: string
      responses:
        default:
          description: Default Response.
          content:
            '*/*':
              schema:
                type: object
    post:
      operationId: postImport
      parameters:
      - name: dv
        in: query
        style: simple
        schema:
          type: string
      - name: key
        in: query
        style: simple
        schema:
          type: string
      requestBody:
        content:
          '*/*':
            schema:
              type: string
      responses:
        default:
          description: Default Response.
          content:
            '*/*':
              schema:
                type: object
  /api/v1/batch/jobs/import/datasets/files/{identifier}:
    post:
      operationId: getFilesystemImport
      parameters:
      - name: mode
        in: query
        style: simple
        schema:
          type: string
          default: MERGE
      - name: uploadFolder
        in: query
        style: simple
        schema:
          type: string
      - name: totalSize
        in: query
        style: simple
        schema:
          type: number
      - name: identifier
        in: path
        required: true
        style: simple
        schema:
          type: string
      responses:
        default:
          description: Default Response.
          content:
            application/json:
              schema:
                type: object
  /api/v1/builtin-users:
    post:
      operationId: save
      parameters:
      - name: password
        in: query
        style: simple
        schema:
          type: string
      - name: key
        in: query
        style: simple
        schema:
          type: string
      requestBody:
        content:
          '*/*':
            schema:
              type: object
      responses:
        default:
          description: Default Response.
          content:
            '*/*':
              schema:
                type: object
  /api/v1/builtin-users/{password}/{key}:
    post:
      operationId: create
      parameters:
      - name: password
        in: path
        required: true
        style: simple
        schema:
          type: string
      - name: key
        in: path
        required: true
        style: simple
        schema:
          type: string
      requestBody:
        content:
          '*/*':
            schema:
              type: object
      responses:
        default:
          description: Default Response.
          content:
            '*/*':
              schema:
                type: object
  /api/v1/builtin-users/{username}/api-token:
    get:
      operationId: getApiToken
      parameters:
      - name: password
        in: query
        style: simple
        schema:
          type: string
      - name: username
        in: path
        required: true
        style: simple
        schema:
          type: string
      responses:
        default:
          description: Default Response.
          content:
            '*/*':
              schema:
                type: object
  /api/v1/datasets/export:
    get:
      operationId: exportDataset
      parameters:
      - name: persistentId
        in: query
        style: simple
        schema:
          type: string
      - name: exporter
        in: query
        style: simple
        schema:
          type: string
      responses:
        default:
          description: Default Response.
          content:
            application/xml:
              schema:
                type: object
            application/json:
              schema:
                type: object
  /api/v1/datasets/modifyRegistrationAll:
    post:
      operationId: updateDatasetTargetURLAll
      responses:
        default:
          description: Default Response.
          content:
            '*/*':
              schema:
                type: object
  /api/v1/datasets/modifyRegistrationPIDMetadataAll:
    get:
      operationId: updateDatasetPIDMetadataAll
      responses:
        default:
          description: Default Response.
          content:
            '*/*':
              schema:
                type: object
  /api/v1/datasets/{datasetId}/deleteLink/{linkedDataverseId}:
    delete:
      operationId: deleteDatasetLinkingDataverse
      parameters:
      - name: datasetId
        in: path
        required: true
        style: simple
        schema:
          type: string
      - name: linkedDataverseId
        in: path
        required: true
        style: simple
        schema:
          type: string
      responses:
        default:
          description: Default Response.
          content:
            '*/*':
              schema:
                type: object
  /api/v1/datasets/{identifier}/assignments:
    get:
      operationId: getAssignments
      parameters:
      - name: identifier
        in: path
        required: true
        style: simple
        schema:
          type: string
      responses:
        default:
          description: Default Response.
          content:
            '*/*':
              schema:
                type: object
    post:
      operationId: createAssignment
      parameters:
      - name: key
        in: query
        style: simple
        schema:
          type: string
      - name: identifier
        in: path
        required: true
        style: simple
        schema:
          type: string
      requestBody:
        content:
          '*/*':
            schema:
              type: string
      responses:
        default:
          description: Default Response.
          content:
            '*/*':
              schema:
                type: object
  /api/v1/datasets/{identifier}/dataCaptureModule/checksumValidation:
    post:
      operationId: receiveChecksumValidationResults
      parameters:
      - name: identifier
        in: path
        required: true
        style: simple
        schema:
          type: string
      requestBody:
        content:
          '*/*':
            schema:
              type: object
      responses:
        default:
          description: Default Response.
          content:
            '*/*':
              schema:
                type: object
  /api/v1/datasets/{identifier}/dataCaptureModule/rsync:
    get:
      operationId: getRsync
      parameters:
      - name: identifier
        in: path
        required: true
        style: simple
        schema:
          type: string
      responses:
        default:
          description: Default Response.
          content:
            '*/*':
              schema:
                type: object
  /api/v1/datasets/{identifier}/lock/{type}:
    post:
      operationId: lockDataset
      parameters:
      - name: identifier
        in: path
        required: true
        style: simple
        schema:
          type: string
      - name: type
        in: path
        required: true
        style: simple
        schema:
          type: object
      responses:
        default:
          description: Default Response.
          content:
            '*/*':
              schema:
                type: object
  /api/v1/datasets/{identifier}/locks:
    get:
      operationId: getLocks
      parameters:
      - name: type
        in: query
        style: simple
        schema:
          type: object
      - name: identifier
        in: path
        required: true
        style: simple
        schema:
          type: string
      responses:
        default:
          description: Default Response.
          content:
            '*/*':
              schema:
                type: object
    delete:
      operationId: deleteLocks
      parameters:
      - name: type
        in: query
        style: simple
        schema:
          type: object
      - name: identifier
        in: path
        required: true
        style: simple
        schema:
          type: string
      responses:
        default:
          description: Default Response.
          content:
            '*/*':
              schema:
                type: object
  /api/v1/datasets/{id}:
    get:
      operationId: getDataset
      parameters:
      - name: id
        in: path
        required: true
        style: simple
        schema:
          type: string
      responses:
        default:
          description: Default Response.
          content:
            '*/*':
              schema:
                type: object
    delete:
      operationId: deleteDataset
      parameters:
      - name: id
        in: path
        required: true
        style: simple
        schema:
          type: string
      responses:
        default:
          description: Default Response.
          content:
            '*/*':
              schema:
                type: object
  /api/v1/datasets/{id}/actions/:publish:
    get:
      operationId: publishDataseUsingGetDeprecated
      parameters:
      - name: type
        in: query
        style: simple
        schema:
          type: string
      - name: id
        in: path
        required: true
        style: simple
        schema:
          type: string
      responses:
        default:
          description: Default Response.
          content:
            '*/*':
              schema:
                type: object
    post:
      operationId: publishDataset
      parameters:
      - name: type
        in: query
        style: simple
        schema:
          type: string
      - name: id
        in: path
        required: true
        style: simple
        schema:
          type: string
      responses:
        default:
          description: Default Response.
          content:
            '*/*':
              schema:
                type: object
  /api/v1/datasets/{id}/add:
    post:
      operationId: addFileToDataset
      parameters:
      - name: id
        in: path
        required: true
        style: simple
        schema:
          type: string
      requestBody:
        content:
          multipart/form-data:
            schema:
              type: string
      responses:
        default:
          description: Default Response.
          content:
            '*/*':
              schema:
                type: object
  /api/v1/datasets/{id}/citationdate:
    put:
      operationId: setCitationDate
      parameters:
      - name: id
        in: path
        required: true
        style: simple
        schema:
          type: string
      requestBody:
        content:
          '*/*':
            schema:
              type: string
      responses:
        default:
          description: Default Response.
          content:
            '*/*':
              schema:
                type: object
    delete:
      operationId: useDefaultCitationDate
      parameters:
      - name: id
        in: path
        required: true
        style: simple
        schema:
          type: string
      responses:
        default:
          description: Default Response.
          content:
            '*/*':
              schema:
                type: object
  /api/v1/datasets/{id}/deleteMetadata:
    put:
      operationId: deleteVersionMetadata
      parameters:
      - name: id
        in: path
        required: true
        style: simple
        schema:
          type: string
      requestBody:
        content:
          '*/*':
            schema:
              type: string
      responses:
        default:
          description: Default Response.
          content:
            '*/*':
              schema:
                type: object
  /api/v1/datasets/{id}/destroy:
    delete:
      operationId: destroyDataset
      parameters:
      - name: id
        in: path
        required: true
        style: simple
        schema:
          type: string
      responses:
        default:
          description: Default Response.
          content:
            '*/*':
              schema:
                type: object
  /api/v1/datasets/{id}/editMetadata:
    put:
      operationId: editVersionMetadata
      parameters:
      - name: replace
        in: query
        style: simple
        schema:
          type: boolean
      - name: id
        in: path
        required: true
        style: simple
        schema:
          type: string
      requestBody:
        content:
          '*/*':
            schema:
              type: string
      responses:
        default:
          description: Default Response.
          content:
            '*/*':
              schema:
                type: object
  /api/v1/datasets/{id}/links:
    get:
      operationId: getLinks
      parameters:
      - name: id
        in: path
        required: true
        style: simple
        schema:
          type: string
      responses:
        default:
          description: Default Response.
          content:
            '*/*':
              schema:
                type: object
  /api/v1/datasets/{id}/makeDataCount/citations:
    get:
      operationId: getMakeDataCountCitations
      parameters:
      - name: id
        in: path
        required: true
        style: simple
        schema:
          type: string
      responses:
        default:
          description: Default Response.
          content:
            '*/*':
              schema:
                type: object
  /api/v1/datasets/{id}/makeDataCount/{metric}:
    get:
      operationId: getMakeDataCountMetricCurrentMonth
      parameters:
      - name: country
        in: query
        style: simple
        schema:
          type: string
      - name: id
        in: path
        required: true
        style: simple
        schema:
          type: string
      - name: metric
        in: path
        required: true
        style: simple
        schema:
          type: string
      responses:
        default:
          description: Default Response.
          content:
            '*/*':
              schema:
                type: object
  /api/v1/datasets/{id}/makeDataCount/{metric}/{yyyymm}:
    get:
      operationId: getMakeDataCountMetric
      parameters:
      - name: country
        in: query
        style: simple
        schema:
          type: string
      - name: id
        in: path
        required: true
        style: simple
        schema:
          type: string
      - name: metric
        in: path
        required: true
        style: simple
        schema:
          type: string
      - name: yyyymm
        in: path
        required: true
        style: simple
        schema:
          type: string
      responses:
        default:
          description: Default Response.
          content:
            '*/*':
              schema:
                type: object
  /api/v1/datasets/{id}/modifyRegistration:
    get:
      operationId: updateDatasetTargetURL
      parameters:
      - name: id
        in: path
        required: true
        style: simple
        schema:
          type: string
      responses:
        default:
          description: Default Response.
          content:
            '*/*':
              schema:
                type: object
  /api/v1/datasets/{id}/modifyRegistrationMetadata:
    post:
      operationId: updateDatasetPIDMetadata
      parameters:
      - name: id
        in: path
        required: true
        style: simple
        schema:
          type: string
      responses:
        default:
          description: Default Response.
          content:
            '*/*':
              schema:
                type: object
  /api/v1/datasets/{id}/move/{targetDataverseAlias}:
    post:
      operationId: moveDataset
      parameters:
      - name: forceMove
        in: query
        style: simple
        schema:
          type: boolean
      - name: id
        in: path
        required: true
        style: simple
        schema:
          type: string
      - name: targetDataverseAlias
        in: path
        required: true
        style: simple
        schema:
          type: string
      responses:
        default:
          description: Default Response.
          content:
            '*/*':
              schema:
                type: object
  /api/v1/datasets/{id}/privateUrl:
    get:
      operationId: getPrivateUrlData
      parameters:
      - name: id
        in: path
        required: true
        style: simple
        schema:
          type: string
      responses:
        default:
          description: Default Response.
          content:
            '*/*':
              schema:
                type: object
    post:
      operationId: createPrivateUrl
      parameters:
      - name: id
        in: path
        required: true
        style: simple
        schema:
          type: string
      responses:
        default:
          description: Default Response.
          content:
            '*/*':
              schema:
                type: object
    delete:
      operationId: deletePrivateUrl
      parameters:
      - name: id
        in: path
        required: true
        style: simple
        schema:
          type: string
      responses:
        default:
          description: Default Response.
          content:
            '*/*':
              schema:
                type: object
  /api/v1/datasets/{id}/returnToAuthor:
    post:
      operationId: returnToAuthor
      parameters:
      - name: id
        in: path
        required: true
        style: simple
        schema:
          type: string
      requestBody:
        content:
          '*/*':
            schema:
              type: string
      responses:
        default:
          description: Default Response.
          content:
            '*/*':
              schema:
                type: object
  /api/v1/datasets/{id}/submitForReview:
    post:
      operationId: submitForReview
      parameters:
      - name: id
        in: path
        required: true
        style: simple
        schema:
          type: string
      responses:
        default:
          description: Default Response.
          content:
            '*/*':
              schema:
                type: object
  /api/v1/datasets/{id}/thumbnail:
    get:
      operationId: getDatasetThumbnail
      parameters:
      - name: id
        in: path
        required: true
        style: simple
        schema:
          type: string
      responses:
        default:
          description: Default Response.
          content:
            image/png:
              schema:
                type: object
    post:
      operationId: uploadDatasetLogo
      parameters:
      - name: id
        in: path
        required: true
        style: simple
        schema:
          type: string
      requestBody:
        content:
          multipart/form-data:
            schema:
              type: object
      responses:
        default:
          description: Default Response.
          content:
            '*/*':
              schema:
                type: object
    delete:
      operationId: removeDatasetLogo
      parameters:
      - name: id
        in: path
        required: true
        style: simple
        schema:
          type: string
      responses:
        default:
          description: Default Response.
          content:
            '*/*':
              schema:
                type: object
  /api/v1/datasets/{id}/thumbnail/candidates:
    get:
      operationId: getDatasetThumbnailCandidates
      parameters:
      - name: id
        in: path
        required: true
        style: simple
        schema:
          type: string
      responses:
        default:
          description: Default Response.
          content:
            '*/*':
              schema:
                type: object
  /api/v1/datasets/{id}/thumbnail/{dataFileId}:
    post:
      operationId: setDataFileAsThumbnail
      parameters:
      - name: id
        in: path
        required: true
        style: simple
        schema:
          type: string
      - name: dataFileId
        in: path
        required: true
        style: simple
        schema:
          type: number
      responses:
        default:
          description: Default Response.
          content:
            '*/*':
              schema:
                type: object
  /api/v1/datasets/{id}/versions:
    get:
      operationId: listVersions
      parameters:
      - name: id
        in: path
        required: true
        style: simple
        schema:
          type: string
      responses:
        default:
          description: Default Response.
          content:
            '*/*':
              schema:
                type: object
  /api/v1/datasets/{id}/versions/{versionId}:
    get:
      operationId: getVersion
      parameters:
      - name: id
        in: path
        required: true
        style: simple
        schema:
          type: string
      - name: versionId
        in: path
        required: true
        style: simple
        schema:
          type: string
      responses:
        default:
          description: Default Response.
          content:
            '*/*':
              schema:
                type: object
    put:
      operationId: updateDraftVersion
      parameters:
      - name: id
        in: path
        required: true
        style: simple
        schema:
          type: string
      - name: versionId
        in: path
        required: true
        style: simple
        schema:
          type: string
      requestBody:
        content:
          '*/*':
            schema:
              type: string
      responses:
        default:
          description: Default Response.
          content:
            '*/*':
              schema:
                type: object
    delete:
      operationId: deleteDraftVersion
      parameters:
      - name: id
        in: path
        required: true
        style: simple
        schema:
          type: string
      - name: versionId
        in: path
        required: true
        style: simple
        schema:
          type: string
      responses:
        default:
          description: Default Response.
          content:
            '*/*':
              schema:
                type: object
  /api/v1/datasets/{id}/versions/{versionId}/files:
    get:
      operationId: getVersionFiles
      parameters:
      - name: id
        in: path
        required: true
        style: simple
        schema:
          type: string
      - name: versionId
        in: path
        required: true
        style: simple
        schema:
          type: string
      responses:
        default:
          description: Default Response.
          content:
            '*/*':
              schema:
                type: object
  /api/v1/datasets/{id}/versions/{versionId}/metadata:
    get:
      operationId: getVersionMetadata
      parameters:
      - name: id
        in: path
        required: true
        style: simple
        schema:
          type: string
      - name: versionId
        in: path
        required: true
        style: simple
        schema:
          type: string
      responses:
        default:
          description: Default Response.
          content:
            '*/*':
              schema:
                type: object
  /api/v1/datasets/{id}/versions/{versionNumber}/metadata/{block}:
    get:
      operationId: getVersionMetadataBlock
      parameters:
      - name: id
        in: path
        required: true
        style: simple
        schema:
          type: string
      - name: versionNumber
        in: path
        required: true
        style: simple
        schema:
          type: string
      - name: block
        in: path
        required: true
        style: simple
        schema:
          type: string
      responses:
        default:
          description: Default Response.
          content:
            '*/*':
              schema:
                type: object
  /api/v1/datasets/{linkedDatasetId}/link/{linkingDataverseAlias}:
    put:
      operationId: linkDataset
      parameters:
      - name: linkedDatasetId
        in: path
        required: true
        style: simple
        schema:
          type: string
      - name: linkingDataverseAlias
        in: path
        required: true
        style: simple
        schema:
          type: string
      responses:
        default:
          description: Default Response.
          content:
            '*/*':
              schema:
                type: object
  /api/v1/datatags/receiveTags/{uniqueCacheId}:
    post:
      operationId: receiveTags
      parameters:
      - name: uniqueCacheId
        in: path
        required: true
        style: simple
        schema:
          type: string
      requestBody:
        content:
          '*/*':
            schema:
              type: object
      responses:
        default:
          description: Default Response.
          content:
            '*/*':
              schema:
                type: object
  /api/v1/dataverses:
    post:
      operationId: addRoot
      requestBody:
        content:
          '*/*':
            schema:
              type: string
      responses:
        default:
          description: Default Response.
          content:
            '*/*':
              schema:
                type: object
  /api/v1/dataverses/{identifier}:
    get:
      operationId: viewDataverse
      parameters:
      - name: identifier
        in: path
        required: true
        style: simple
        schema:
          type: string
      responses:
        default:
          description: Default Response.
          content:
            '*/*':
              schema:
                type: object
    post:
      operationId: addDataverse
      parameters:
      - name: identifier
        in: path
        required: true
        style: simple
        schema:
          type: string
      requestBody:
        content:
          '*/*':
            schema:
              type: string
      responses:
        default:
          description: Default Response.
          content:
            '*/*':
              schema:
                type: object
    delete:
      operationId: deleteDataverse
      parameters:
      - name: identifier
        in: path
        required: true
        style: simple
        schema:
          type: string
      responses:
        default:
          description: Default Response.
          content:
            '*/*':
              schema:
                type: object
  /api/v1/dataverses/{identifier}/actions/:publish:
    post:
      operationId: publishDataverse
      parameters:
      - name: identifier
        in: path
        required: true
        style: simple
        schema:
          type: string
      responses:
        default:
          description: Default Response.
          content:
            '*/*':
              schema:
                type: object
  /api/v1/dataverses/{identifier}/assignments:
    get:
      operationId: listAssignments
      parameters:
      - name: identifier
        in: path
        required: true
        style: simple
        schema:
          type: string
      responses:
        default:
          description: Default Response.
          content:
            '*/*':
              schema:
                type: object
    post:
      operationId: createAssignment
      parameters:
      - name: key
        in: query
        style: simple
        schema:
          type: string
      - name: identifier
        in: path
        required: true
        style: simple
        schema:
          type: string
      requestBody:
        content:
          '*/*':
            schema:
              type: object
      responses:
        default:
          description: Default Response.
          content:
            '*/*':
              schema:
                type: object
  /api/v1/dataverses/{identifier}/assignments/{id}:
    delete:
      operationId: deleteAssignment
      parameters:
      - name: id
        in: path
        required: true
        style: simple
        schema:
          type: number
      - name: identifier
        in: path
        required: true
        style: simple
        schema:
          type: string
      responses:
        default:
          description: Default Response.
          content:
            '*/*':
              schema:
                type: object
  /api/v1/dataverses/{identifier}/contents:
    get:
      operationId: listContent
      parameters:
      - name: identifier
        in: path
        required: true
        style: simple
        schema:
          type: string
      responses:
        default:
          description: Default Response.
          content:
            '*/*':
              schema:
                type: object
  /api/v1/dataverses/{identifier}/datasets:
    post:
      operationId: createDataset
      parameters:
      - name: identifier
        in: path
        required: true
        style: simple
        schema:
          type: string
      requestBody:
        content:
          '*/*':
            schema:
              type: string
      responses:
        default:
          description: Default Response.
          content:
            '*/*':
              schema:
                type: object
  /api/v1/dataverses/{identifier}/datasets/:import:
    post:
      operationId: importDataset
      parameters:
      - name: pid
        in: query
        style: simple
        schema:
          type: string
      - name: release
        in: query
        style: simple
        schema:
          type: string
      - name: identifier
        in: path
        required: true
        style: simple
        schema:
          type: string
      requestBody:
        content:
          '*/*':
            schema:
              type: string
      responses:
        default:
          description: Default Response.
          content:
            '*/*':
              schema:
                type: object
  /api/v1/dataverses/{identifier}/datasets/:importddi:
    post:
      operationId: importDatasetDdi
      parameters:
      - name: pid
        in: query
        style: simple
        schema:
          type: string
      - name: release
        in: query
        style: simple
        schema:
          type: string
      - name: identifier
        in: path
        required: true
        style: simple
        schema:
          type: string
      requestBody:
        content:
          '*/*':
            schema:
              type: string
      responses:
        default:
          description: Default Response.
          content:
            '*/*':
              schema:
                type: object
  /api/v1/dataverses/{identifier}/defaultContributorRole/{roleAlias}:
    put:
      operationId: updateDefaultContributorRole
      parameters:
      - name: identifier
        in: path
        required: true
        style: simple
        schema:
          type: string
      - name: roleAlias
        in: path
        required: true
        style: simple
        schema:
          type: string
      responses:
        default:
          description: Default Response.
          content:
            '*/*':
              schema:
                type: object
  /api/v1/dataverses/{identifier}/facets:
    get:
      operationId: listFacets
      parameters:
      - name: identifier
        in: path
        required: true
        style: simple
        schema:
          type: string
      responses:
        default:
          description: Default Response.
          content:
            '*/*':
              schema:
                type: object
    post:
      operationId: setFacets
      parameters:
      - name: identifier
        in: path
        required: true
        style: simple
        schema:
          type: string
      requestBody:
        content:
          '*/*':
            schema:
              type: string
      responses:
        default:
          description: Default Response.
          content:
            application/json:
              schema:
                type: object
  /api/v1/dataverses/{identifier}/groups:
    get:
      operationId: listGroups
      parameters:
      - name: key
        in: query
        style: simple
        schema:
          type: string
      - name: identifier
        in: path
        required: true
        style: simple
        schema:
          type: string
      responses:
        default:
          description: Default Response.
          content:
            '*/*':
              schema:
                type: object
    post:
      operationId: createExplicitGroup
      parameters:
      - name: identifier
        in: path
        required: true
        style: simple
        schema:
          type: string
      requestBody:
        content:
          '*/*':
            schema:
              type: object
      responses:
        default:
          description: Default Response.
          content:
            '*/*':
              schema:
                type: object
  /api/v1/dataverses/{identifier}/groups/{aliasInOwner}:
    get:
      operationId: getGroupByOwnerAndAliasInOwner
      parameters:
      - name: identifier
        in: path
        required: true
        style: simple
        schema:
          type: string
      - name: aliasInOwner
        in: path
        required: true
        style: simple
        schema:
          type: string
      responses:
        default:
          description: Default Response.
          content:
            '*/*':
              schema:
                type: object
    put:
      operationId: updateGroup
      parameters:
      - name: identifier
        in: path
        required: true
        style: simple
        schema:
          type: string
      - name: aliasInOwner
        in: path
        required: true
        style: simple
        schema:
          type: string
      requestBody:
        content:
          '*/*':
            schema:
              type: object
      responses:
        default:
          description: Default Response.
          content:
            '*/*':
              schema:
                type: object
    delete:
      operationId: deleteGroup
      parameters:
      - name: identifier
        in: path
        required: true
        style: simple
        schema:
          type: string
      - name: aliasInOwner
        in: path
        required: true
        style: simple
        schema:
          type: string
      responses:
        default:
          description: Default Response.
          content:
            '*/*':
              schema:
                type: object
  /api/v1/dataverses/{identifier}/groups/{aliasInOwner}/roleAssignees:
    post:
      operationId: addRoleAssingees
      parameters:
      - name: identifier
        in: path
        required: true
        style: simple
        schema:
          type: string
      - name: aliasInOwner
        in: path
        required: true
        style: simple
        schema:
          type: string
      requestBody:
        content:
          application/json:
            schema:
              type: array
              items:
                type: string
      responses:
        default:
          description: Default Response.
          content:
            '*/*':
              schema:
                type: object
  '/api/v1/dataverses/{identifier}/groups/{aliasInOwner}/roleAssignees/{roleAssigneeIdentifier: .*}':
    put:
      operationId: addRoleAssingee
      parameters:
      - name: identifier
        in: path
        required: true
        style: simple
        schema:
          type: string
      - name: aliasInOwner
        in: path
        required: true
        style: simple
        schema:
          type: string
      - name: roleAssigneeIdentifier
        in: path
        required: true
        style: simple
        schema:
          type: string
      responses:
        default:
          description: Default Response.
          content:
            '*/*':
              schema:
                type: object
    delete:
      operationId: deleteRoleAssingee
      parameters:
      - name: identifier
        in: path
        required: true
        style: simple
        schema:
          type: string
      - name: aliasInOwner
        in: path
        required: true
        style: simple
        schema:
          type: string
      - name: roleAssigneeIdentifier
        in: path
        required: true
        style: simple
        schema:
          type: string
      responses:
        default:
          description: Default Response.
          content:
            '*/*':
              schema:
                type: object
  /api/v1/dataverses/{identifier}/links:
    get:
      operationId: listLinks
      parameters:
      - name: identifier
        in: path
        required: true
        style: simple
        schema:
          type: string
      responses:
        default:
          description: Default Response.
          content:
            '*/*':
              schema:
                type: object
  /api/v1/dataverses/{identifier}/metadatablocks:
    get:
      operationId: listMetadataBlocks
      parameters:
      - name: identifier
        in: path
        required: true
        style: simple
        schema:
          type: string
      responses:
        default:
          description: Default Response.
          content:
            '*/*':
              schema:
                type: object
    post:
      operationId: setMetadataBlocks
      parameters:
      - name: identifier
        in: path
        required: true
        style: simple
        schema:
          type: string
      requestBody:
        content:
          '*/*':
            schema:
              type: string
      responses:
        default:
          description: Default Response.
          content:
            application/json:
              schema:
                type: object
  /api/v1/dataverses/{identifier}/metadatablocks/:isRoot:
    get:
      operationId: getMetadataRoot_legacy
      parameters:
      - name: identifier
        in: path
        required: true
        style: simple
        schema:
          type: string
      responses:
        default:
          description: Default Response.
          content:
            '*/*':
              schema:
                type: object
    post:
      operationId: setMetadataRoot_legacy
      parameters:
      - name: identifier
        in: path
        required: true
        style: simple
        schema:
          type: string
      requestBody: {}
      responses:
        default:
          description: Default Response.
          content:
            application/json:
              schema:
                type: object
  /api/v1/dataverses/{identifier}/metadatablocks/isRoot:
    get:
      operationId: getMetadataRoot
      parameters:
      - name: identifier
        in: path
        required: true
        style: simple
        schema:
          type: string
      responses:
        default:
          description: Default Response.
          content:
            application/json:
              schema:
                type: object
    put:
      operationId: setMetadataRoot
      parameters:
      - name: identifier
        in: path
        required: true
        style: simple
        schema:
          type: string
      requestBody: {}
      responses:
        default:
          description: Default Response.
          content:
            application/json:
              schema:
                type: object
  /api/v1/dataverses/{identifier}/roles:
    get:
      operationId: listRoles
      parameters:
      - name: identifier
        in: path
        required: true
        style: simple
        schema:
          type: string
      responses:
        default:
          description: Default Response.
          content:
            '*/*':
              schema:
                type: object
    post:
      operationId: createRole
      parameters:
      - name: identifier
        in: path
        required: true
        style: simple
        schema:
          type: string
      requestBody:
        content:
          '*/*':
            schema:
              type: object
      responses:
        default:
          description: Default Response.
          content:
            '*/*':
              schema:
                type: object
  /api/v1/dataverses/{id}/move/{targetDataverseAlias}:
    post:
      operationId: moveDataverse
      parameters:
      - name: forceMove
        in: query
        style: simple
        schema:
          type: boolean
      - name: id
        in: path
        required: true
        style: simple
        schema:
          type: string
      - name: targetDataverseAlias
        in: path
        required: true
        style: simple
        schema:
          type: string
      responses:
        default:
          description: Default Response.
          content:
            '*/*':
              schema:
                type: object
  /api/v1/dataverses/{linkedDataverseAlias}/link/{linkingDataverseAlias}:
    put:
      operationId: linkDataverse
      parameters:
      - name: linkedDataverseAlias
        in: path
        required: true
        style: simple
        schema:
          type: string
      - name: linkingDataverseAlias
        in: path
        required: true
        style: simple
        schema:
          type: string
      responses:
        default:
          description: Default Response.
          content:
            '*/*':
              schema:
                type: object
  /api/v1/dataverses/{linkingDataverseId}/deleteLink/{linkedDataverseId}:
    delete:
      operationId: deleteDataverseLinkingDataverse
      parameters:
      - name: linkingDataverseId
        in: path
        required: true
        style: simple
        schema:
          type: string
      - name: linkedDataverseId
        in: path
        required: true
        style: simple
        schema:
          type: string
      responses:
        default:
          description: Default Response.
          content:
            '*/*':
              schema:
                type: object
  /api/v1/files/{id}/map:
    delete:
      operationId: getMapLayerMetadatas
      parameters:
      - name: id
        in: path
        required: true
        style: simple
        schema:
          type: number
      responses:
        default:
          description: Default Response.
          content:
            '*/*':
              schema:
                type: object
  /api/v1/files/{id}/metadata:
    get:
      operationId: getFileMetadata
      parameters:
      - name: id
        in: path
        required: true
        style: simple
        schema:
          type: string
      - name: versionId
        in: path
        required: true
        style: simple
        schema:
          type: string
      requestBody:
        content:
          '*/*':
            schema:
              type: boolean
      responses:
        default:
          description: Default Response.
          content:
            '*/*':
              schema:
                type: object
    post:
      operationId: updateFileMetadata
      parameters:
      - name: id
        in: path
        required: true
        style: simple
        schema:
          type: string
      requestBody:
        content:
          '*/*':
            schema:
              type: string
      responses:
        default:
          description: Default Response.
          content:
            '*/*':
              schema:
                type: object
  /api/v1/files/{id}/metadata/draft:
    get:
      operationId: getFileMetadataDraft
      parameters:
      - name: id
        in: path
        required: true
        style: simple
        schema:
          type: string
      - name: versionId
        in: path
        required: true
        style: simple
        schema:
          type: string
      requestBody:
        content:
          '*/*':
            schema:
              type: boolean
      responses:
        default:
          description: Default Response.
          content:
            '*/*':
              schema:
                type: object
  /api/v1/files/{id}/prov-freeform:
    get:
      operationId: getProvFreeForm
      parameters:
      - name: id
        in: path
        required: true
        style: simple
        schema:
          type: string
      responses:
        default:
          description: Default Response.
          content:
            '*/*':
              schema:
                type: object
    post:
      operationId: addProvFreeForm
      parameters:
      - name: id
        in: path
        required: true
        style: simple
        schema:
          type: string
      requestBody:
        content:
          application/json:
            schema:
              type: string
      responses:
        default:
          description: Default Response.
          content:
            '*/*':
              schema:
                type: object
  /api/v1/files/{id}/prov-json:
    get:
      operationId: getProvJson
      parameters:
      - name: id
        in: path
        required: true
        style: simple
        schema:
          type: string
      responses:
        default:
          description: Default Response.
          content:
            '*/*':
              schema:
                type: object
    post:
      operationId: addProvJson
      parameters:
      - name: entityName
        in: query
        style: simple
        schema:
          type: string
      - name: id
        in: path
        required: true
        style: simple
        schema:
          type: string
      requestBody:
        content:
          application/json:
            schema:
              type: string
      responses:
        default:
          description: Default Response.
          content:
            '*/*':
              schema:
                type: object
    delete:
      operationId: deleteProvJson
      parameters:
      - name: id
        in: path
        required: true
        style: simple
        schema:
          type: string
      requestBody:
        content:
          '*/*':
            schema:
              type: string
      responses:
        default:
          description: Default Response.
          content:
            '*/*':
              schema:
                type: object
  /api/v1/files/{id}/reingest:
    post:
      operationId: reingest
      parameters:
      - name: id
        in: path
        required: true
        style: simple
        schema:
          type: string
      responses:
        default:
          description: Default Response.
          content:
            '*/*':
              schema:
                type: object
  /api/v1/files/{id}/replace:
    post:
      operationId: replaceFileInDataset
      parameters:
      - name: id
        in: path
        required: true
        style: simple
        schema:
          type: string
      requestBody:
        content:
          multipart/form-data:
            schema:
              type: string
      responses:
        default:
          description: Default Response.
          content:
            '*/*':
              schema:
                type: object
  /api/v1/files/{id}/restrict:
    put:
      operationId: restrictFileInDataset
      parameters:
      - name: id
        in: path
        required: true
        style: simple
        schema:
          type: string
      requestBody:
        content:
          '*/*':
            schema:
              type: string
      responses:
        default:
          description: Default Response.
          content:
            '*/*':
              schema:
                type: object
  /api/v1/files/{id}/uningest:
    post:
      operationId: uningestDatafile
      parameters:
      - name: id
        in: path
        required: true
        style: simple
        schema:
          type: string
      responses:
        default:
          description: Default Response.
          content:
            '*/*':
              schema:
                type: object
  /api/v1/harvest/clients:
    get:
      operationId: harvestingClients
      parameters:
      - name: key
        in: query
        style: simple
        schema:
          type: string
      responses:
        default:
          description: Default Response.
          content:
            '*/*':
              schema:
                type: object
  /api/v1/harvest/clients/{nickName}:
    get:
      operationId: harvestingClient
      parameters:
      - name: key
        in: query
        style: simple
        schema:
          type: string
      - name: nickName
        in: path
        required: true
        style: simple
        schema:
          type: string
      responses:
        default:
          description: Default Response.
          content:
            '*/*':
              schema:
                type: object
    put:
      operationId: modifyHarvestingClient
      parameters:
      - name: key
        in: query
        style: simple
        schema:
          type: string
      - name: nickName
        in: path
        required: true
        style: simple
        schema:
          type: string
      requestBody:
        content:
          '*/*':
            schema:
              type: string
      responses:
        default:
          description: Default Response.
          content:
            '*/*':
              schema:
                type: object
    post:
      operationId: createHarvestingClient
      parameters:
      - name: key
        in: query
        style: simple
        schema:
          type: string
      - name: nickName
        in: path
        required: true
        style: simple
        schema:
          type: string
      requestBody:
        content:
          '*/*':
            schema:
              type: string
      responses:
        default:
          description: Default Response.
          content:
            '*/*':
              schema:
                type: object
  /api/v1/harvest/clients/{nickName}/run:
    post:
      operationId: startHarvestingJob
      parameters:
      - name: key
        in: query
        style: simple
        schema:
          type: string
      - name: nickName
        in: path
        required: true
        style: simple
        schema:
          type: string
      responses:
        default:
          description: Default Response.
          content:
            '*/*':
              schema:
                type: object
  /api/v1/harvest/server/oaisets:
    get:
      operationId: oaiSets
      parameters:
      - name: key
        in: query
        style: simple
        schema:
          type: string
      responses:
        default:
          description: Default Response.
          content:
            '*/*':
              schema:
                type: object
  /api/v1/harvest/server/oaisets/{nickName}:
    put:
      operationId: modifyOaiSet
      parameters:
      - name: key
        in: query
        style: simple
        schema:
          type: string
      - name: specname
        in: path
        required: true
        style: simple
        schema:
          type: string
      requestBody:
        content:
          '*/*':
            schema:
              type: string
      responses:
        default:
          description: Default Response.
          content:
            '*/*':
              schema:
                type: object
  /api/v1/harvest/server/oaisets/{specname}:
    get:
      operationId: oaiSet
      parameters:
      - name: key
        in: query
        style: simple
        schema:
          type: string
      - name: specname
        in: path
        required: true
        style: simple
        schema:
          type: string
      responses:
        default:
          description: Default Response.
          content:
            '*/*':
              schema:
                type: object
    post:
      operationId: createOaiSet
      parameters:
      - name: key
        in: query
        style: simple
        schema:
          type: string
      - name: specname
        in: path
        required: true
        style: simple
        schema:
          type: string
      requestBody:
        content:
          '*/*':
            schema:
              type: string
      responses:
        default:
          description: Default Response.
          content:
            '*/*':
              schema:
                type: object
    delete:
      operationId: deleteOaiSet
      parameters:
      - name: key
        in: query
        style: simple
        schema:
          type: string
      - name: specname
        in: path
        required: true
        style: simple
        schema:
          type: string
      responses:
        default:
          description: Default Response.
          content:
            '*/*':
              schema:
                type: object
  /api/v1/harvest/server/oaisets/{specname}/datasets:
    get:
      operationId: oaiSetListDatasets
      parameters:
      - name: key
        in: query
        style: simple
        schema:
          type: string
      - name: specname
        in: path
        required: true
        style: simple
        schema:
          type: string
      responses:
        default:
          description: Default Response.
          content:
            '*/*':
              schema:
                type: object
  /api/v1/info/apiTermsOfUse:
    get:
      operationId: getTermsOfUse
      responses:
        default:
          description: Default Response.
          content:
            '*/*':
              schema:
                type: object
  /api/v1/info/metrics/datasets:
    get:
      operationId: getDatasetsAllTime
      parameters:
      - name: dataLocation
        in: query
        style: simple
        schema:
          type: string
      responses:
        default:
          description: Default Response.
          content:
            '*/*':
              schema:
                type: object
  /api/v1/info/metrics/datasets/bySubject:
    get:
      operationId: getDatasetsBySubject
      parameters:
      - name: dataLocation
        in: query
        style: simple
        schema:
          type: string
      responses:
        default:
          description: Default Response.
          content:
            '*/*':
              schema:
                type: object
  /api/v1/info/metrics/datasets/bySubject/toMonth/{yyyymm}:
    get:
      operationId: getDatasetsBySubjectToMonth
      parameters:
      - name: dataLocation
        in: query
        style: simple
        schema:
          type: string
      - name: yyyymm
        in: path
        required: true
        style: simple
        schema:
          type: string
      responses:
        default:
          description: Default Response.
          content:
            '*/*':
              schema:
                type: object
  /api/v1/info/metrics/datasets/pastDays/{days}:
    get:
      operationId: getDatasetsPastDays
      parameters:
      - name: dataLocation
        in: query
        style: simple
        schema:
          type: string
      - name: days
        in: path
        required: true
        style: simple
        schema:
          type: integer
      responses:
        default:
          description: Default Response.
          content:
            '*/*':
              schema:
                type: object
  /api/v1/info/metrics/datasets/toMonth:
    get:
      operationId: getDatasetsToMonthCurrent
      parameters:
      - name: dataLocation
        in: query
        style: simple
        schema:
          type: string
      responses:
        default:
          description: Default Response.
          content:
            '*/*':
              schema:
                type: object
  /api/v1/info/metrics/datasets/toMonth/{yyyymm}:
    get:
      operationId: getDatasetsToMonth
      parameters:
      - name: dataLocation
        in: query
        style: simple
        schema:
          type: string
      - name: yyyymm
        in: path
        required: true
        style: simple
        schema:
          type: string
      responses:
        default:
          description: Default Response.
          content:
            '*/*':
              schema:
                type: object
  /api/v1/info/metrics/dataverses:
    get:
      operationId: getDataversesAllTime
      responses:
        default:
          description: Default Response.
          content:
            '*/*':
              schema:
                type: object
  /api/v1/info/metrics/dataverses/byCategory:
    get:
      operationId: getDataversesByCategory
      responses:
        default:
          description: Default Response.
          content:
            '*/*':
              schema:
                type: object
  /api/v1/info/metrics/dataverses/bySubject:
    get:
      operationId: getDataversesBySubject
      responses:
        default:
          description: Default Response.
          content:
            '*/*':
              schema:
                type: object
  /api/v1/info/metrics/dataverses/pastDays/{days}:
    get:
      operationId: getDataversesPastDays
      parameters:
      - name: days
        in: path
        required: true
        style: simple
        schema:
          type: integer
      responses:
        default:
          description: Default Response.
          content:
            '*/*':
              schema:
                type: object
  /api/v1/info/metrics/dataverses/toMonth:
    get:
      operationId: getDataversesToMonthCurrent
      responses:
        default:
          description: Default Response.
          content:
            '*/*':
              schema:
                type: object
  /api/v1/info/metrics/dataverses/toMonth/{yyyymm}:
    get:
      operationId: getDataversesToMonth
      parameters:
      - name: yyyymm
        in: path
        required: true
        style: simple
        schema:
          type: string
      responses:
        default:
          description: Default Response.
          content:
            '*/*':
              schema:
                type: object
  /api/v1/info/metrics/downloads:
    get:
      operationId: getDownloadsAllTime
      responses:
        default:
          description: Default Response.
          content:
            '*/*':
              schema:
                type: object
  /api/v1/info/metrics/downloads/pastDays/{days}:
    get:
      operationId: getDownloadsPastDays
      parameters:
      - name: days
        in: path
        required: true
        style: simple
        schema:
          type: integer
      responses:
        default:
          description: Default Response.
          content:
            '*/*':
              schema:
                type: object
  /api/v1/info/metrics/downloads/toMonth:
    get:
      operationId: getDownloadsToMonthCurrent
      responses:
        default:
          description: Default Response.
          content:
            '*/*':
              schema:
                type: object
  /api/v1/info/metrics/downloads/toMonth/{yyyymm}:
    get:
      operationId: getDownloadsToMonth
      parameters:
      - name: yyyymm
        in: path
        required: true
        style: simple
        schema:
          type: string
      responses:
        default:
          description: Default Response.
          content:
            '*/*':
              schema:
                type: object
  /api/v1/info/metrics/files:
    get:
      operationId: getFilesAllTime
      responses:
        default:
          description: Default Response.
          content:
            '*/*':
              schema:
                type: object
  /api/v1/info/metrics/files/pastDays/{days}:
    get:
      operationId: getFilesPastDays
      parameters:
      - name: days
        in: path
        required: true
        style: simple
        schema:
          type: integer
      responses:
        default:
          description: Default Response.
          content:
            '*/*':
              schema:
                type: object
  /api/v1/info/metrics/files/toMonth:
    get:
      operationId: getFilesToMonthCurrent
      responses:
        default:
          description: Default Response.
          content:
            '*/*':
              schema:
                type: object
  /api/v1/info/metrics/files/toMonth/{yyyymm}:
    get:
      operationId: getFilesToMonth
      parameters:
      - name: yyyymm
        in: path
        required: true
        style: simple
        schema:
          type: string
      responses:
        default:
          description: Default Response.
          content:
            '*/*':
              schema:
                type: object
  /api/v1/info/server:
    get:
      operationId: getServer
      responses:
        default:
          description: Default Response.
          content:
            '*/*':
              schema:
                type: object
  /api/v1/info/settings/:DatasetPublishPopupCustomText:
    get:
      operationId: getDatasetPublishPopupCustomText
      responses:
        default:
          description: Default Response.
          content:
            '*/*':
              schema:
                type: object
  /api/v1/info/version:
    get:
      operationId: getInfo
      responses:
        default:
          description: Default Response.
          content:
            '*/*':
              schema:
                type: object
  /api/v1/ingest/test/file:
    get:
      operationId: datafile
      parameters:
      - name: fileName
        in: query
        style: simple
        schema:
          type: string
      - name: fileType
        in: query
        style: simple
        schema:
          type: string
      responses:
        default:
          description: Default Response.
          content:
            text/plain:
              schema:
                type: string
  /api/v1/mail/notifications:
    get:
      operationId: sendMail
      responses:
        default:
          description: Default Response.
          content:
            '*/*':
              schema:
                type: object
  /api/v1/meta/datafile/{fileId}:
    get:
      operationId: datafile
      parameters:
      - name: fileMetadataId
        in: query
        style: simple
        schema:
          type: number
      - name: exclude
        in: query
        style: simple
        schema:
          type: string
      - name: include
        in: query
        style: simple
        schema:
          type: string
      - name: fileId
        in: path
        required: true
        style: simple
        schema:
          type: number
      responses:
        default:
          description: Default Response.
          content:
            text/xml:
              schema:
                type: string
  /api/v1/meta/dataset/{datasetId}:
    get:
      operationId: dataset
      parameters:
      - name: exclude
        in: query
        style: simple
        schema:
          type: string
      - name: include
        in: query
        style: simple
        schema:
          type: string
      - name: datasetId
        in: path
        required: true
        style: simple
        schema:
          type: number
      responses:
        default:
          description: Default Response.
          content:
            application/xml:
              schema:
                type: string
  /api/v1/meta/variable/{varId}:
    get:
      operationId: variable
      parameters:
      - name: fileMetadataId
        in: query
        style: simple
        schema:
          type: number
      - name: exclude
        in: query
        style: simple
        schema:
          type: string
      - name: include
        in: query
        style: simple
        schema:
          type: string
      - name: varId
        in: path
        required: true
        style: simple
        schema:
          type: number
      responses:
        default:
          description: Default Response.
          content:
            application/xml:
              schema:
                type: string
  /api/v1/metadatablocks:
    get:
      operationId: list
      responses:
        default:
          description: Default Response.
          content:
            application/json:
              schema:
                type: object
  /api/v1/metadatablocks/{identifier}:
    get:
      operationId: getBlock
      parameters:
      - name: identifier
        in: path
        required: true
        style: simple
        schema:
          type: string
      responses:
        default:
          description: Default Response.
          content:
            application/json:
              schema:
                type: object
  /api/v1/mydata/retrieve:
    get:
      operationId: retrieveMyDataAsJsonString
      parameters:
      - name: dvobject_types
        in: query
        style: simple
        schema:
          type: array
          items:
            type: string
      - name: published_states
        in: query
        style: simple
        schema:
          type: array
          items:
            type: string
      - name: selected_page
        in: query
        style: simple
        schema:
          type: integer
      - name: mydata_search_term
        in: query
        style: simple
        schema:
          type: string
      - name: role_ids
        in: query
        style: simple
        schema:
          type: array
          items:
            type: number
      - name: userIdentifier
        in: query
        style: simple
        schema:
          type: string
      - name: key
        in: query
        style: simple
        schema:
          type: string
      responses:
        default:
          description: Default Response.
          content:
            application/json:
              schema:
                type: string
  /api/v1/notifications/all:
    get:
      operationId: getAllNotificationsForUser
      responses:
        default:
          description: Default Response.
          content:
            '*/*':
              schema:
                type: object
  /api/v1/roles:
    post:
      operationId: createNewRole
      parameters:
      - name: dvo
        in: query
        style: simple
        schema:
          type: string
      requestBody:
        content:
          '*/*':
            schema:
              type: object
      responses:
        default:
          description: Default Response.
          content:
            '*/*':
              schema:
                type: object
  /api/v1/roles/{id}:
    get:
      operationId: viewRole
      parameters:
      - name: id
        in: path
        required: true
        style: simple
        schema:
          type: number
      responses:
        default:
          description: Default Response.
          content:
            '*/*':
              schema:
                type: object
    delete:
      operationId: deleteRole
      parameters:
      - name: id
        in: path
        required: true
        style: simple
        schema:
          type: number
      responses:
        default:
          description: Default Response.
          content:
            '*/*':
              schema:
                type: object
  /api/v1/search:
    get:
      operationId: search
      parameters:
      - name: q
        in: query
        style: simple
        schema:
          type: string
      - name: type
        in: query
        style: simple
        schema:
          type: array
          items:
            type: string
      - name: subtree
        in: query
        style: simple
        schema:
          type: array
          items:
            type: string
      - name: sort
        in: query
        style: simple
        schema:
          type: string
      - name: order
        in: query
        style: simple
        schema:
          type: string
      - name: per_page
        in: query
        style: simple
        schema:
          type: integer
      - name: start
        in: query
        style: simple
        schema:
          type: integer
      - name: show_relevance
        in: query
        style: simple
        schema:
          type: boolean
      - name: show_facets
        in: query
        style: simple
        schema:
          type: boolean
      - name: fq
        in: query
        style: simple
        schema:
          type: array
          items:
            type: string
      - name: show_entity_ids
        in: query
        style: simple
        schema:
          type: boolean
      - name: show_api_urls
        in: query
        style: simple
        schema:
          type: boolean
      - name: show_my_data
        in: query
        style: simple
        schema:
          type: boolean
      - name: query_entities
        in: query
        style: simple
        schema:
          type: boolean
      responses:
        default:
          description: Default Response.
          content:
            '*/*':
              schema:
                type: object
  /api/v1/users/{consumedIdentifier}/mergeIntoUser/{baseIdentifier}:
    post:
      operationId: mergeInAuthenticatedUser
      parameters:
      - name: consumedIdentifier
        in: path
        required: true
        style: simple
        schema:
          type: string
      - name: baseIdentifier
        in: path
        required: true
        style: simple
        schema:
          type: string
      responses:
        default:
          description: Default Response.
          content:
            '*/*':
              schema:
                type: object
  /api/v1/users/{identifier}/changeIdentifier/{newIdentifier}:
    post:
      operationId: changeAuthenticatedUserIdentifier
      parameters:
      - name: identifier
        in: path
        required: true
        style: simple
        schema:
          type: string
      - name: newIdentifier
        in: path
        required: true
        style: simple
        schema:
          type: string
      responses:
        default:
          description: Default Response.
          content:
            '*/*':
              schema:
                type: object
  /api/v1/workflows/{invocationId}:
    post:
      operationId: resumeWorkflow
      parameters:
      - name: invocationId
        in: path
        required: true
        style: simple
        schema:
          type: string
      requestBody:
        content:
          '*/*':
            schema:
              type: string
      responses:
        default:
          description: Default Response.
          content:
            '*/*':
              schema:
                type: object
  /api/v1/worldmap/datafile:
    post:
      operationId: getWorldMapDatafileInfo
      requestBody:
        content:
          '*/*':
            schema:
              type: string
      responses:
        default:
          description: Default Response.
          content:
            '*/*':
              schema:
                type: object
  /api/v1/worldmap/delete-layer-metadata:
    post:
      operationId: deleteWorldMapLayerData
      requestBody:
        content:
          '*/*':
            schema:
              type: string
      responses:
        default:
          description: Default Response.
          content:
            '*/*':
              schema:
                type: object
  /api/v1/worldmap/delete-token:
    post:
      operationId: deleteWorldMapToken
      requestBody:
        content:
          '*/*':
            schema:
              type: string
      responses:
        default:
          description: Default Response.
          content:
            '*/*':
              schema:
                type: object
  /api/v1/worldmap/map-it-token-only/{datafile_id}/{dvuser_id}:
    get:
      operationId: getMapDataFileToken
      parameters:
      - name: datafile_id
        in: path
        required: true
        style: simple
        schema:
          type: number
      - name: dvuser_id
        in: path
        required: true
        style: simple
        schema:
          type: number
      responses:
        default:
          description: Default Response.
          content:
            '*/*':
              schema:
                type: object
  /api/v1/worldmap/map-it/{datafile_id}/{dvuser_id}:
    get:
      operationId: mapDataFile
      parameters:
      - name: datafile_id
        in: path
        required: true
        style: simple
        schema:
          type: number
      - name: dvuser_id
        in: path
        required: true
        style: simple
        schema:
          type: number
      responses:
        default:
          description: Default Response.
          content:
            '*/*':
              schema:
                type: object
  /api/v1/worldmap/t/{identifier}:
    get:
      operationId: checkWorldMapAPI
      parameters:
      - name: identifier
        in: path
        required: true
        style: simple
        schema:
          type: integer
      responses:
        default:
          description: Default Response.
          content:
            '*/*':
              schema:
                type: object
  /api/v1/worldmap/update-layer-metadata:
    post:
      operationId: updateWorldMapLayerData
      requestBody:
        content:
          '*/*':
            schema:
              type: string
      responses:
        default:
          description: Default Response.
          content:
            '*/*':
              schema:
                type: object
components: {}

@pdurbin
Copy link
Member

pdurbin commented Aug 21, 2019

@smillidge thanks for letting us know about /openapi in Payara! This is very exciting! In pull request #6107 I'm mentioning this in the API Guide, like this:

63387240-f247f180-c372-11e9-9a07-607b6d890242

The thing I need to learn next is how to covert that YAML output...

openapi: 3.0.0
info:
  title: Deployed Resources
  version: 1.0.0
servers:
- url: http://Steve-Linux:8080/
  description: Default Server.
- url: https://Steve-Linux:8181/
  description: Default Server.
paths:
  /api/v1/access/datafile/bundle/{fileId}:
    get:
      operationId: datafileBundle
      parameters:

... into HTML that people can read. If anyone knows how to do this (I would have to Google for it), please let us know! 😄

Over at http://irclog.iq.harvard.edu/dataverse/2019-08-09#i_102420 @donsizemore and I talked about deploying Dataverse to Payara periodically to grab the YAML so we can make the HTML. Just another crazy idea. 😄

@pdurbin
Copy link
Member

pdurbin commented Feb 10, 2020

Today I was chatting with @donsizemore about https://payara5.odum.unc.edu and it reminded me to circle back and check if I can get Swagger/OpenAPI output about Dataverse APIs out of Dataverse running on Payara in a nice GUI (Swagger UI). It turns out you can!

Here's what I did:

I went to https://petstore.swagger.io and replaced https://petstore.swagger.io/v2/swagger.json with https://payara5.odum.unc.edu/openapi and clicked "Explore". Boom! There are all the (documented and undocumented) Dataverse API endpoints.

Here's a screenshot:

Swagger_UI_-_2020-02-10_16 59 58

@pdurbin
Copy link
Member

pdurbin commented Sep 9, 2020

Unfortunately, the above apparently stopped working with new versions of Payara, as reported here: https://groups.google.com/g/dataverse-community/c/LAMdCR1491M/m/w7RaTs_CAgAJ

Payara releases pretty often so we should probably try a new release. If that doesn't work, we should probably open an issue.

@donsizemore
Copy link
Contributor

FWIW, Payara Version: Payara Server 5.2020.4 returns

paths: {}
components: {}

along with

WARNING|Payara 5.2020.4|fish.payara.microprofile.openapi.impl.rest.app.service.OpenApiResource|_ThreadID=73;_ThreadName=http-thread-pool::http-listener-1(4);_TimeMillis=1
599663536196;_LevelValue=900;|
  OpenAPI document creation failed.
fish.payara.microprofile.openapi.api.OpenAPIBuildException: java.lang.StackOverflowError
        at fish.payara.microprofile.openapi.impl.OpenApiService$OpenApiMapping.buildDocument(OpenApiService.java:284)
        at fish.payara.microprofile.openapi.impl.OpenApiService$OpenApiMapping.access$200(OpenApiService.java:248)
        at fish.payara.microprofile.openapi.impl.OpenApiService.getDocument(OpenApiService.java:211)
        at fish.payara.microprofile.openapi.impl.rest.app.service.OpenApiResource.getResponse(OpenApiResource.java:80)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:498)
Caused by: java.lang.StackOverflowError
        at org.glassfish.hk2.classmodel.reflect.impl.TypeProxy$1.iterator(TypeProxy.java:108)
        at fish.payara.microprofile.openapi.impl.model.util.AnnotationInfo.init(AnnotationInfo.java:269)
        at fish.payara.microprofile.openapi.impl.model.util.AnnotationInfo.init(AnnotationInfo.java:271)
INFO|Payara 5.2020.4|fish.payara.microprofile.openapi.impl.rest.app.service.OpenApiResource|_ThreadID=73;_ThreadName=http-thread-pool::http-listener-1(4);_TimeMillis=1599663536203;_LevelValue=800;|
  No OpenAPI document found.|#]

and per payara/Payara#4818 will be fixed in the next release.

A workaround, at least under 5.2020.4, is to call /openapi a second time, though that doesn't seem to do the trick under 5.2020.2.

@smillidge
Copy link
Contributor

smillidge commented Sep 9, 2020

For info this is caused by having log4j-web and log4j-slf4j-impl in the deployment. If you are having the error without these being there let me know.

@poikilotherm
Copy link
Contributor

poikilotherm commented Sep 10, 2020

Hi @smillidge I looked both in mvn dependency:tree and in the package: those deps aren't shipped with the WAR. Should I report this upstream?

@smillidge
Copy link
Contributor

Yes please.

@djbrooke
Copy link
Contributor

djbrooke commented Jan 7, 2021

Hi @poikilotherm @pdurbin - is this still an issue or has it been fixed by the recent Payara upgrade? I came across a mention of this issue while doing some doc updates.

@pdurbin
Copy link
Member

pdurbin commented Jan 7, 2021

@djbrooke it's still broken. I just went to https://demo.dataverse.org/openapi and https://dataverse.harvard.edu/openapi which are both running Dataverse 5.3 and (I assume) Payara 5.2020.7. The output is a different (showing a single "path" at least) but still incomplete (we expect to see all paths or endpoints):

paths:
  /api/v1/access/datafile/bundle/{fileId}:
    get:
      operationId: datafileBundle
      responses: {}
components:
  schemas:
    BundleDownloadInstance: {}
    DataFile:
      properties:
        contentType:
          type: string
    DownloadInfo: {}

@djbrooke
Copy link
Contributor

djbrooke commented Jan 7, 2021

Thanks @pdurbin! I got the same output but I didn't know if I was doing something wrong.

@Kris-LIBIS
Copy link
Contributor

Kris-LIBIS commented Mar 31, 2021

FYI: I got the openapi working on Dataverse 5.3 and payara 5.2021.1 running in a docker environment. It needed some tweaking though:

In order to get it working with the Petstore Swagger GUI, I had to enable CORS for OpenAPI:

asadmin set-openapi-configuration --enabled=true --corsheaders=true

I had to add it to the preboot in the docker container to make it work (init_2_conf_payara.sh).

Secondly I had to force my FQDN in the OpenAPI MPConfig as the default server name was the docker id and useless:

asadmin set-config-property --propertyName mp.openapi.servers --propertyValue ${dataverse_siteUrl} --source domain

Added to the postboot in the docker container (init_2_conf_payara.sh).

That allowed me to use the Dataverse /openapi url in the https://petstore.swagger.io explore box. There is also a local swagger-ui installation: https://www.rdm.libis.kuleuven.be/apidoc

BUT: there are several issues with it:

  1. OpenAPI Validation
    Loading the openapi in Swagger UI may take a while (https://petstore.swagger.io?url=https://www.rdm.libis.kuleuven.be/openapi). But the swagger UI does load the spec and shows the API paths. Using the Developer tools it is clear that the validation of the spec is what takes up most of the time. And on the bottom of the web page there is a notion that the spec is invalid. The link with validation errors is here: https://validator.swagger.io/validator/debug?url=https%3A%2F%2Fwww.rdm.libis.kuleuven.be%2Fopenapi. TBH I don't see what could be wrong with OpenAPI file, but I'm no expert either. Could it be a Swagger issue?
  2. Timeouts
    Things get worse once you try to open the first or second API box (e.g. direct link: https://petstore.swagger.io/?url=https://www.rdm.libis.kuleuven.be/openapi#/default/datafileBundle). This takes forever (literally) and the browser keeps giving a timeout. Eventually, the only way out is to stop the page. That sometimes renders the page as expected, but leaves you with a completely useless page as the javascript code no longer works. Again, is this a Swagger or openapi document issue? BTW The online Swagger Editor (https://editor.swagger.io) also hangs when loading the openapi URL.
  3. Try it out
    Of course, the usefulness of the Try it out mode of Swagger is limited to the CORS enabled API calls. But since there is no way to add a token in the HTTP Header and many calls are missing a key parameter, you are also mostly limited to public access calls. Datasets can only be identified by their database id i.o. the doi or handle.

@poikilotherm
Copy link
Contributor

poikilotherm commented Apr 8, 2021

There have been some improvements for OpenAPI detection in the most recent release 5.2021.2

See also https://github.com/payara/Payara/releases/tag/payara-server-5.2021.2

@Kris-LIBIS
Copy link
Contributor

Kris-LIBIS commented Apr 9, 2021

I upgraded our pilot installation to payara 5.2021.2 and I can confirm that the validation errors are gone. Unfortunately, the timeout problem remains.

@pdurbin
Copy link
Member

pdurbin commented Aug 11, 2021

https://demo.dataverse.org/openapi is working now. It starts with this:

openapi: 3.0.0
info:
  title: Deployed Resources
  version: 1.0.0
servers:
- url: http://ip-172-31-60-234.ec2.internal:8080/
  description: Default Server.
- url: http://ip-172-31-60-234.ec2.internal:8009/
  description: Default Server.
- url: https://ip-172-31-60-234.ec2.internal:8181/
  description: Default Server.
paths:
  /api/v1/access/datafile/bundle/{fileId}:
    get:
      operationId: datafileBundle
      parameters:
      - name: fileId
        in: path
        required: true
        schema:
          type: string
      - name: fileMetadataId
        in: query
        schema:
          type: number
...

@pdurbin
Copy link
Member

pdurbin commented Apr 12, 2022

https://demo.dataverse.org/openapi still works fine.

I'm closing this issue.

If we feel the need to document anything, we can open a fresh issue.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
Status: Done
Development

No branches or pull requests

7 participants