Since our handler function is so simple, let's take a look at the application code to see what exactly is going on. Our coffee cupping API is fairly simple and only handles a single resource type at this point, a coffee cupping session object. Before moving forward, it's helpful to take a look at the shape of this resource type:
Much of the logic of this application is simply the transformation back and forth between JSON and database records. The actual application code isn't that important in the context of this book. If you'd like to learn more about the actual implementation, I encourage you to view the source code at https://github.com/brianz/serverless-design-patterns.
The logic in handler.py will delegate the API requests to the cupping/handlers/session.py file, which you can see in the following code. The purpose here is to service requests for a particular URL pattern (which is /session, /session/{id}) and particular HTTP verb (that is, GET, POST, DELETE) and execute the appropriate application code:
from schematics.exceptions import DataError
from .decorators import decode_json from .helpers import ( create_session_from_json_payload, prettify_schematics_errors, )
from ..models import ( CuppingModel, SessionModel, ) from ..persistence import Session, queries from ..exceptions import Http404, InvalidInputData
def get_sessions(data): sessions = queries.get_sessions() models = [SessionModel.from_row(s) for s in queries.get_sessions()] return {'sessions': [m.to_native() for m in models]}
@decode_json def create_session(json_payload): if not json_payload or not hasattr(json_payload, 'get'): return {'errors': ['Invalid input data']}