aboutsummaryrefslogtreecommitdiff
path: root/docs/api_development_overview.md
diff options
context:
space:
mode:
authorskullY <skullydazed@gmail.com>2020-02-23 22:37:25 -0800
committerskullydazed <skullydazed@users.noreply.github.com>2020-03-05 16:00:10 -0800
commit99850aabcad51dd4a46ee10c0f5349a4266084fe (patch)
treed59c25726ec8aa7209f15329a194f87f195de11d /docs/api_development_overview.md
parent3c98854044066744ad79d8abc27d93951860af6d (diff)
downloadqmk_firmware-99850aabcad51dd4a46ee10c0f5349a4266084fe.tar.gz
qmk_firmware-99850aabcad51dd4a46ee10c0f5349a4266084fe.zip
Add API documentation
Diffstat (limited to 'docs/api_development_overview.md')
-rw-r--r--docs/api_development_overview.md44
1 files changed, 44 insertions, 0 deletions
diff --git a/docs/api_development_overview.md b/docs/api_development_overview.md
new file mode 100644
index 000000000..e55d03410
--- /dev/null
+++ b/docs/api_development_overview.md
@@ -0,0 +1,44 @@
1# QMK Compiler Development Guide
2
3This page attempts to introduce developers to the QMK Compiler. It does not go into nitty gritty details- for that you should read code. What this will give you is a framework to hang your understanding on as you read the code.
4
5# Overview
6
7The QMK Compile API consists of a few movings parts:
8
9![Architecture Diagram](https://raw.githubusercontent.com/qmk/qmk_api/master/docs/architecture.svg)
10
11API Clients interact exclusively with the API service. This is where they submit jobs, check status, and download results. The API service inserts compile jobs into [Redis Queue](https://python-rq.org) and checks both RQ and S3 for the results of those jobs.
12
13Workers fetch new compile jobs from RQ, compile them, and then upload the source and the binary to an S3 compatible storage engine.
14
15# Workers
16
17QMK Compiler Workers are responsible for doing the actual building. When a worker pulls a job from RQ it does several things to complete that job:
18
19* Make a fresh qmk_firmware checkout
20* Use the supplied layers and keyboard metadata to build a `keymap.c`
21* Build the firmware
22* Zip a copy of the source
23* Upload the firmware, source zip, and a metadata file to S3.
24* Report the status of the job to RQ
25
26# API Service
27
28The API service is a relatively simple Flask application. There are a few main views you should understand.
29
30## @app.route('/v1/compile', methods=['POST'])
31
32This is the main entrypoint for the API. A client's interaction starts here. The client POST's a JSON document describing their keyboard, and the API does some (very) basic validation of that JSON before submitting the compile job.
33
34## @app.route('/v1/compile/&lt;string:job_id&gt;', methods=['GET'])
35
36This is the most frequently called endpoint. It pulls the job details from redis, if they're still available, or the cached job details on S3 if they're not.
37
38## @app.route('/v1/compile/&lt;string:job_id&gt;/download', methods=['GET'])
39
40This method allows users to download the compiled firmware file.
41
42## @app.route('/v1/compile/&lt;string:job_id&gt;/source', methods=['GET'])
43
44This method allows users to download the source for their firmware.