.. image:: https://github.com/gdoumenc/coworks/raw/dev/docs/img/coworks.png :height: 80px :alt: CoWorks Logo
|Maintenance| |Build Status| |Documentation Status| |Coverage| |Python versions| |Licence|
.. |Maintenance| image:: https://img.shields.io/badge/Maintained%3F-yes-green.svg?style=plastic :alt: Maintenance .. |Build Status| image:: https://img.shields.io/travis/com/gdoumenc/coworks?style=plastic :alt: Build Status .. |Documentation Status| image:: https://readthedocs.org/projects/coworks/badge/?version=master&style=plastic :alt: Documentation Status .. |Coverage| image:: https://img.shields.io/codecov/c/github/gdoumenc/coworks?style=plastic :alt: Codecov .. |Python versions| image:: https://img.shields.io/pypi/pyversions/coworks?style=plastic :alt: Python Versions .. |Licence| image:: https://img.shields.io/github/license/gdoumenc/coworks?style=plastic :alt: Licence
CoWorks is a unified serverless microservices framework based on AWS technologies
(API Gateway <https://aws.amazon.com/api-gateway/>
, AWS Lambda <https://aws.amazon.com/lambda/>
),
the Flask framework (Flask <https://github.com/pallets/flask>
/Click <https://github.com/pallets/click>
) and
the Airflow <https://github.com/apache/airflow>
_ platform.
The aim of this project is to offer a very simplified experience of microservices. For such purpose, we divided the CoWorks framework in two levels:
Small technical microservice
TechMicroservice
are each composed of simple python Flask <https://github.com/pallets/flask>
_ application and deployed as a serverless Lambda. Each TechMicroService
is an atomic component
or atomic microservice <http://resources.fiorano.com/blog/microservices/>
_. These microservices may be called synchronously or asynchronously.
Functional business service
biz
are composite business services <http://resources.fiorano.com/blog/microservices/>
, which are Airflow <https://github.com/apache/airflow>
DAGs providing orchestration of atomic microservices or components (aka: TechMicroService
).
To get started with CoWorks, first follow the Installation Guide <https://coworks.readthedocs.io/en/latest/installation.html>
. Then you can get a quickstart on TechMicroService Quickstart <https://coworks.readthedocs.io/en/latest/tech_quickstart.html>
.
Once familiar with TechMicroService
, you can continue with BizMicroService Quickstart <https://coworks.readthedocs.io/en/latest/biz_quickstart.html>
_.
Data model
The data model shared between those services may be structured with pydantic
and using the JSON:API specification.
You can install this data protocol for CoWorks with: pip install coworks[jsonapi-sqlalchemy].
- Setup and installation:
Installation <https://coworks.readthedocs.io/en/latest/installation.html>
_ - Complete reference guide:
Documentation <https://coworks.readthedocs.io/>
_. - Samples:
- layers : Get available CoWorks lambda layers:
CoWorks layers <https://2kb9hn4bs4.execute-api.eu-west-1.amazonaws.com/v1>
_. - website : Very simple website done as a simple microservice:
Website <https://3jr90vkbe5.execute-api.eu-west-1.amazonaws.com/v1>
_.
- layers : Get available CoWorks lambda layers:
- Read
FAQ <https://coworks.readthedocs.io/en/master/faq.html/>
_ for other information.
We work hard to provide a high-quality and useful framework, and we greatly value
feedback and contributions from our community. Whether it's a new feature,
correction, or additional documentation, we welcome your pull requests. Please
submit any issues <https://github.com/gdoumenc/coworks/issues>
__
or pull requests <https://github.com/gdoumenc/coworks/pulls>
__ through GitHub.
-
Flask <https://github.com/pallets/flask>
_ - Lightweight WSGI web application framework (Donate to Pallets <https://palletsprojects.com/donate>
_). -
Airflow <https://github.com/apache/airflow>
_ - A platform to programmatically author, schedule, and monitor workflows. -
Terraform <https://github.com/hashicorp/terraform>
_ - Infrastructure configuration management tool. -
Pydantic <https://github.com/pydantic/pydantic>
_ - Data validation using Python type hints.
Some ideas guiding this project were found in :
-
Flask-Classy <https://github.com/apiguy/flask-classy>
_ -
PyDANJA <https://github.com/Centurix/pydanja>
_