diff --git a/README.md b/README.md index c0311b52..ba5edd98 100644 --- a/README.md +++ b/README.md @@ -27,7 +27,7 @@ - [Repositories](#repositories) - [Add Links to a Repository](#add-links-to-a-repository) - [Release Versions](#release-versions) - - [API & Library References](#api--library-references) + - [API References](#api-references) - [Swagger specs](#swagger-specs) - [TypeDoc specs](#typedoc-specs) - [Development](#development) @@ -49,7 +49,7 @@ The documentation is split in multiple sections whose content lives in this repo - **Core concepts**: high-level explanation of concepts, assumptions, and components - **Setup**: getting started for various stakeholders and use cases - **Tutorials**: detailed tutorials -- **API & Library References**: docs for the Aquarius & Brizo REST APIs, and docs for various Squid libraries +- **API References**: docs for the Aquarius & Brizo REST APIs, and docs for various Squid libraries Those sections are defined in the [`/data/sections.yml`](data/sections.yml) file. @@ -184,7 +184,7 @@ The GitHub link is automatically added for every repository and will always be d The displayed version number is based on the tag name of the latest release for a given repository. That means only GitHub releases will trigger a version number update, creating a new Git tag alone is not sufficient. -### API & Library References +### API References You can add more Markdown documents under `/content/references/`, link to them from the [`/data/sidebars/references.yml`](./data/sidebars/references.yml), and they will appear just like in all the other sections. @@ -194,14 +194,12 @@ The sidebar for those generated reference pages will automatically switch to inc #### Swagger specs -Reference pages based on Swagger specs are sourced from a Swagger spec `json` file, at the moment they simply live as manual copies under `/data/`: +Reference pages based on Swagger specs are sourced from remotely hosted Swagger specs: -- [`aquarius.json`](./data/aquarius.json) -- [`brizo.json`](./data/brizo.json) +- [`https://nginx-aquarius.dev-ocean.com/spec`](https://nginx-aquarius.dev-ocean.com/spec) +- [`https://nginx-brizo.dev-ocean.com/spec`](https://nginx-brizo.dev-ocean.com/spec) -There's no automation setup around updating those files so [until this is setup](https://github.com/oceanprotocol/docs/issues/74), they need to be manually updated with copy & paste, like they did in the middle ages. You can copy them from a running instance of Aquarius or Brizo which will expose those spec files, e.g. under `localhost:5000/spec` for Aquarius and `localhost:8030/spec` for Brizo. - -For more information about stylistic issues, take a look at the section in the test page: +They are fetched and updated automatically upon every site build. For more information about stylistic issues, take a look at the section in the test page: - [Swagger spec references](https://docs.oceanprotocol.com/test#swagger-spec-references) diff --git a/content/references/introduction.md b/content/references/introduction.md index 62f9c810..2e387b35 100644 --- a/content/references/introduction.md +++ b/content/references/introduction.md @@ -1,17 +1,20 @@ --- -title: API & Library References -description: All the references for Ocean Protocol components. +title: API References +description: All the API reference docs for Ocean Protocol components and libraries. --- -**Heads Up! This reference section is in heavy development and updated as we integrate data from various code reference tools into this site.** - -The following components expose a consumable REST API which are documented on this site: +This section has API reference docs (or links to external ones) for the following Ocean Protocol components and libraries: Those are sourced from their respective Swagger specs. On this site you can't execute the documented API calls yet. If you need this, you can run a component's local Swagger UI as outlined in the repository instructions on GitHub. +Additionally, if you need API docs for a past version of Aquarius or Brizo, check out their specs on SwaggerHub: + +- [SwaggerHub: Aquarius](https://app.swaggerhub.com/apis/Ocean-Protocol/aquarius) +- [SwaggerHub: Brizo](https://app.swaggerhub.com/apis/Ocean-Protocol/brizo) + References of all the functions and methods used in our libraries: diff --git a/data/aquarius.json b/data/aquarius.json deleted file mode 100644 index d0f14b21..00000000 --- a/data/aquarius.json +++ /dev/null @@ -1,532 +0,0 @@ -{ - "basePath":"/api/v1/aquarius", - "definitions":{ - - }, - "host":"myfancyaquarius.com", - "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://localhost:5000`.", - "title":"Aquarius", - "version":"0.1.4" - }, - "paths":{ - "/api/v1/aquarius/assets":{ - "get":{ - "description":"", - "responses":{ - "200":{ - "description":"successful action" - } - }, - "summary":"Get all asset IDs.", - "tags":[ - "ddo" - ] - } - }, - "/api/v1/aquarius/assets/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" - }, - "id":{ - "description":"ID of the asset.", - "example":"did:op:123456789abcdefghi", - "type":"string" - }, - "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":"Consume" - }, - { - "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", - "compression":"zip", - "contentType":"text/csv", - "contentUrls":[ - "https://testocnfiles.blob.core.windows.net/testfiles/testzkp.zip" - ], - "copyrightHolder":"Met Office", - "dateCreated":"2012-10-10T17:00:000Z", - "description":"Weather information of UK including temperature and humidity", - "encoding":"UTF-8", - "inLanguage":"en", - "license":"CC-BY", - "links":[ - { - "sample1":"http://data.ceda.ac.uk/badc/ukcp09/data/gridded-land-obs/gridded-land-obs-daily/" - }, - { - "sample2":"http://data.ceda.ac.uk/badc/ukcp09/data/gridded-land-obs/gridded-land-obs-averages-25km/" - }, - { - "fieldsDescription":"http://data.ceda.ac.uk/badc/ukcp09/" - } - ], - "name":"UK Weather information 2011", - "price":10, - "size":"3.1gb", - "tags":"weather, uk, 2011, temperature, humidity", - "type":"dataset", - "workExample":"423432fsd,51.509865,-0.118092,2011-01-01T10:55:11+00:00,7.2,68" - }, - "curation":{ - "numVotes":123, - "rating":0.93, - "schema":"Binary Votting" - } - }, - "serviceEndpoint":"http://myaquarius.org/api/v1/provider/assets/metadata/{did}", - "type":"Metadata" - } - ], - "type":"array" - } - }, - "required":[ - "@context", - "id", - "publicKey", - "authentication", - "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":0, - "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":0, - "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/{did}":{ - "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" - }, - "id":{ - "description":"ID of the asset.", - "example":"did:op:123456789abcdefghi", - "type":"string" - }, - "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":"Consume" - }, - { - "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", - "compression":"zip", - "contentType":"text/csv", - "contentUrls":[ - "https://testocnfiles.blob.core.windows.net/testfiles/testzkp.zip" - ], - "copyrightHolder":"Met Office", - "dateCreated":"2012-10-10T17:00:000Z", - "description":"Weather information of UK including temperature and humidity", - "encoding":"UTF-8", - "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, - "size":"3.1gb", - "tags":"weather, uk, 2011, temperature, humidity", - "type":"dataset", - "workExample":"423432fsd,51.509865,-0.118092,2011-01-01T10:55:11+00:00,7.2,68" - }, - "curation":{ - "numVotes":123, - "rating":0.93, - "schema":"Binary Voting" - } - }, - "serviceEndpoint":"http://myaquarius.org/api/v1/aquarius/assets/metadata/{did}", - "type":"Metadata" - } - ], - "type":"array" - } - }, - "required":[ - "@context", - "id", - "publicKey", - "authentication", - "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/ddo/{id}":{ - "delete":{ - "description":"", - "parameters":[ - { - "description":"ID of the asset.", - "in":"path", - "name":"id", - "required":true, - "type":"string" - } - ], - "responses":{ - "200":{ - "description":"successfully deleted" - }, - "404":{ - "description":"This asset ID is not in OceanDB" - }, - "500":{ - "description":"Error" - } - }, - "summary":"Retire metadata of an asset", - "tags":[ - "ddo" - ] - }, - "get":{ - "description":"", - "parameters":[ - { - "description":"ID of the asset.", - "in":"path", - "name":"id", - "required":true, - "type":"string" - } - ], - "responses":{ - "200":{ - "description":"successful operation" - }, - "404":{ - "description":"This asset ID is not in OceanDB" - } - }, - "summary":"Get DDO of a particular asset.", - "tags":[ - "ddo" - ] - } - }, - "/api/v1/aquarius/assets/metadata/{id}":{ - "get":{ - "description":"", - "parameters":[ - { - "description":"ID of the asset.", - "in":"path", - "name":"id", - "required":true, - "type":"string" - } - ], - "responses":{ - "200":{ - "description":"successful operation." - }, - "404":{ - "description":"This asset ID is not in OceanDB." - } - }, - "summary":"Get metadata of a particular asset", - "tags":[ - "metadata" - ] - } - } - }, - "swagger":"2.0" -} diff --git a/data/brizo.json b/data/brizo.json deleted file mode 100644 index bb43ee47..00000000 --- a/data/brizo.json +++ /dev/null @@ -1,200 +0,0 @@ -{ - "basePath":"/api/v1/brizo", - "definitions":{ - - }, - "host":"myfancybrizo.com", - "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.1.2" - }, - "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." - }, - "404":{ - "description":"Invalid signature." - }, - "500":{ - "description":"Error" - } - }, - "summary":"Initialize the SLA between the publisher and the consumer.", - "tags":[ - "services" - ] - } - }, - "/api/v1/brizo/services/compute":{ - "post":{ - "consumes":[ - "application/json" - ], - "description":"", - "parameters":[ - { - "description":"Asset metadata.", - "in":"body", - "name":"body", - "required":true, - "schema":{ - "properties":{ - "algorithm_did":{ - "description":"Identifier of the algorithm to execute", - "example":"0x0234242345", - "type":"string" - }, - "asset_did":{ - "description":"Identifier of the asset registered in Ocean", - "example":"0x0234242345", - "type":"string" - }, - "consumer_wallet":{ - "description":"Address of the wallet of the asset consumer. Ex. data-science...", - "example":"0x0234242345", - "type":"string" - }, - "cpu":{ - "description":"Number of CPUs to execute the algorithm.", - "example":1, - "type":"integer" - }, - "docker_image":{ - "description":"Docker image where the algorithm is going to be executed. Docker image must include all the libraries needed to run it.", - "example":"python:3.6-alpine", - "type":"string" - }, - "memory":{ - "description":"Ammout of memory in GB to run the algorithm", - "example":1.5, - "type":"number" - } - }, - "required":[ - "asset_did", - "algorithm_did", - "consumer_wallet" - ], - "type":"object" - } - } - ], - "responses":{ - - }, - "summary":"Allows to execute an algorithm inside a Docker instance in the cloud. Requires the publisher of the assets to provide this service in the service agreement related with the requested `asset_did`.", - "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":{ - "302":{ - "description":"Redirect to valid asset url." - }, - "400":{ - "description":"One of the required attributes is missing." - }, - "404":{ - "description":"Invalid asset data." - }, - "500":{ - "description":"Error" - } - }, - "summary":"Allows download of asset data file.", - "tags":[ - "services" - ] - } - } - }, - "swagger":"2.0" -} diff --git a/data/sections.yml b/data/sections.yml index 4593830f..d408aafe 100644 --- a/data/sections.yml +++ b/data/sections.yml @@ -13,7 +13,7 @@ link: /tutorials/introduction/ color: orange -- title: API & Library References +- title: API References description: Get the references for REST APIs and library methods for all relevant components. link: /references/introduction/ color: green diff --git a/gatsby-node.js b/gatsby-node.js index 08250dad..60b3264e 100755 --- a/gatsby-node.js +++ b/gatsby-node.js @@ -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,79 @@ 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, + name: swaggerComponents[0], + 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, + name: swaggerComponents[1], + 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) { diff --git a/src/templates/Doc.module.scss b/src/templates/Doc.module.scss index e5e7eb6d..e8ae0c3c 100644 --- a/src/templates/Doc.module.scss +++ b/src/templates/Doc.module.scss @@ -50,9 +50,17 @@ } .version { + color: $brand-grey-light; font-size: $font-size-base; font-family: $font-family-monospace; - color: $brand-grey-light; + + a { + font-size: $font-size-mini; + font-family: $font-family-base; + font-weight: $font-weight-base; + display: inline-block; + margin-left: .5rem; + } } .pathName { diff --git a/src/templates/Swagger/index.jsx b/src/templates/Swagger/index.jsx index 4cd75ad5..0845dbd0 100644 --- a/src/templates/Swagger/index.jsx +++ b/src/templates/Swagger/index.jsx @@ -69,7 +69,7 @@ export default class ApiSwaggerTemplate extends Component { render() { const { location, pageContext } = this.props - const { api } = pageContext + const { api, name } = pageContext const { host, basePath, info, paths } = api const { title, description, version, license, contact } = info @@ -106,7 +106,12 @@ export default class ApiSwaggerTemplate extends Component { description={description} prepend={ - {version} + v{version} + + past versions + } />