swagger: "2.0" info: description: "This is a RESTful API to access world data, including countries, regions, and cities." version: "1.0.0" title: "World Data API" host: "127.0.0.1:8443" schemes: - "http" tags: - name: "token" description: "Get a JWT for authorization" - name: "countries" description: "Access the world countries" - name: "regions" description: "Access the regions of countries" - name: "cities" description: "Access the world cities" paths: /gettoken: post: tags: - "token" summary: "Get a token to authorize future requests" consumes: - "application/x-www-form-urlencoded" produces: - text/plain parameters: - in: formData name: user required: true type: string - in: formData name: password required: true type: string responses: 200: description: A valid token to use for other requests 401: description: "Wrong user/password" /regions: get: tags: - "regions" summary: "Get all regions of all countries" produces: - application/json parameters: - in: header name: "Authorization" required: true type: string description: Authorization Token responses: 200: description: "OK" 401: description: "No token provided" post: tags: - "regions" summary: "Add a region to a given country" consumes: - "application/x-www-form-urlencoded" produces: - text/plain parameters: - in: formData name: name required: true type: string description: The new region's name. - in: header name: "Authorization" required: true type: string description: Authorization Token responses: 201: description: "OK, created" 400: description: "Name missing, region not created" 401: description: "No token provided" 403: description: "Country not found, region not created" 409: description: "Other failure, region not created" /regions/{country}: get: tags: - "regions" summary: "Get all regions of a given country" produces: - application/json parameters: - name: country in: path description: "Country (id) whose regions are required" type: string required: true - in: header name: "Authorization" required: true type: string description: Authorization Token responses: 200: description: "OK" 401: description: "No token provided" 404: description: "Country not found" /regions/{country}/{id}: get: tags: - "regions" summary: "Get a specific region of a given country" produces: - application/json parameters: - name: country in: path description: "Country (id) of the region" type: string required: true - name: id in: path description: "Region (id) that is required" type: string required: true - in: header name: "Authorization" required: true type: string description: Authorization Token responses: 200: description: "OK" 401: description: "No token provided" 404: description: "Country not found" delete: tags: - "regions" summary: "Delete a specific region of a given country" description: "" parameters: - name: country in: path description: "Country (id) of the region" type: string required: true - name: id in: path description: "Region (id) that is to be deleted" type: string required: true - in: header name: "Authorization" required: true type: string description: Authorization Token responses: 204: description: "OK, region was deleted" 401: description: "No token provided" 404: description: "Region does not exist" 405: description: "Region has cities, cannot be deleted" put: tags: - "regions" summary: "Update a specific region of a given country" consumes: - "application/x-www-form-urlencoded" produces: - text/plain parameters: - name: country in: path description: "Country (id) of the region" type: string required: true - name: id in: path description: "Region (id) that is to be deleted" type: string required: true - in: formData name: name required: true type: string description: The region's new name. - in: header name: "Authorization" required: true type: string description: Authorization Token responses: 204: description: "OK, region was updated" 400: description: "Name missing, region not updated" 401: description: "No token provided" 404: description: "Country not found" /countries: get: tags: - "countries" summary: "Get all countries" produces: - application/json parameters: - in: header name: "Authorization" required: true type: string description: Authorization Token responses: 200: description: "OK" 401: description: "No token provided" /countries/{country}: get: tags: - "countries" summary: "Get a single country" produces: - application/json parameters: - name: country in: path description: "Required Country" type: string required: true - in: header name: "Authorization" required: true type: string description: Authorization Token responses: 200: description: "OK" 401: description: "No token provided" 404: description: "Country not found" delete: tags: - "countries" summary: "Delete a specific country" description: "" parameters: - name: country in: path description: "Country to delete" type: string required: true - in: header name: "Authorization" required: true type: string description: Authorization Token responses: 204: description: "OK, country was deleted" 401: description: "No token provided" 404: description: "Country does not exist" 405: description: "Country has regions, cannot be deleted" put: tags: - "countries" summary: "Update or create a country" consumes: - "application/x-www-form-urlencoded" produces: - text/plain parameters: - name: country in: path description: "Country" type: string required: true - in: formData name: name required: true type: string description: The region's new name. - in: header name: "Authorization" required: true type: string description: Authorization Token responses: 204: description: "OK, coutry was updated" 400: description: "Name missing, country not updated" 401: description: "No token provided" /cities: post: tags: - "cities" summary: "Add a city" consumes: - "application/x-www-form-urlencoded" produces: - text/plain parameters: - in: formData name: name required: true type: string description: The new city's name. - in: formData name: latitude required: true type: number description: The new city's latitude. - in: formData name: longitude required: true type: number description: The new city's longitude. - in: formData name: population required: true type: number description: The new city's population. - in: formData name: countryCode required: true type: string description: The new city's country. - in: formData name: regionCode required: true type: string description: The new city's region. - in: header name: "Authorization" required: true type: string description: Authorization Token responses: 201: description: "OK, created" 400: description: "Name missing, city not created" 401: description: "No token provided" 403: description: "Region not found, city not created" 409: description: "Other failure, city not created" /cities/{cityId}: get: tags: - "cities" summary: "Get a specific city" produces: - application/json parameters: - name: cityId in: path description: "Id of the city" type: number required: true - in: header name: "Authorization" required: true type: string description: Authorization Token responses: 200: description: "OK" 401: description: "No token provided" 404: description: "City not found" delete: tags: - "cities" summary: "Delete a specific city" description: "" parameters: - name: cityId in: path description: "Id of the city" type: number required: true - in: header name: "Authorization" required: true type: string description: Authorization Token responses: 204: description: "OK, city was deleted" 401: description: "No token provided" 404: description: "City does not exist" put: tags: - "cities" summary: "Update a specific city" consumes: - "application/x-www-form-urlencoded" produces: - text/plain parameters: - name: cityId in: path description: "Id of the city" type: number required: true - in: formData name: name required: true type: string description: The new city's name. - in: formData name: latitude required: true type: number description: The new city's latitude. - in: formData name: longitude required: true type: number description: The new city's longitude. - in: formData name: population required: true type: number description: The new city's population. - in: formData name: countryCode required: true type: string description: The new city's country. - in: formData name: regionCode required: true type: string description: The new city's region. - in: header name: "Authorization" required: true type: string description: Authorization Token responses: 204: description: "OK, city was updated" 400: description: "Name missing, city not updated" 401: description: "No token provided" 404: description: "City not found"