Lesson 4 of 16
39. Design File Storage and Sync (Google Drive / Dropbox)

39.3 What are the doors?

3 min read+10 XP

Step 3: API and data model (10 minutes)

POST /v1/files/commit/check { "path": "/Reading list.txt", "block_hashes": ["9f2…", "a71…", ...] } returns: { "missing": ["a71…"], "upload_urls": { "a71…": "https://blocks…?expires=…&sig=…" } } PUT <presigned URL> (client uploads each missing block directly to storage) POST /v1/files/commit { "path": "/Reading list.txt", "base_version": 1, "block_hashes": [...], "size": 1048576 } returns: 200 { "version": 2 } | 409 { "current_version": 2 } (someone else changed it) GET /v1/changes?cursor=… → { "entries": [ {path, version, block_hashes, deleted}, ... ], "cursor": "…" } GET /v1/changes/wait?cursor=… (long-poll: returns when something changes) POST /v1/shares { "path": "/Book club", "with": "ravi@…", "role": "editor" }