1
0
mirror of https://github.com/oceanprotocol/docs.git synced 2024-11-26 19:49:26 +01:00

fetch remote swagger specs

This commit is contained in:
Matthias Kretschmann 2019-04-17 12:44:51 +02:00
parent f126896b76
commit 880dcc8fc7
Signed by: m
GPG Key ID: 606EEEF3C479A91F
3 changed files with 55 additions and 665 deletions

View File

@ -1,509 +0,0 @@
{
"definitions": {},
"info": {
"description": "Aquarius provides an off-chain database store for metadata about data assets. When running with our Docker images, it is exposed under:`http://0.0.0.0:5000`.",
"title": "Aquarius",
"version": "0.2.2"
},
"paths": {
"/api/v1/aquarius/assets": {
"get": {
"description": "",
"responses": { "200": { "description": "successful action" } },
"summary": "Get all asset IDs.",
"tags": ["ddo"]
}
},
"/api/v1/aquarius/assets/ddo": {
"delete": {
"description": "",
"responses": {
"200": { "description": "successfully deleted" },
"500": { "description": "Error" }
},
"summary": "Retire metadata of all the assets.",
"tags": ["ddo"]
},
"get": {
"description": "",
"responses": { "200": { "description": "successful action" } },
"summary": "Get DDO of all assets.",
"tags": ["ddo"]
},
"post": {
"consumes": ["application/json"],
"description": "",
"parameters": [
{
"description": "DDO of the asset.",
"in": "body",
"name": "body",
"required": true,
"schema": {
"properties": {
"@context": {
"description": null,
"example": "https://w3id.org/future-method/v1",
"type": "string"
},
"authentication": {
"description": "List of authentication mechanisms.",
"example": [
{ "type": "RsaSignatureAuthentication2018" },
{ "publicKey": "did:op:123456789abcdefghi#keys-1" }
],
"type": "array"
},
"created": {
"description": "date of ddo creation.",
"example": "2016-02-08T16:02:20Z",
"type": "string"
},
"id": {
"description": "ID of the asset.",
"example": "did:op:123456789abcdefghi",
"type": "string"
},
"proof": {
"description": "Information about the creation and creator of the asset.",
"example": {
"created": "2016-02-08T16:02:20Z",
"creator": "did:example:8uQhQMGzWxR8vw5P3UWH1ja",
"signatureValue": "QNB13Y7Q9...1tzjn4w==",
"type": "UUIDSignature"
},
"type": "dictionary"
},
"publicKey": {
"description": "List of public keys.",
"example": [
{ "id": "did:op:123456789abcdefghi#keys-1" },
{ "type": "Ed25519VerificationKey2018" },
{ "owner": "did:op:123456789abcdefghi" },
{
"publicKeyBase58": "H3C2AVvLMv6gmMNam3uVAjZpfkcJCwDwnZn6z3wXmqPV"
}
],
"type": "array"
},
"service": {
"description": "List of services.",
"example": [
{
"serviceEndpoint": "http://mybrizo.org/api/v1/brizo/services/consume?pubKey=${ pubKey}&serviceId={serviceId}&url={url}",
"type": "Access"
},
{
"serviceEndpoint": "http://mybrizo.org/api/v1/brizo/services/compute?pubKey=${ pubKey}&serviceId={serviceId}&algo={algo}&container={container}",
"type": "Compute"
},
{
"metadata": {
"additionalInformation": {
"structuredMarkup": [
{
"mediaType": "application/ld+json",
"uri": "http://skos.um.es/unescothes/C01194/jsonld"
},
{
"mediaType": "text/turtle",
"uri": "http://skos.um.es/unescothes/C01194/turtle"
}
],
"updateFrecuency": "yearly"
},
"base": {
"author": "Met Office",
"checksum": "38803b9e6f04fce3fba4b124524672592264d31847182c689095a081c9e85262",
"compression": "zip",
"copyrightHolder": "Met Office",
"dateCreated": "2012-02-01T10:55:11Z",
"description": "Weather information of UK including temperature and humidity",
"encryptedFiles": "0x098213xzckasdf089723hjgdasfkjgasfv",
"files": [
{
"compression": "zip",
"contentLength": "4535431",
"contentType": "text/csv",
"encoding": "UTF-8",
"resourceId": "access-log2018-02-13-15-17-29-18386C502CAEA932"
}
],
"inLanguage": "en",
"license": "CC-BY",
"links": [
{
"name": "Sample of Asset Data",
"type": "sample",
"url": "https://foo.com/sample.csv"
},
{
"AssetID": "4d517500da0acb0d65a716f61330969334630363ce4a6a9d39691026ac7908ea",
"name": "Data Format Definition",
"type": "format"
}
],
"name": "UK Weather information 2011",
"price": 10,
"tags": "weather, uk, 2011, temperature, humidity",
"type": "dataset",
"workExample": "stationId,latitude,longitude,datetime, temperature,humidity/n423432fsd,51.509865,-0.118092, 2011-01-01T10:55:11+00:00,7.2,68"
},
"curation": {
"numVotes": 123,
"rating": 0.93,
"schema": "Binary Voting"
}
},
"serviceDefinitionId": "2",
"serviceEndpoint": "http://myaquarius.org/api/v1/provider/assets/metadata/{did}",
"type": "Metadata"
}
],
"type": "array"
}
},
"required": [
"@context",
"id",
"created",
"publicKey",
"authentication",
"proof",
"service"
],
"type": "object"
}
}
],
"responses": {
"201": { "description": "Asset successfully registered." },
"400": {
"description": "One of the required attributes is missing."
},
"404": { "description": "Invalid asset data." },
"500": { "description": "Error" }
},
"summary": "Register DDO of a new asset",
"tags": ["ddo"]
}
},
"/api/v1/aquarius/assets/ddo/query": {
"get": {
"description": "",
"parameters": [
{
"description": "ID of the asset.",
"in": "query",
"name": "text",
"required": true,
"type": "string"
},
{
"description": "Key or list of keys to sort the result",
"example": { "value": 1 },
"in": "query",
"name": "sort",
"type": "object"
},
{
"description": "Number of records per page",
"example": 100,
"in": "query",
"name": "offset",
"type": "int"
},
{
"description": "Page showed",
"example": 1,
"in": "query",
"name": "page",
"type": "int"
}
],
"responses": { "200": { "description": "successful action" } },
"summary": "Get a list of DDOs that match with the given text.",
"tags": ["ddo"]
},
"post": {
"consumes": ["application/json"],
"description": "",
"parameters": [
{
"description": "Asset metadata.",
"in": "body",
"name": "body",
"required": true,
"schema": {
"properties": {
"offset": {
"description": "Number of records per page",
"example": 100,
"type": "int"
},
"page": {
"description": "Page showed",
"example": 1,
"type": "int"
},
"query": {
"description": "Query to realize",
"example": { "value": 1 },
"type": "string"
},
"sort": {
"description": "Key or list of keys to sort the result",
"example": { "value": 1 },
"type": "object"
}
},
"type": "object"
}
}
],
"responses": { "200": { "description": "successful action" } },
"summary": "Get a list of DDOs that match with the executed query.",
"tags": ["ddo"]
}
},
"/api/v1/aquarius/assets/ddo/validate": {
"post": {
"consumes": ["application/json"],
"description": "",
"parameters": [
{
"description": "Asset metadata.",
"in": "body",
"name": "body",
"required": true,
"schema": { "type": "object" }
}
],
"responses": {
"200": { "description": "successfully request." },
"500": { "description": "Error" }
},
"summary": "Validate metadata content.",
"tags": ["ddo"]
}
},
"/api/v1/aquarius/assets/ddo/{did}": {
"delete": {
"description": "",
"parameters": [
{
"description": "DID of the asset.",
"in": "path",
"name": "did",
"required": true,
"type": "string"
}
],
"responses": {
"200": { "description": "successfully deleted" },
"404": { "description": "This asset DID is not in OceanDB" },
"500": { "description": "Error" }
},
"summary": "Retire metadata of an asset",
"tags": ["ddo"]
},
"get": {
"description": "",
"parameters": [
{
"description": "DID of the asset.",
"in": "path",
"name": "did",
"required": true,
"type": "string"
}
],
"responses": {
"200": { "description": "successful operation" },
"404": { "description": "This asset DID is not in OceanDB" }
},
"summary": "Get DDO of a particular asset.",
"tags": ["ddo"]
},
"put": {
"consumes": ["application/json"],
"description": "",
"parameters": [
{
"description": "DDO of the asset.",
"in": "body",
"name": "body",
"required": true,
"schema": {
"properties": {
"@context": {
"description": null,
"example": "https://w3id.org/future-method/v1",
"type": "string"
},
"authentication": {
"description": "List of authentication mechanisms.",
"example": [
{ "type": "RsaSignatureAuthentication2018" },
{ "publicKey": "did:op:123456789abcdefghi#keys-1" }
],
"type": "array"
},
"created": {
"description": "date of ddo creation.",
"example": "2016-02-08T16:02:20Z",
"type": "string"
},
"id": {
"description": "ID of the asset.",
"example": "did:op:123456789abcdefghi",
"type": "string"
},
"proof": {
"description": "Information about the creation and creator of the asset.",
"example": {
"created": "2016-02-08T16:02:20Z",
"creator": "did:example:8uQhQMGzWxR8vw5P3UWH1ja",
"signatureValue": "QNB13Y7Q9...1tzjn4w==",
"type": "UUIDSignature"
},
"type": "dictionary"
},
"publicKey": {
"description": "List of public keys.",
"example": [
{ "id": "did:op:123456789abcdefghi#keys-1" },
{ "type": "Ed25519VerificationKey2018" },
{ "owner": "did:op:123456789abcdefghi" },
{
"publicKeyBase58": "H3C2AVvLMv6gmMNam3uVAjZpfkcJCwDwnZn6z3wXmqPV"
}
],
"type": "array"
},
"service": {
"description": "List of services.",
"example": [
{
"serviceEndpoint": "http://mybrizo.org/api/v1/brizo/services/consume?pubKey=${ pubKey}&serviceId={serviceId}&url={url}",
"type": "Access"
},
{
"serviceEndpoint": "http://mybrizo.org/api/v1/brizo/services/compute?pubKey=${ pubKey}&serviceId={serviceId}&algo={algo}&container={container}",
"type": "Compute"
},
{
"metadata": {
"additionalInformation": {
"structuredMarkup": [
{
"mediaType": "application/ld+json",
"uri": "http://skos.um.es/unescothes/C01194/jsonld"
},
{
"mediaType": "text/turtle",
"uri": "http://skos.um.es/unescothes/C01194/turtle"
}
],
"updateFrecuency": "yearly"
},
"base": {
"author": "Met Office",
"checksum": "38803b9e6f04fce3fba4b124524672592264d31847182c689095a081c9e85262",
"compression": "zip",
"copyrightHolder": "Met Office",
"dateCreated": "2012-02-01T10:55:11Z",
"description": "Weather information of UK including temperature and humidity",
"encryptedFiles": "0x098213xzckasdf089723hjgdasfkjgasfv",
"files": [
{
"compression": "zip",
"contentLength": "4535431",
"contentType": "text/csv",
"encoding": "UTF-8",
"resourceId": "access-log2018-02-13-15-17-29-18386C502CAEA932"
}
],
"inLanguage": "en",
"license": "CC-BY",
"links": [
{
"name": "Sample of Asset Data",
"type": "sample",
"url": "https://foo.com/sample.csv"
},
{
"AssetID": "4d517500da0acb0d65a716f61330969334630363ce4a6a9d39691026ac7908ea",
"name": "Data Format Definition",
"type": "format"
}
],
"name": "UK Weather information 2011",
"price": 10,
"tags": "weather, uk, 2011, temperature, humidity",
"type": "dataset",
"workExample": "stationId,latitude,longitude,datetime, temperature,humidity/n423432fsd,51.509865,-0.118092, 2011-01-01T10:55:11+00:00,7.2,68"
},
"curation": {
"numVotes": 123,
"rating": 0.93,
"schema": "Binary Voting"
}
},
"serviceDefinitionId": "2",
"serviceEndpoint": "http://myaquarius.org/api/v1/provider/assets/metadata/{did}",
"type": "Metadata"
}
],
"type": "array"
}
},
"required": [
"@context",
"created",
"id",
"publicKey",
"authentication",
"proof",
"service"
],
"type": "object"
}
}
],
"responses": {
"200": { "description": "Asset successfully updated." },
"201": { "description": "Asset successfully registered." },
"400": {
"description": "One of the required attributes is missing."
},
"404": { "description": "Invalid asset data." },
"500": { "description": "Error" }
},
"summary": "Update DDO of an existing asset",
"tags": ["ddo"]
}
},
"/api/v1/aquarius/assets/metadata/{did}": {
"get": {
"description": "",
"parameters": [
{
"description": "DID of the asset.",
"in": "path",
"name": "did",
"required": true,
"type": "string"
}
],
"responses": {
"200": { "description": "successful operation." },
"404": { "description": "This asset DID is not in OceanDB." }
},
"summary": "Get metadata of a particular asset",
"tags": ["metadata"]
}
}
},
"swagger": "2.0"
}

View File

@ -1,114 +0,0 @@
{
"definitions": {},
"info": {
"description": "Brizo is the technical component executed by Publishers allowing them to provide extended data services. When running with our Docker images, it is exposed under `http://localhost:8030`.",
"title": "Brizo",
"version": "0.3.5"
},
"paths": {
"/api/v1/brizo/services/access/initialize": {
"post": {
"consumes": ["application/json"],
"description": "",
"parameters": [
{
"description": "Service agreement initialization.",
"in": "body",
"name": "body",
"required": true,
"schema": {
"properties": {
"consumerAddress": {
"description": "Consumer address.",
"example": "0x00a329c0648769A73afAc7F9381E08FB43dBEA72",
"type": "string"
},
"did": {
"description": "Identifier of the asset registered in ocean.",
"example": "did:op:08a429b8529856d59867503f8056903a680935a76950bb9649785cc97869a43d",
"type": "string"
},
"serviceAgreementId": {
"description": "Identifier of the service agreement.",
"example": "bb23s87856d59867503f80a690357406857698570b964ac8dcc9d86da4ada010",
"type": "string"
},
"serviceDefinitionId": {
"description": "Identifier of the service definition.",
"example": "0",
"type": "string"
},
"signature": {
"description": "Signature",
"example": "cade376598342cdae231321a0097876aeda656a567a67c6767fd8710129a9dc1",
"type": "string"
}
},
"required": [
"did",
"serviceAgreementId",
"serviceDefinitionId",
"signature",
{ "consumerAddress": null }
],
"type": "object"
}
}
],
"responses": {
"201": {
"description": "Service agreement successfully initialized."
},
"400": {
"description": "One of the required attributes is missing."
},
"401": { "description": "Error executing the service agreement." },
"422": { "description": "Ocean DID not found on chain." },
"500": { "description": "Error" }
},
"summary": "Initialize the service agreement between the publisher and the consumer.",
"tags": ["services"]
}
},
"/api/v1/brizo/services/consume": {
"get": {
"consumes": ["application/json"],
"description": "",
"parameters": [
{
"description": "The consumer address.",
"in": "query",
"name": "consumerAddress",
"required": true,
"type": "string"
},
{
"description": "The ID of the service agreement.",
"in": "query",
"name": "serviceAgreementId",
"required": true,
"type": "string"
},
{
"description": "This URL is only valid if Brizo acts as a proxy. Consumer can't download using the URL if it's not through Brizo.",
"in": "query",
"name": "url",
"required": true,
"type": "string"
}
],
"responses": {
"200": { "description": "Redirect to valid asset url." },
"400": {
"description": "One of the required attributes is missing."
},
"401": { "description": "Invalid asset data." },
"500": { "description": "Error" }
},
"summary": "Allows download of asset data file.",
"tags": ["services"]
}
}
},
"swagger": "2.0"
}

View File

@ -37,26 +37,6 @@ exports.onCreateNode = ({ node, getNode, actions }) => {
}
}
// https://github.com/swagger-api/swagger-js
const getSpec = async () => {
const spec = await Swagger(
'http://petstore.swagger.io/v2/swagger.json'
).then(client => {
return client.spec // The resolved spec
// client.originalSpec // In case you need it
// client.errors // Any resolver errors
// Tags interface
// client.apis.pet.addPet({id: 1, name: "bobby"}).then(...)
// TryItOut Executor, with the `spec` already provided
// client.execute({operationId: 'addPet', parameters: {id: 1, name: "bobby") }).then(...)
})
return spec
}
exports.createPages = ({ graphql, actions }) => {
const { createPage, createRedirect } = actions
@ -152,44 +132,77 @@ exports.createPages = ({ graphql, actions }) => {
//
// Create pages from swagger json files
//
const swaggerSpecs = [
'./data/aquarius.json',
'./data/brizo.json'
]
const swaggerComponents = ['aquarius', 'brizo']
const apiSwaggerTemplate = path.resolve(
'./src/templates/Swagger/index.jsx'
)
swaggerSpecs.forEach(spec => {
const api = require(spec) // eslint-disable-line
const name = path
.basename(spec)
.split('.json')
.join('')
const slug = `/references/${name}/`
// https://github.com/swagger-api/swagger-js
const fetchSwaggerSpec = async name => {
try {
const client = await Swagger(
`https://nginx-${name}.dev-ocean.com/spec`
)
return client.spec // The resolved spec
createPage({
path: slug,
component: apiSwaggerTemplate,
context: {
slug,
api
}
})
// client.originalSpec // In case you need it
// client.errors // Any resolver errors
// Tags interface
// client.apis.pet.addPet({id: 1, name: "bobby"}).then(...)
// TryItOut Executor, with the `spec` already provided
// client.execute({operationId: 'addPet', parameters: {id: 1, name: "bobby") }).then(...)
} catch (error) {
console.log(error)
}
}
const getSlug = name => {
const slug = `/references/${name}/`
return slug
}
const specAquarius = await fetchSwaggerSpec(
swaggerComponents[0]
)
const slugAquarius = getSlug(swaggerComponents[0])
createPage({
path: slugAquarius,
component: apiSwaggerTemplate,
context: {
slug: slugAquarius,
api: specAquarius
}
})
// Swagger Pet Store example, fetch from remote
const specBrizo = await fetchSwaggerSpec(swaggerComponents[1])
const slugBrizo = getSlug(swaggerComponents[1])
createPage({
path: slugBrizo,
component: apiSwaggerTemplate,
context: {
slug: slugBrizo,
api: specBrizo
}
})
// Swagger Pet Store example
const petStoreSlug = '/references/petstore/'
try {
const api = await getSpec()
const client = await Swagger(
`http://petstore.swagger.io/v2/swagger.json`
)
createPage({
path: petStoreSlug,
component: apiSwaggerTemplate,
context: {
slug: petStoreSlug,
api
api: client.spec
}
})
} catch (error) {