LoginSignup
1
1

More than 5 years have passed since last update.

OpenWhisk Swagger 2.0 Template & Cloudant package sdk

Last updated at Posted at 2017-05-16

Openwhisk Swagger Template

Swagger 2.0 = OpenAPI 2.0

==

swagger: '2.0'
info:
version: '1.0'
title: openwhiskapihira
schemes:
- https
consumes:
- application/json
produces:
- application/json
paths:
/openwhiskapihira:
get:
operationId: getOpenwhiskapihira
x-openwhisk:
namespace: ****
action: ''
package: default
url: 'https://openwhisk.ng.bluemix.net/api/v1/web/****/default/.json'
responses:
'200':
description: A successful invocation response
x-ibm-configuration:
assembly:
execute:
- operation-switch:
case:
- operations:
- getOpenwhiskapihira
execute:
- invoke:
target-url: 'https://openwhisk.ng.bluemix.net/api/v1/web/****/default/.json'
verb: keep
otherwise: []
title: whisk-invoke
cors:
enabled: true
basePath: /gws/apigateway/api/***/openwhiskapihra
securityDefinitions:
client_id:
type: apiKey
in: header
name: X-IBM-Client-ID
x-key-type: clientId
github:
type: oauth2
flow: application
tokenUrl: ''
x-tokenintrospect:
url: 'https://api.github.com/user'
security:
- client_id: []
github: []
$$label: 'client_id, github'
x-ibm-rate-limit:
- unit: second
units: 1
rate: 1000
host: service.us.apiconnect.ibmcloud.com

Cloudant create attachment

function main(message) {
var cloudantOrError = getCloudantAccount(message);
if (typeof cloudantOrError !== 'object') {
return Promise.reject(cloudantOrError);
}
var cloudant = cloudantOrError;
var dbName = message.dbname;
var docId = message.docid;
var attName = message.attachmentname;
var att = message.attachment;
var contentType = message.contenttype;
var params = {};

if(!dbName) {
return Promise.reject('dbname is required.');
}
if(!docId) {
return Promise.reject('docid is required.');
}
if(!attName) {
return Promise.reject('attachmentname is required.');
}
if(!att) {
return Promise.reject('attachment is required.');
}
if(!contentType) {
return Promise.reject('contenttype is required.');
}
//Add document revision to query if it exists
if(typeof message.docrev !== 'undefined') {
params.rev = message.docrev;
}
var cloudantDb = cloudant.use(dbName);

if (typeof message.params === 'object') {
params = message.params;
} else if (typeof message.params === 'string') {
try {
params = JSON.parse(message.params);
} catch (e) {
return Promise.reject('params field cannot be parsed. Ensure it is valid JSON.');
}
}

return insert(cloudantDb, docId, attName, att, contentType, params);
}

/**
* Insert attachment for document in database.
*/
function insert(cloudantDb, docId, attName, att, contentType, params) {
return new Promise(function(resolve, reject) {
cloudantDb.attachment.insert(docId, attName, att, contentType, params, function(error, response) {
if (!error) {
console.log("success", response);
resolve(response);
} else {
console.log("error", error);
reject(error);
}
});
});
}

function getCloudantAccount(message) {
// full cloudant URL - Cloudant NPM package has issues creating valid URLs
// when the username contains dashes (common in Bluemix scenarios)
var cloudantUrl;

if (message.url) {
// use bluemix binding
cloudantUrl = message.url;
} else {
if (!message.host) {
return 'cloudant account host is required.';
}
if (!message.username) {
return 'cloudant account username is required.';
}
if (!message.password) {
return 'cloudant account password is required.';
}

cloudantUrl = "https://" + message.username + ":" + message.password + "@" + message.host;

}

return require('cloudant')({
url: cloudantUrl
});
}

Cloudant Manage bulk document

function main(message) {
var cloudantOrError = getCloudantAccount(message);
if (typeof cloudantOrError !== 'object') {
return Promise.reject(cloudantOrError);
}
var cloudant = cloudantOrError;
var dbName = message.dbname;
var docs = message.docs;
var params = {};

if(!dbName) {
return Promise.reject('dbname is required.');
}
if(!docs) {
return Promise.reject('docs is required.');
}
var cloudantDb = cloudant.use(dbName);

if (typeof message.params === 'object') {
params = message.params;
} else if (typeof message.params === 'string') {
try {
params = JSON.parse(message.params);
} catch (e) {
return Promise.reject('params field cannot be parsed. Ensure it is valid JSON.');
}
}

if (typeof message.docs === 'object') {
docs = message.docs;
} else if (typeof message.docs === 'string') {
try {
docs = JSON.parse(message.docs);
} catch (e) {
return Promise.reject('docs field cannot be parsed. Ensure it is valid JSON.');
}
} else {
return Promise.reject('docs field is ' + (typeof docs) + ' and should be an object or a JSON string.');
}

return bulk(cloudantDb, docs, params);
}

function bulk(cloudantDb, docs, params) {
return new Promise(function(resolve, reject) {
cloudantDb.bulk(docs, params, function(error, response) {
if (!error) {
var responseDocs = {};
responseDocs.docs = response;
console.log('success', response);
resolve(responseDocs);
} else {
console.log('Error: ', error);
reject(error);
}
});
});
}

function getCloudantAccount(message) {
// full cloudant URL - Cloudant NPM package has issues creating valid URLs
// when the username contains dashes (common in Bluemix scenarios)
var cloudantUrl;

if (message.url) {
// use bluemix binding
cloudantUrl = message.url;
} else {
if (!message.host) {
return 'cloudant account host is required.';
}
if (!message.username) {
return 'cloudant account username is required.';
}
if (!message.password) {
return 'cloudant account password is required.';
}

cloudantUrl = "https://" + message.username + ":" + message.password + "@" + message.host;

}

return require('cloudant')({
url: cloudantUrl
});
}

Cloudant read changed feed

/**
* Read changes feed from Cloudant database:
* https://docs.cloudant.com/database.html#get-changes
**/

function main(message) {
var cloudantOrError = getCloudantAccount(message);
if (typeof cloudantOrError !== 'object') {
return Promise.reject(cloudantOrError);
}
var cloudant = cloudantOrError;
var dbName = message.dbname;
var params = {};

if(!dbName) {
return Promise.reject('dbname is required.');
}

if (typeof message.params === 'object') {
params = message.params;
} else if (typeof message.params === 'string') {
try {
params = JSON.parse(message.params);
} catch (e) {
return Promise.reject('params field cannot be parsed. Ensure it is valid JSON.');
}
}

return changes(cloudant, dbName, params);
}

function changes(cloudant, dbName, params) {
return new Promise(function(resolve, reject) {
cloudant.db.changes(dbName, params, function(error, response) {
if (!error) {
console.log('success', response);
resolve(response);
} else {
console.error('error', error);
reject(error);
}
});
});
}

function getCloudantAccount(message) {
// full cloudant URL - Cloudant NPM package has issues creating valid URLs
// when the username contains dashes (common in Bluemix scenarios)
var cloudantUrl;

if (message.url) {
// use bluemix binding
cloudantUrl = message.url;
} else {
if (!message.host) {
return 'cloudant account host is required.';
}
if (!message.username) {
return 'cloudant account username is required.';
}
if (!message.password) {
return 'cloudant account password is required.';
}

cloudantUrl = "https://" + message.username + ":" + message.password + "@" + message.host;

}

return require('cloudant')({
url: cloudantUrl
});
}

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1