diff --git a/api/swagger.yml b/api/swagger.yml new file mode 100644 index 000000000..c56cde5a9 --- /dev/null +++ b/api/swagger.yml @@ -0,0 +1,324 @@ +# This is the IronFunctions API spec +# If you make changes here, remember to run `go generate` in routeserver/ and +# tasker/ to make sure you use the changes. + +swagger: '2.0' +info: + title: IronFunctions + description: + version: "0.0.1" +# the domain of the service +host: "localhost:8080" +# array of all schemes that your API supports +schemes: + - https + - http +# will be prefixed to all paths +basePath: /v1 +consumes: + - application/json +produces: + - application/json +paths: + /apps: + get: + summary: "Get all app names." + description: "Get a list of all the apps in the system." + tags: + - Apps + responses: + 200: + description: List of apps. + schema: + $ref: '#/definitions/AppsWrapper' + default: + description: Unexpected error + schema: + $ref: '#/definitions/Error' + post: + summary: "Post new app" + description: "Insert a new app" + tags: + - Apps + parameters: + - name: body + in: body + description: App to post. + required: true + schema: + $ref: '#/definitions/AppWrapper' + responses: + 200: + description: App details and stats. + schema: + $ref: '#/definitions/AppWrapper' + 400: + description: Parameters are missing or invalid. + schema: + $ref: '#/definitions/Error' + 500: + description: Could not accept app due to internal error. + schema: + $ref: '#/definitions/Error' + default: + description: Unexpected error + schema: + $ref: '#/definitions/Error' + + + /apps/{app}: + get: + summary: "Get information for a app." + description: "This gives more details about a app, such as statistics." + tags: + - Apps + parameters: + - name: name + in: path + description: name of the app. + required: true + type: string + responses: + 200: + description: App details and stats. + schema: + $ref: '#/definitions/AppWrapper' + 404: + description: App does not exist. + schema: + $ref: '#/definitions/Error' + default: + description: Unexpected error + schema: + $ref: '#/definitions/Error' + put: + summary: "Create/update a app." + description: "You can set app level settings here. " + tags: + - Apps + parameters: + - name: app + in: path + description: name of the app. + required: true + type: string + - name: body + in: body + description: App to post. + required: true + schema: + $ref: '#/definitions/AppWrapper' + responses: + 200: + description: App details and stats. + schema: + $ref: '#/definitions/AppWrapper' + 400: + description: Parameters are missing or invalid. + schema: + $ref: '#/definitions/Error' + 500: + description: Could not accept app due to internal error. + schema: + $ref: '#/definitions/Error' + default: + description: Unexpected error + schema: + $ref: '#/definitions/Error' + + /apps/{app}/routes: + post: + summary: Enqueue Route + description: | + Enqueues route(s). If any of the routes is invalid, none of the routes are enqueued. + tags: + - Routes + parameters: + - name: app + in: path + description: name of the app. + required: true + type: string + - name: body + in: body + description: Array of routes to post. + required: true + schema: + $ref: '#/definitions/NewRoutesWrapper' + responses: + 201: + description: Route created + schema: + $ref: '#/definitions/RoutesWrapper' + 400: + description: One or more of the routes were invalid due to parameters being missing or invalid. + schema: + $ref: '#/definitions/Error' + 500: + description: Could not accept routes due to internal error. + schema: + $ref: '#/definitions/Error' + default: + description: Unexpected error + schema: + $ref: '#/definitions/Error' + + get: + summary: Get route list by app name. + description: This will list routes for a particular app. + tags: + - Routes + parameters: + - name: app + in: path + description: Name of app for this set of routes. + required: true + type: string + responses: + 200: + description: Route information + schema: + $ref: '#/definitions/RoutesWrapper' + default: + description: Unexpected error + schema: + $ref: '#/definitions/Error' + + /apps/{app}/routes/{route}: + get: + summary: Gets route by name + description: Gets a route by name. + tags: + - Routes + parameters: + - name: app + in: path + description: Name of app for this set of routes. + required: true + type: string + - name: route + in: path + description: Route name + required: true + type: string + responses: + 200: + description: Route information + schema: + $ref: '#/definitions/RouteWrapper' + 404: + description: Route does not exist. + schema: + $ref: '#/definitions/Error' + default: + description: Unexpected error + schema: + $ref: '#/definitions/Error' + + delete: + summary: Deletes the route + tags: + - Routes + description: Deletes the route. + parameters: + - name: app + in: path + description: Name of app for this set of routes. + required: true + type: string + - name: route + in: path + description: Route name + required: true + type: string + responses: + 200: + description: Route successfully deleted. Deletion succeeds even on routes that do not exist. + +definitions: + Route: + allOf: + - type: object + properties: + name: + type: string + description: "Route name" + readOnly: true + app_name: + type: string + description: "App this route belongs to." + readOnly: true + path: + type: string + description: URL path that will be matched to this route + image: + description: Name of Docker image to use in this route. You should include the image tag, which should be a version number, to be more accurate. Can be overridden on a per route basis with route.image. + type: string + headers: + type: string + description: Map of http headers that will be sent with the response + + App: + type: object + properties: + name: + type: string + description: "Name of this app. Must be different than the image name. Can ony contain alphanumeric, -, and _." + readOnly: true + + RoutesWrapper: + type: object + required: + - routes + properties: + routes: + type: array + items: + $ref: '#/definitions/Route' + cursor: + type: string + description: Used to paginate results. If this is returned, pass it into the same query again to get more results. + error: + $ref: '#/definitions/ErrorBody' + + RouteWrapper: + type: object + required: + - route + properties: + route: + $ref: '#/definitions/Route' + + AppsWrapper: + type: object + required: + - apps + properties: + apps: + type: array + items: + $ref: '#/definitions/App' + + AppWrapper: + type: object + required: + - app + properties: + app: + $ref: '#/definitions/App' + + ErrorBody: + type: object + properties: + message: + type: string + readOnly: true + fields: + type: string + readOnly: true + + Error: + type: object + properties: + error: + $ref: '#/definitions/ErrorBody'