You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Perhaps did you already heard about [Swagger](http://developers.helloreverb.com/swagger/). And if not, I can only beg you to drop an eye on it.
8
+
Perhaps did you already heard about [Swagger](http://developers.helloreverb.com/swagger/). And if not, I can only beg you to check it out.
9
9
10
10
Swagger is a specification and complete framework implementation for describing, producing, consuming, and visualizing RESTful web services.
11
11
12
12
It provides:
13
-
- specification: to write descriptors of your API
14
-
- tools: based on this descriptors: friendly GUI for documentation, client libraries...
13
+
- specification: how to write descriptors for your API
14
+
- tools: based on these descriptors: friendly GUI for documentation, client libraries...
15
15
16
-
**Swagger-jack** is one of these tools: a couple of [Express](http://expressjs.com/)middelware (the famous [NodeJS](http://nodejs.org/) Web framework) to generate your own API, and take advantage of automated input validation.
16
+
**Swagger-jack** is one of these tools: a couple of [Express](http://expressjs.com/)middelwares (the famous [NodeJS](http://nodejs.org/) Web framework) to generate your own API, and take advantage of automated input validation.
17
17
18
18
You'll find the source code on [github](https://github.com/feugy/swagger-jack), and the project was released on [NPM](https://npmjs.org/package/swagger-jack)
19
19
20
20
<br/>
21
21
## What is swagger
22
22
23
-
Whether you're building huge information systems or providing a single (but powerfull) REST web service, describing your API will give a better knowledge and therefore usage of your service. And If you can benefit from a well-known standard and its tooling suite... It's icing on the cake.
23
+
Whether you're building huge information systems or providing a single (but powerful) REST web service, describing your API will give a better knowledge and therefore usage of your service. And If you can benefit from a well-known standard and its tooling suite... It's icing on the cake.
@@ -92,7 +92,7 @@ For a given resource, a detailed descriptor will give a list of **api**.
92
92
An api is simply a sub-path associated with a list of **operations**.
93
93
An operation is an HTTP verb for this sub-path, a set of awaited parameters and an expected model for the response.
94
94
95
-
Last of all, the detailed descriptor will embed a list of **models**.
95
+
At last, the detailed descriptor will embed a list of **models**.
96
96
A model is a formal description of a complex object, that can be used in input parameters and output response body.
97
97
98
98
{% highlight json %}
@@ -131,16 +131,16 @@ To sum up, each urls of your REST web service will be grouped within operations
131
131
<br/>
132
132
## The swagger-jack library: why and how
133
133
134
-
We heavily use NodeJS in our project, and Express is the community most popular web framework.
135
-
It's principle is quite simple: you declare your routes (an urls and an http method) and associate each of them to a function with specific arguments.
136
-
Second concepts: middleware.
137
-
A middleware is a function that behave like Java's filters: it's invoked for each incoming request and can process to it, enrich it and let other process it, or just ignore it.
134
+
We heavily use NodeJS in our project, and Express is the most popular web framework in the community.
135
+
It's principle is quite simple: you declare your routes (an URL and an http method) and associate each of them to a function with specific arguments.
136
+
Second concept: middleware.
137
+
A middleware is a function that behave like Java filters: it's invoked for each incoming request and can process it, enrich it and let other process it, or just ignore it.
138
138
139
139
We wanted to use swagger on existing web services, and enforce the input validation.
140
-
We looked at swagger-node-express the official nodejs plugin provided, but it involved too many code changes, and it does not provide validation.
140
+
We had a look to swagger-node-express the official nodejs plugin provided, but it involved too many code changes, and it does not provide validation.
141
141
And that's how swagger-jack was born.
142
142
143
-
It provides three middleware, which you can enable or not.
143
+
It provides three middlewares, which you can enable or not.
144
144
145
145
{% highlight json %}
146
146
var express = require('express'),
@@ -191,7 +191,7 @@ It provides three middleware, which you can enable or not.
191
191
192
192
Generator takes a general descriptor path (which is totally not constraint: put whatever you need in it), and an array of "resources".
193
193
194
-
The middleware will automatically register to your express application the routes found inside the descriptor, and bound them to the provided controller (it uses the `nickname` attribute to reach your function). In this example, two routes are created:
194
+
The middleware will automatically register in your Express application the routes found in the descriptor, and bind them to the provided controller (it uses the `nickname` attribute to reach your function). In this example, two routes are created:
195
195
196
196
1.`POST /api/user/` to create a user (controller method `create()`)
197
197
2.`GET /api/user/` to list existing users (controller method `list()`)
@@ -203,8 +203,8 @@ You can still register routes and middleware within your application, but they w
203
203
Validator will analyze the declared parameters of your descriptor, and validate the input.
204
204
It will handle parameter casting, range validation and declared model compliance (thank to the excellent [json-gate](https://github.com/oferei/json-gate)).
205
205
206
-
All casted values (except body parameters) are available inside the controller methods with the `req.input` associative array.
207
-
No matter if parameter is from path, query or header: it will be present inside `req.input`.
206
+
All casted values (except body parameters) are available in the controller methods with the `req.input` associative array.
207
+
No matter if a parameter is from path, query or header: it will be present inside `req.input`.
208
208
209
209
But you can still use the Express original function (beware: values are just strings).
210
210
@@ -215,9 +215,9 @@ If you do not need validation, no problem: just remove the validator middleware.
215
215
### Error middleware
216
216
217
217
Validation errors (and your custom business errors) are handled by the error middleware.
218
-
It uses the express's error mecanism: invoke the next() method with an argument.
218
+
It uses the Express's error management mechanism: invoke the next() method with an argument.
219
219
220
-
Weither it's a string or an object, it will be serialized into a json response with an http status (500 by default).
220
+
Wether it's a string or an object, it will be serialized into a json response with an http status (500 by default).
221
221
222
222
For example:
223
223
@@ -274,9 +274,9 @@ Use [js-yaml](http://nodeca.github.com/js-yaml/) to store your descriptor in a s
274
274
<br/>
275
275
## In conclusion
276
276
277
-
Swagger-jack enpowered your NodeJS application with Swagger compliant Api descriptor.
277
+
Swagger-jack enpowered your NodeJS application with Swagger compliant API descriptor.
278
278
279
-
It brings you a better lisibility: first you describe things (even in a separate file thanks to js-yaml), then you implement them.
279
+
It brings you better lisibility: first you describe things (even in a separate file thanks to js-yaml), then you implement them.
280
280
281
281
It respects your own code organization: whether to use a huge file or one file per url is your choice.
282
282
@@ -292,4 +292,4 @@ So, have fun with swagger and swagger-jack !
292
292
### Addendum: what's with that name ?
293
293
294
294
We looked for a fun and yet eloquent name. But swagger.js was already used.
295
-
[Jack Swagger](http://www.wwe.com/superstars/jackswagger) is an american catch superstar, and we never heard about him before, but it perfectly fits your naming goals :)
295
+
[Jack Swagger](http://www.wwe.com/superstars/jackswagger) is an american catch superstar, and we never heard about him before, but it perfectly fits our naming goals :)
0 commit comments