Last active
August 29, 2015 13:56
-
-
Save alexmic/8997655 to your computer and use it in GitHub Desktop.
Sketch for how I'd like a simple REST service framework to work
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
from swiss import Api | |
from swiss.resources import Resource, Group | |
from swiss.auth import BasicAuth, noauth | |
from swiss.fields import parse, serialize, parselize | |
from swiss.fields import String, Int, Boolean | |
# simple dicts for schemas and serialization | |
schema = { | |
'name': String, | |
'surname': String(maxlen=15), | |
'age': Int | |
} | |
@noauth | |
class Thing(Resource): | |
def get(self, order_id, id): | |
pass | |
class Things(Resource): | |
# allows ad-hoc parameter parsing | |
@parse(pay=Boolean(default=False)) | |
@serialize(schema) | |
def get(self): | |
print self.params # GET, POST, PUT data | |
# parse and serialize with the same schema | |
@parselize(schema) | |
def post(self): | |
return [] | |
def put(self): | |
# if an object can be json.dump'd then no need for a serializer | |
return {} | |
# partial parsing | |
@parse(schema, partial=True) | |
def patch(self): | |
pass | |
def delete(self): | |
pass | |
class GroupedThing(Resource): | |
pass | |
class GroupedThings(Resource): | |
@noauth | |
def get(self): | |
pass | |
# groups allow for cleaner route management | |
group = Group(prefix='/group') | |
group.route('/things', GroupedThings) | |
group.route('/thing/1', GroupedThing) | |
# Api is a WSGI application | |
api = Api() | |
# Simple auth (not sure about this yet..) | |
api.auth(BasicAuth) | |
api.route('/things/', Things) | |
api.route('/things/1', Thing) | |
api.group(group) | |
# or... | |
api.routes( | |
('/things/', Things), | |
('/things/1', Things) | |
) | |
if __name__ == '__main__': | |
api.run() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment