Skip to content

Commit 98834eb

Browse files
author
Erik-Wittern
committed
Rename to OpenAPI Snippets #31
1 parent 3d0ea31 commit 98834eb

File tree

7 files changed

+205
-2144
lines changed

7 files changed

+205
-2144
lines changed

.gitignore

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,4 +37,6 @@ jspm_packages
3737
.node_repl_history
3838

3939
# build file:
40-
swaggersnippet.min.js
40+
dist
41+
42+
.DS_Store

README.md

Lines changed: 20 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,22 @@
1-
# Swagger Snippet
2-
**Generates code snippets for given Swagger / Open API specification files.**
1+
# OpenAPI Snippet
2+
**Generates code snippets from Open API (previously Swagger) documents.**
33

4-
This package takes as input a Swagger 2.0 / OpenAPI v3.0.x specification. It translates the specification into an [HTTP Archive 1.2 request object](http://www.softwareishard.com/blog/har-12-spec/#request). It uses the [HTTP Snippet](https://github.com/Mashape/httpsnippet) library to generate code snippets for every API endpoint (URL path + HTTP method) defined in the specification in various languages & tools (`cURL`, `Node`, `Python`, `Ruby`, `Java`, `Go`, `C#`...).
4+
This package takes as input an OpenAPI v2.0 or v3.0.x document. It translates the document into an [HTTP Archive 1.2 request object](http://www.softwareishard.com/blog/har-12-spec/#request). It uses the [HTTP Snippet](https://github.com/Mashape/httpsnippet) library to generate code snippets for every API endpoint (URL path + HTTP method) defined in the specification in various languages & tools (`cURL`, `Node`, `Python`, `Ruby`, `Java`, `Go`, `C#`...), or for selected endpoints.
55

66
## Installation
77

88
```bash
9-
npm i swagger-snippet
9+
npm i openapi-snippet
1010
```
1111

12-
## Build Swagger Snippet (for use in browser)
13-
Clone the Swagger Snippet repository. Install required dependencies:
12+
## Build OpenAPI Snippet (for use in browser)
13+
Clone this repository. Install required dependencies:
1414

1515
```bash
1616
npm i
1717
```
1818

19-
Build a minified version of Swagger Snippet (`swaggersnippet.min.js`):
19+
Build a minified version of OpenAPI Snippet (`openapisnippet.min.js`):
2020

2121
```bash
2222
npm run build
@@ -27,44 +27,44 @@ npm run build
2727
### As a module
2828

2929
```javascript
30-
const SwaggerSnippet = require('swagger-snippet')
30+
const OpenAPISnippet = require('openapi-snippet')
3131

3232
// define input:
33-
const swagger = ... // a Swagger / Open API specification
33+
const openApi = ... // Open API document
3434
const targets = ['node_unirest', 'c'] // array of targets for code snippets. See list below...
3535

3636
try {
3737
// either, get snippets for ALL endpoints:
38-
const results = SwaggerSnippet.getSwaggerSnippets(swagger, targets) // results is now array of snippets, see "Output" below.
38+
const results = OpenAPISnippet.getSnippets(openApi, targets) // results is now array of snippets, see "Output" below.
3939

4040
// ...or, get snippets for a single endpoint:
41-
const results2 = SwaggerSnippet.getEndpointSnippets(swagger, '/users/{user-id}/relationship', 'get', targets)
41+
const results2 = OpenAPISnippet.getEndpointSnippets(openApi, '/users/{user-id}/relationship', 'get', targets)
4242
} catch (err) {
4343
// do something with potential errors...
4444
}
4545
```
4646

4747
### Within the browser
4848

49-
Include the `swaggersnippet.min.js` file created after building the the library (see above) in your HTML page:
49+
Include the `openapisnippet.min.js` file created after building the the library (see above) in your HTML page:
5050

5151
```html
52-
<script type="text/javascript" src="path/to/swaggersnippet.min.js"></script>
52+
<script type="text/javascript" src="path/to/openapisnippet.min.js"></script>
5353
```
5454

55-
Use Swagger Snippet, which now defines the global variable `SwaggerSnippet`.
55+
Use OpenAPI Snippet, which now defines the global variable `OpenAPISnippet`.
5656

5757

5858
## Output
59-
The output for every endpoint is an object, containing the `method`, `url`, a human-readable `description`, and the corresponding `resource` - all of these values stem from the specification. In addition, within the `snippets` list, an object containing a code snippet for every chosen target is provided. As of version `0.4.0`, the snippets include exemplary payload data.
59+
The output for every endpoint is an object, containing the `method`, `url`, a human-readable `description`, and the corresponding `resource` - all of these values stem from the OpenAPI document. In addition, within the `snippets` list, an object containing a code snippet for every chosen target is provided. As of version `0.4.0`, the snippets include exemplary payload data.
6060

61-
If `getSwaggerSnippets` is used, an array of the above described objects is returned.
61+
If `getSnippets` is used, an array of the above described objects is returned.
6262

6363
For example:
6464

65-
```json
65+
```js
6666
[
67-
...
67+
// ...
6868
{
6969
"method": "GET",
7070
"url": "https://api.instagram.com/v1/users/{user-id}/relationship",
@@ -78,12 +78,12 @@ For example:
7878
}
7979
]
8080
}
81-
...
81+
// ...
8282
]
8383
```
8484

8585
## Targets
86-
Currently, swagger-snippet supports the following targets (depending on the HTTP Snippet library):
86+
Currently, OpenAPI Snippet supports the following targets (depending on the HTTP Snippet library):
8787

8888
* `c_libcurl` (default)
8989
* `csharp_restsharp` (default)

index.js

Lines changed: 69 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,40 @@
11
/**
2-
* swagger-snippet
3-
* Generate code snippets for given Swagger / Open API Specification files
2+
* openapi-snippet
3+
*
4+
* Generates code snippets from Open API (previously Swagger) documents.
45
*
56
* Author: Erik Wittern
67
* License: MIT
78
*/
89
'use strict'
910

10-
var SwaggerToHar = require('./swagger-to-har.js')
11-
var HTTPSnippet = require('httpsnippet')
11+
const OpenAPIToHar = require('./openapi-to-har.js')
12+
const HTTPSnippet = require('httpsnippet')
1213

13-
var getEndpointSnippets = function (swagger, path, method, targets, values) {
14+
/**
15+
* Return snippets for endpoint identified using path and method in the given
16+
* OpenAPI document.
17+
*
18+
* @param {object} openApi OpenAPI document
19+
* @param {string} path Path identifying endpoint, e.g., '/users'
20+
* @param {string} method HTTP method identifying endpoint, e.g., 'get'
21+
* @param {array} targets List of languages to create snippets in, e.g,
22+
* ['cURL', 'Node']
23+
* @param {object} values Optional: Values for the query parameters if present
24+
*/
25+
const getEndpointSnippets = function (openApi, path, method, targets, values) {
1426
// if optional parameter is not provided, set it to empty object
1527
if (typeof values === 'undefined') {
1628
values = {}
1729
}
1830

19-
var har = SwaggerToHar.getEndpoint(swagger, path, method, values)
31+
const har = OpenAPIToHar.getEndpoint(openApi, path, method, values)
2032

21-
var snippet = new HTTPSnippet(har)
33+
const snippet = new HTTPSnippet(har)
2234

23-
var snippets = []
24-
for (var j in targets) {
25-
var target = formatTarget(targets[j])
35+
const snippets = []
36+
for (let j in targets) {
37+
const target = formatTarget(targets[j])
2638
if (!target) throw new Error('Invalid target: ' + targets[j])
2739
snippets.push({
2840
id: targets[j],
@@ -40,18 +52,25 @@ var getEndpointSnippets = function (swagger, path, method, targets, values) {
4052
}
4153
}
4254

43-
var getSwaggerSnippets = function (swagger, targets) {
44-
var harList = SwaggerToHar.getAll(swagger)
55+
/**
56+
* Return snippets for all endpoints in the given OpenAPI document.
57+
*
58+
* @param {object} openApi OpenAPI document
59+
* @param {array} targets List of languages to create snippets in, e.g,
60+
* ['cURL', 'Node']
61+
*/
62+
const getSnippets = function (openApi, targets) {
63+
const harList = OpenAPIToHar.getAll(openApi)
4564

46-
var results = []
47-
for (var i in harList) {
65+
const results = []
66+
for (let i in harList) {
4867
// create HTTPSnippet object:
49-
var har = harList[i]
50-
var snippet = new HTTPSnippet(har.har)
68+
const har = harList[i]
69+
const snippet = new HTTPSnippet(har.har)
5170

52-
var snippets = []
53-
for (var j in targets) {
54-
var target = formatTarget(targets[j])
71+
const snippets = []
72+
for (let j in targets) {
73+
const target = formatTarget(targets[j])
5574
if (!target) throw new Error('Invalid target: ' + targets[j])
5675
snippets.push({
5776
id: targets[j],
@@ -65,12 +84,12 @@ var getSwaggerSnippets = function (swagger, targets) {
6584
url: har.url,
6685
description: har.description,
6786
resource: getResourceName(har.url),
68-
snippets: snippets
87+
snippets
6988
})
7089
}
7190

7291
// sort results:
73-
results.sort(function (a, b) {
92+
results.sort((a, b) => {
7493
if (a.resource < b.resource) {
7594
return -1
7695
} else if (a.resource > b.resource) {
@@ -90,8 +109,8 @@ var getSwaggerSnippets = function (swagger, targets) {
90109
* @param {string} b Another HTTP verb in lower case
91110
* @return {number} The order instruction for the given HTTP verbs
92111
*/
93-
var getMethodOrder = function (a, b) {
94-
var order = ['get', 'post', 'put', 'delete', 'patch']
112+
const getMethodOrder = function (a, b) {
113+
const order = ['get', 'post', 'put', 'delete', 'patch']
95114
if (order.indexOf(a) === -1) {
96115
return 1
97116
} else if (order.indexOf(b) === -1) {
@@ -109,13 +128,13 @@ var getMethodOrder = function (a, b) {
109128
* Determines the name of the resource exposed by the method.
110129
* E.g., ../users/{userId} --> users
111130
*
112-
* @param {string} urlStr The Swagger path definition
131+
* @param {string} urlStr The OpenAPI path definition
113132
* @return {string} The determined resource name
114133
*/
115-
var getResourceName = function (urlStr) {
116-
var pathComponents = urlStr.split('/')
117-
for (var i = pathComponents.length - 1; i >= 0; i--) {
118-
var cand = pathComponents[i]
134+
const getResourceName = function (urlStr) {
135+
const pathComponents = urlStr.split('/')
136+
for (let i = pathComponents.length - 1; i >= 0; i--) {
137+
const cand = pathComponents[i]
119138
if (cand !== '' && !/^{/.test(cand)) {
120139
return cand
121140
}
@@ -129,24 +148,24 @@ var getResourceName = function (urlStr) {
129148
* @param {string} targetStr String defining a target, e.g., node_request
130149
* @return {object} Object with formatted target, or null
131150
*/
132-
var formatTarget = function (targetStr) {
133-
var language = targetStr.split('_')[0]
134-
var title = capitalizeFirstLetter(language)
135-
var library = targetStr.split('_')[1]
136-
137-
var validTargets = HTTPSnippet.availableTargets()
138-
var validLanguage = false
139-
var validLibrary = false
140-
for (var i in validTargets) {
141-
var target = validTargets[i]
151+
const formatTarget = function (targetStr) {
152+
const language = targetStr.split('_')[0]
153+
const title = capitalizeFirstLetter(language)
154+
const library = targetStr.split('_')[1]
155+
156+
const validTargets = HTTPSnippet.availableTargets()
157+
let validLanguage = false
158+
let validLibrary = false
159+
for (let i in validTargets) {
160+
const target = validTargets[i]
142161
if (language === target.key) {
143162
validLanguage = true
144163
if (typeof library === 'undefined') {
145164
library = target.default
146165
validLibrary = true
147166
} else {
148-
for (var j in target.clients) {
149-
var client = target.clients[j]
167+
for (let j in target.clients) {
168+
const client = target.clients[j]
150169
if (library === client.key) {
151170
validLibrary = true
152171
break
@@ -162,32 +181,32 @@ var formatTarget = function (targetStr) {
162181

163182
return {
164183
title: typeof library !== 'undefined' ? title + ' + ' + capitalizeFirstLetter(library) : title,
165-
language: language,
166-
library: library
184+
language,
185+
library
167186
}
168187
}
169188

170-
var capitalizeFirstLetter = function (string) {
189+
const capitalizeFirstLetter = function (string) {
171190
return string.charAt(0).toUpperCase() + string.slice(1)
172191
}
173192

174193
module.exports = {
175-
getSwaggerSnippets: getSwaggerSnippets,
176-
getEndpointSnippets: getEndpointSnippets
194+
getSnippets,
195+
getEndpointSnippets
177196
}
178197

179198
// The if is only for when this is run from the browser
180199
if (typeof window !== 'undefined') {
181200
// grab existing namespace object, or create a blank object
182201
// if it doesn't exist
183-
var SwaggerSnippet = window.SwaggerSnippet || {}
202+
const OpenAPISnippets = window.OpenAPISnippets || {}
184203

185204
// define that object
186-
SwaggerSnippet = {
187-
getSwaggerSnippets: getSwaggerSnippets,
188-
getEndpointSnippets: getEndpointSnippets
205+
OpenAPISnippets = {
206+
getSnippets,
207+
getEndpointSnippets
189208
}
190209

191210
// replace/create the global namespace
192-
window.SwaggerSnippet = SwaggerSnippet
211+
window.OpenAPISnippets = OpenAPISnippets
193212
}

0 commit comments

Comments
 (0)