wapi v1.0.41
WAPI
WAPI is a middleware for connect/express that make the common tasks in an API easier.
Setup
var express = require('express');
var wapi = require('wapi');
var port = process.env.PORT || 3004;
var app = express();
var api = {
getUsers:function(){
//...
},
postContact:function(req){
//...
}
}
app.use(wapi(api, optionalOptions));
app.listen(port,function(){
console.log(port);
})Options (optional)
| Option | Detail | Default Value |
|---|---|---|
| prefix | Is the prefix path for all the API calls | "/api/v1" |
Endpoints
Every method of the API object is related to an URL. For example: getUsers() will
receive all the GET HTTP requests to the /api/v1/users endpoint.
Every method has to return a Promise.
var api = {
getUsers:function(req){
return db.users.find();
},
postUsers:function(req){
// ...
},
putUsers:function(req){
// ...
},
deleteUsers:function(req){
// ...
},
}
app.use(wapi(api));req
Every API endpoint receive selected data from the request.
| Config | Detail |
|---|---|
| resourceName | /api/v1/{resourceName} |
| baseURL | base url of the endpoint |
| id | /api/v1/{resourceName}/{id} |
| body / payload | The body from a POST/PUT request for JSON and multipart |
| query / options | Query string params |
| files | The files sent from a multipart request |
| access_token | Bearer 1234 authorization header or /api/v1/user/?access_token=1234 |
| headers | HTTP headers |
IMPORTANT: In order to client connect with the server correctly, set BASE_URL
environment variable in the server. Example: http://api.myserver.com/
Otherwise, WAPI server will try to resolve this value but with certain risk of mistake.
Client Side - Angular
<body ng-app="ngWapi" ng-cloak="waaws">
<!-- Your code -->
<script src="//ajax.googleapis.com/ajax/libs/angularjs/1.5.8/angular.min.js"></script>
<script type="text/javascript" src="//myapi.com/browser/ng-wapi.js"></script>
</body>PST! If the app is already an Angular application just call ng-wapi.js and
set the ngWapi module as dependency of your app.
// example
angular.module('myApp',['ngWapi']);Tips
- Avoid
{{var}}to print text, useng-bindinstead. This prevent the blink effect when variables doesn't exist yet.
Root Scope vars
This variables are available in all the ngWapi scope
| Var | Type | Detail |
|---|---|---|
| wLocation | Object | Current URL representation |
Forms
In order to connect a form to an endpoint of the API
- Setup the
w-formdirective with the endpoint name as the value (eg:users,contact) - Place the
ng-submitlistener and call thesubmit()method - Set all the input that you wanna send with
ng-model="data.fieldName" - Use
ng-showto showsending,submittedorfailstates - Use on-response-redirect attribute if want to redirect when submit finished. It is an expression so, it can access to the scope.
- Add
fileattribute to create attach files buttons (dropzone) and use thenameattribute.
- In order to customize the preview of the files overwrite this CSS classes:
.dz-preview.dz-image.dz-details.dz-progress.dz-error-message.dz-success-mark.dz-error-mark
Scope vars
| Var | Type | Detail |
|---|---|---|
| data | Object | Data to be submitted |
| submitting / sending | Boolean | form is posting |
| submitted / success | Boolean | the request is complete and no errors present |
| response | Object | the response of the request |
| redirecting | Boolean | when is redirecting |
| fail | Boolean | Query string params |
| submit | function | Function to be called in order to init the form post |
Attributes
| Attribute | Type | Detail |
|---|---|---|
| w-form | String | Start the directive and set the name of the endpoint to post |
| on-response-redirect | Expression | URL to be redirected after post |
| redirect-delay | Number | Milliseconds to wait before redirect |
<form w-form="contact" ng-submit="submit()" on-response-redirect="'/ok'">
<fieldset>
<input type="text" ng-model="data.email" value="test@test.com" />
<button>Enviar</button>
</fieldset>
<fieldset>
<button type="button" file name="cv">CV</button>
<div file name="picture">Pic</div>
</fieldset>
<div ng-show="sending">
Enviando
</div>
<div ng-show="submitted">
Great
</div>
<div ng-show="fail">
:(
</div>
<!-- Also, we have the server response in a 'response' object -->
<div>
{{response}}
</div>
</form>Get a resource
Scope vars
| Var | Type | Detail |
|---|---|---|
| data | Object | Data received from the endpoint |
| Attributes | Type | Detail |
|---|---|---|
| w-get | String | Start the directive and set the path of the endpoint to be called |
<div w-get="'/products/' + wLocation.id">
<label>Product name</label>
<div>
{{data.name}}
</div>
</div>Client side - Vanilla
...
<script type="text/javascript" src="//apihost/browser/index.js"></script>
<script type="text/javascript">
console.log(wapi);
</script>
</body>Forms
It use the .wapi-form-wrapper .wapi-form .wapi-form-done .wapi-form-fail
classes to work
IMPORTANT: data-form-name attribute is necesary in the wrapper
<!-- HTML Structure - Look the classes !! and the data-form-name attribute -->
<div class="wapi-form-wrapper" data-form-name="contact">
<form class="wapi-form">
<input type="text" name="email" value="test@test.com" />
<button>Enviar</button>
</form>
<div class="wapi-form-done">
Great
</div>
<div class="wapi-form-fail">
:(
</div>
</div>
...
<script type="text/javascript" src="//myapi.com/browser/index.js"></script>
<script>
wapi.autoInitForms();
</script>
</body>9 years ago
9 years ago
9 years ago
9 years ago
9 years ago
9 years ago
9 years ago
9 years ago
9 years ago
9 years ago
9 years ago
9 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago