summaryrefslogtreecommitdiffstats
path: root/fatcat-openapi2.yml
diff options
context:
space:
mode:
Diffstat (limited to 'fatcat-openapi2.yml')
-rw-r--r--fatcat-openapi2.yml690
1 files changed, 690 insertions, 0 deletions
diff --git a/fatcat-openapi2.yml b/fatcat-openapi2.yml
new file mode 100644
index 00000000..8fcbf488
--- /dev/null
+++ b/fatcat-openapi2.yml
@@ -0,0 +1,690 @@
+---
+swagger: "2.0"
+info:
+ title: fatcat
+ description: A scalable, versioned, API-oriented catalog of bibliographic entities
+ and file metadata
+ version: 0.1.0
+schemes: [http]
+basePath: /v0
+#host: api.fatcat.wiki
+consumes:
+ - application/json
+produces:
+ - application/json
+
+
+# Common properties across entities
+x-entity-props: &ENTITYPROPS
+ state:
+ type: string
+ enum: ["wip", "active", "redirect", "deleted"]
+ ident:
+ type: string
+ #format: uuid
+ example: "f1f046a3-45c9-4b99-adce-000000000001"
+ revision:
+ type: integer
+ example: 42
+ format: int64
+ redirect:
+ type: string
+ #format: uuid
+ example: "f1f046a3-45c9-4b99-adce-000000000002"
+ editgroup_id:
+ type: integer
+ example: 16
+ format: int64
+ extra:
+ type: object
+ additionalProperties: {}
+
+
+definitions:
+ error_response:
+ type: object
+ required:
+ - message
+ properties:
+ message:
+ type: string
+ example: "A really confusing, totally unexpected thing happened"
+ success:
+ type: object
+ required:
+ - message
+ properties:
+ message:
+ type: string
+ example: "The computers did the thing successfully!"
+ container_entity:
+ type: object
+ required:
+ - name
+ properties:
+ <<: *ENTITYPROPS
+ name:
+ type: string
+ example: "Journal of Important Results"
+ publisher:
+ type: string
+ example: "Society of Curious Students"
+ issnl:
+ type: string
+ #format: custom
+ example: "1234-5678"
+ abbrev:
+ type: string
+ coden:
+ type: string
+ creator_entity:
+ type: object
+ required:
+ - full_name
+ properties:
+ <<: *ENTITYPROPS
+ full_name:
+ type: string
+ example: "Grace Hopper"
+ orcid:
+ type: string
+ #format: custom
+ example: "0000-0002-1825-0097"
+ file_entity:
+ type: object
+ properties:
+ <<: *ENTITYPROPS
+ size:
+ type: integer
+ example: 1048576
+ format: int64
+ sha1:
+ type: string
+ #format: custom
+ example: "f013d66c7f6817d08b7eb2a93e6d0440c1f3e7f8"
+ md5:
+ type: string
+ #format: custom
+ example: "d41efcc592d1e40ac13905377399eb9b"
+ url:
+ type: string
+ format: url
+ example: "https://example.edu/~frau/prcding.pdf"
+ releases:
+ type: array
+ items:
+ type: string
+ #format: uuid
+ release_entity:
+ type: object
+ required:
+ - title
+ - work_id
+ properties:
+ <<: *ENTITYPROPS
+ title:
+ type: string
+ work_id:
+ type: string
+ example: "f1f046a3-45c9-4b99-adce-000000000001"
+ container_id:
+ type: string
+ example: "f1f046a3-45c9-4b99-adce-000000000001"
+ release_type:
+ type: string
+ example: "preprint"
+ date:
+ type: string
+ format: date
+ doi:
+ type: string
+ #format: custom
+ example: "10.1234/abcde.789"
+ isbn13:
+ type: string
+ #format: custom
+ volume:
+ type: string
+ pages:
+ type: string
+ issue:
+ type: string
+ example: "12"
+ publisher:
+ type: string
+ contribs:
+ type: array
+ items:
+ $ref: "#/definitions/release_contrib"
+ refs:
+ type: array
+ items:
+ $ref: "#/definitions/release_ref"
+ work_entity:
+ type: object
+ properties:
+ <<: *ENTITYPROPS
+ work_type:
+ type: string
+ entity_edit:
+ type: object
+ required:
+ - edit_id
+ - ident
+ - editgroup_id
+ properties:
+ edit_id:
+ type: integer
+ example: 847
+ format: int64
+ ident:
+ type: string
+ example: "f1f046a3-45c9-4b99-adce-000000000001"
+ revision:
+ type: integer
+ example: 42
+ format: int64
+ redirect_ident:
+ type: string
+ example: "f1f046a3-45c9-4b99-adce-000000000002"
+ #format: uuid
+ editgroup_id:
+ type: integer
+ example: 16
+ format: int64
+ extra:
+ type: object
+ additionalProperties: {}
+ editor:
+ type: object
+ required:
+ - username
+ properties:
+ username:
+ type: string
+ example: "zerocool93"
+ editgroup:
+ type: object
+ required:
+ - editor_id
+ properties:
+ id:
+ type: integer
+ format: int64
+ editor_id:
+ type: integer
+ format: int64
+ description:
+ type: string
+ extra:
+ type: object
+ additionalProperties: {}
+ edits:
+ type: object
+ properties:
+ containers:
+ type: array
+ items:
+ $ref: "#/definitions/entity_edit"
+ creators:
+ type: array
+ items:
+ $ref: "#/definitions/entity_edit"
+ files:
+ type: array
+ items:
+ $ref: "#/definitions/entity_edit"
+ releases:
+ type: array
+ items:
+ $ref: "#/definitions/entity_edit"
+ works:
+ type: array
+ items:
+ $ref: "#/definitions/entity_edit"
+ changelogentries:
+ type: array
+ items:
+ type: object
+ required:
+ - index
+ - editgroup_id
+ - timestamp
+ properties:
+ index:
+ type: integer
+ format: int64
+ editgroup_id:
+ type: integer
+ format: int64
+ timestamp:
+ type: string
+ format: date-time
+ release_ref:
+ type: object
+ properties:
+ index:
+ type: integer
+ format: int64
+ target_release_id:
+ type: string
+ #format: uuid
+ stub:
+ type: string
+ release_contrib:
+ type: object
+ properties:
+ index:
+ type: integer
+ format: int64
+ creator_id:
+ type: string
+ #format: uuid
+ creator_stub:
+ type: string
+ role:
+ type: string
+
+x-entity-responses: &ENTITYRESPONSES
+ 400:
+ description: Bad Request
+ schema:
+ $ref: "#/definitions/error_response"
+ 404:
+ description: Not Found
+ schema:
+ $ref: "#/definitions/error_response"
+ default:
+ description: Generic Error
+ schema:
+ $ref: "#/definitions/error_response"
+
+paths:
+ /container:
+ post:
+ parameters:
+ - name: entity
+ in: body
+ required: true
+ schema:
+ $ref: "#/definitions/container_entity"
+ responses:
+ 201:
+ description: Created Entity
+ schema:
+ $ref: "#/definitions/entity_edit"
+ <<: *ENTITYRESPONSES
+ /container/batch:
+ post:
+ parameters:
+ - name: entity_list
+ in: body
+ required: true
+ schema:
+ type: array
+ items:
+ $ref: "#/definitions/container_entity"
+ responses:
+ 201:
+ description: Created Entities
+ schema:
+ type: array
+ items:
+ $ref: "#/definitions/entity_edit"
+ <<: *ENTITYRESPONSES
+ /container/{id}:
+ parameters:
+ - name: id
+ in: path
+ type: string
+ required: true
+ get:
+ responses:
+ 200:
+ description: Found Entity
+ schema:
+ $ref: "#/definitions/container_entity"
+ <<: *ENTITYRESPONSES
+ /container/lookup:
+ get:
+ parameters:
+ - name: issnl
+ in: query
+ type: string
+ required: true
+ responses:
+ 200:
+ description: Found Entity
+ schema:
+ $ref: "#/definitions/container_entity"
+ <<: *ENTITYRESPONSES
+ /creator:
+ post:
+ parameters:
+ - name: entity
+ in: body
+ required: true
+ schema:
+ $ref: "#/definitions/creator_entity"
+ responses:
+ 201:
+ description: Created Entity
+ schema:
+ $ref: "#/definitions/entity_edit"
+ <<: *ENTITYRESPONSES
+ /creator/batch:
+ post:
+ parameters:
+ - name: entity_list
+ in: body
+ required: true
+ schema:
+ type: array
+ items:
+ $ref: "#/definitions/creator_entity"
+ responses:
+ 201:
+ description: Created Entities
+ schema:
+ type: array
+ items:
+ $ref: "#/definitions/entity_edit"
+ <<: *ENTITYRESPONSES
+ /creator/{id}:
+ parameters:
+ - name: id
+ in: path
+ type: string
+ required: true
+ get:
+ responses:
+ 200:
+ description: Found Entity
+ schema:
+ $ref: "#/definitions/creator_entity"
+ <<: *ENTITYRESPONSES
+ /creator/lookup:
+ get:
+ parameters:
+ - name: orcid
+ in: query
+ type: string
+ required: true
+ responses:
+ 200:
+ description: Found Entity
+ schema:
+ $ref: "#/definitions/creator_entity"
+ <<: *ENTITYRESPONSES
+ /file:
+ post:
+ parameters:
+ - name: entity
+ in: body
+ required: true
+ schema:
+ $ref: "#/definitions/file_entity"
+ responses:
+ 201:
+ description: Created Entity
+ schema:
+ $ref: "#/definitions/entity_edit"
+ <<: *ENTITYRESPONSES
+ /file/batch:
+ post:
+ parameters:
+ - name: entity_list
+ in: body
+ required: true
+ schema:
+ type: array
+ items:
+ $ref: "#/definitions/file_entity"
+ responses:
+ 201:
+ description: Created Entities
+ schema:
+ type: array
+ items:
+ $ref: "#/definitions/entity_edit"
+ <<: *ENTITYRESPONSES
+ /file/{id}:
+ parameters:
+ - name: id
+ in: path
+ type: string
+ required: true
+ get:
+ responses:
+ 200:
+ description: Found Entity
+ schema:
+ $ref: "#/definitions/file_entity"
+ <<: *ENTITYRESPONSES
+ /file/lookup:
+ get:
+ parameters:
+ - name: sha1
+ in: query
+ type: string
+ required: true
+ responses:
+ 200:
+ description: Found Entity
+ schema:
+ $ref: "#/definitions/file_entity"
+ <<: *ENTITYRESPONSES
+ /release:
+ post:
+ parameters:
+ - name: entity
+ in: body
+ required: true
+ schema:
+ $ref: "#/definitions/release_entity"
+ responses:
+ 201:
+ description: Created Entity
+ schema:
+ $ref: "#/definitions/entity_edit"
+ <<: *ENTITYRESPONSES
+ /release/batch:
+ post:
+ parameters:
+ - name: entity_list
+ in: body
+ required: true
+ schema:
+ type: array
+ items:
+ $ref: "#/definitions/release_entity"
+ responses:
+ 201:
+ description: Created Entities
+ schema:
+ type: array
+ items:
+ $ref: "#/definitions/entity_edit"
+ <<: *ENTITYRESPONSES
+ /release/{id}:
+ parameters:
+ - name: id
+ in: path
+ type: string
+ required: true
+ get:
+ responses:
+ 200:
+ description: Found Entity
+ schema:
+ $ref: "#/definitions/release_entity"
+ <<: *ENTITYRESPONSES
+ /release/lookup:
+ get:
+ parameters:
+ - name: doi
+ in: query
+ type: string
+ required: true
+ responses:
+ 200:
+ description: Found Entity
+ schema:
+ $ref: "#/definitions/release_entity"
+ <<: *ENTITYRESPONSES
+ /work:
+ post:
+ parameters:
+ - name: entity
+ in: body
+ required: true
+ schema:
+ $ref: "#/definitions/work_entity"
+ responses:
+ 201:
+ description: Created Entity
+ schema:
+ $ref: "#/definitions/entity_edit"
+ <<: *ENTITYRESPONSES
+ /work/batch:
+ post:
+ parameters:
+ - name: entity_list
+ in: body
+ required: true
+ schema:
+ type: array
+ items:
+ $ref: "#/definitions/work_entity"
+ responses:
+ 201:
+ description: Created Entities
+ schema:
+ type: array
+ items:
+ $ref: "#/definitions/entity_edit"
+ <<: *ENTITYRESPONSES
+ /work/{id}:
+ parameters:
+ - name: id
+ in: path
+ type: string
+ required: true
+ get:
+ responses:
+ 200:
+ description: Found Entity
+ schema:
+ $ref: "#/definitions/work_entity"
+ <<: *ENTITYRESPONSES
+ /editor/{username}:
+ parameters:
+ - name: username
+ in: path
+ type: string
+ required: true
+ get:
+ responses:
+ 200:
+ description: Found Editor
+ schema:
+ $ref: "#/definitions/editor"
+ 404:
+ description: Not Found
+ schema:
+ $ref: "#/definitions/error_response"
+ default:
+ description: Generic Error
+ schema:
+ $ref: "#/definitions/error_response"
+ /editor/{username}/changelog:
+ parameters:
+ - name: username
+ in: path
+ type: string
+ required: true
+ get:
+ responses:
+ 200:
+ description: Found Merged Changes
+ schema:
+ $ref: "#/definitions/changelogentries"
+ 404:
+ description: Not Found
+ schema:
+ $ref: "#/definitions/error_response"
+ default:
+ description: Generic Error
+ schema:
+ $ref: "#/definitions/error_response"
+ /editgroup:
+ post:
+ parameters:
+ - name: entity
+ in: body
+ required: true
+ schema:
+ $ref: "#/definitions/editgroup"
+ responses:
+ 201:
+ description: Successfully Created
+ schema:
+ $ref: "#/definitions/editgroup"
+ 400:
+ description: Bad Request
+ schema:
+ $ref: "#/definitions/error_response"
+ default:
+ description: Generic Error
+ schema:
+ $ref: "#/definitions/error_response"
+ /editgroup/{id}:
+ parameters:
+ - name: id
+ in: path
+ type: integer
+ format: int64
+ required: true
+ get:
+ responses:
+ 200:
+ description: Found Entity
+ schema:
+ $ref: "#/definitions/editgroup"
+ 400:
+ description: Bad Request
+ schema:
+ $ref: "#/definitions/error_response"
+ 404:
+ description: Not Found
+ schema:
+ $ref: "#/definitions/error_response"
+ default:
+ description: Generic Error
+ schema:
+ $ref: "#/definitions/error_response"
+ /editgroup/{id}/accept:
+ parameters:
+ - name: id
+ in: path
+ type: integer
+ format: int64
+ required: true
+ post:
+ responses:
+ 200:
+ description: Merged Successfully
+ schema:
+ $ref: "#/definitions/success"
+ 400:
+ description: Unmergable
+ schema:
+ $ref: "#/definitions/error_response"
+ 404:
+ description: Not Found
+ schema:
+ $ref: "#/definitions/error_response"
+ default:
+ description: Generic Error
+ schema:
+ $ref: "#/definitions/error_response"