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

Merge pull request #219 from oceanprotocol/feature/swagger

Fetch Swagger specs remotely
This commit is contained in:
Troy McConaghy 2019-04-17 13:41:49 +02:00 committed by GitHub
commit 39d6d1ead4
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
8 changed files with 89 additions and 792 deletions

View File

@ -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)

View File

@ -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:
<repo name="aquarius"></repo>
<repo name="brizo"></repo>
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:
<repo name="squid-js"></repo>

View File

@ -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"
}

View File

@ -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"
}

View File

@ -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

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,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) {

View File

@ -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 {

View File

@ -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={
<span className={stylesDoc.version}>
{version}
<span>v{version}</span>
<a
href={`https://app.swaggerhub.com/apis/Ocean-Protocol/${name}`}
>
past versions
</a>
</span>
}
/>