aiorest-ws¶
This library represents as a flexible toolkit for building Web APIs, which based on the Autobahn.ws and asyncio packages. Use the opportunities of WebSockets for communication between clients and servers, build APIs like in popular frameworks (Django REST, Flask, etc.) with enough simplicity, flexibility and transparency. Develop with a pleasure!
Features¶
- Routing
- Views (function and method-based)
- Authentication (using JSON Web Token)
- Customizing behaviour of your application through settings file
- Compressing messages for minimize of transmitted traffic (if your browser support)
- Model serializing for Django and SQLAlchemy ORM
- SSL support
Getting started¶
Client example (JavaScript):
var ws = null;
var isopen = false;
window.onload = function() {
ws = new WebSocket("ws://127.0.0.1:8080");
ws.onopen = function() {
console.log("Connected!");
isopen = true;
};
ws.onmessage = function(e) {
console.log("Result: " + e.data);
};
ws.onclose = function(e) {
console.log("Connection closed.");
ws = null;
isopen = false;
}
};
function sendOnStaticURL() {
if (isopen) {
ws.send(JSON.stringify({'method': 'GET', 'url': '/hello'}));
} else {
console.log("Connection not opened.")
}
}
Client example (Python):
import asyncio
import json
from autobahn.asyncio.websocket import WebSocketClientProtocol, \
WebSocketClientFactory
class HelloClientProtocol(WebSocketClientProtocol):
def onOpen(self):
request = {'method': 'GET', 'url': '/hello'}
self.sendMessage(json.dumps(request).encode('utf8'))
def onMessage(self, payload, isBinary):
message = payload.decode('utf8')
print(message)
if __name__ == '__main__':
factory = WebSocketClientFactory("ws://localhost:8080")
factory.protocol = HelloClientProtocol
loop = asyncio.get_event_loop()
coro = loop.create_connection(factory, '127.0.0.1', 8080)
loop.run_until_complete(coro)
loop.run_forever()
loop.close()
Server example:
from aiorest_ws.app import Application
from aiorest_ws.routers import SimpleRouter
from aiorest_ws.views import MethodBasedView
class HelloWorld(MethodBasedView):
def get(self, request, *args, **kwargs):
return "Hello, world!"
router = SimpleRouter()
router.register('/hello', HelloWorld, 'GET')
if __name__ == '__main__':
app = Application()
app.run(host='127.0.0.1', port=8080, router=router)
Source code¶
The project is hosted on GitHub
Please feel free to open an issue on the bug tracker if you have found a bug or have some suggestions to improve the library. The library uses Travis for Continuous Integration.
Contributing¶
Please read the guideline for contributors before making a Pull Request.
Authors and License¶
The aiorest-ws package is written by Valeryi Savich.
It’s BSD licensed and freely available. For more details read license file.
Contents:¶
- Authentication
- Application usage
- Factories and protocols
- Routing
- Serializers
- Model serializers
- Defining model serializer
- Serializing
- Deserializing
- Saving instances
- Validating
- Accessing the initial data and instance
- Partial instance updates
- Dealing with nested objects
- Writable nested representations
- Dealing with multiple objects
- Including extra context
- ModelSerializer
- HyperlinkedModelSerializer
- ListSerializer
- Model serializers
- Serializer fields
- Core arguments
- Custom fields
- Supported fields
- BigIntegerField
- BooleanField
- CharField
- ChoiceField and EnumField
- DateField
- DateTimeField
- DecimalField
- DictField
- DurationField
- EmailField
- FileField
- FilePathField
- FloatField
- HStoreField
- IPAddressField
- ImageField
- IntegerField
- IntervalField
- JSONField
- LargeBinaryField
- ListField
- ModelField
- MultipleChoiceField
- NullBooleanField
- PickleField
- ReadOnlyField
- RegexField
- SerializerMethodField
- SlugField
- SmallIntegerField
- TimeField
- URLField
- UUIDField
- Serializer relations
- HTTP wrappers
- Views