// Unsafe! Don't let users decide file paths let filename = try request.parameter(String.self) let file = try File(atPath: "/path/to/" + filename, flags: [.mustCreate]) let written = try request.http.body.output(to: file) return written.transform(to: HTTPResponse(status: .ok)) } — Would normally require fileSize of RAM — Now requires as little as 2KB
Future<HTTPResponse> in // Unsafe! Don't let users decide file paths let filename = try request.parameter(String.self) let file = try File(atPath: "/path/to/" + filename, flags: [.mustCreate]) let base64encoder = Base64Encoder().stream() let written = try request.http.body.stream(to: base64encoder).output(to: file) return written.transform(to: HTTPResponse(status: .ok)) } — Would normally need fileSize * 2.25 RAM — Now only needs as little as 3KB of RAM
2. Frontend dev needs an API and asks the backend dev 3. Backend dev blocks frontend dev 4. Frontend dev is now in "idle" state 5. Backend dev finished API 6. Frontend dev can now continue work
Frontend dev needs an API and asks the backend dev 3. Backend dev starts development 4. Frontend dev hops to the next task 5. Backend dev finished API 6. Frontend dev can continue the previous task
Frontend dev needs an API and asks the manager 3. Manager blocks both frontend and backend devs 4. Backend dev gets the API request from the manager 5. Backend dev starts development. Frontend dev is idle 6. Backend dev finishes his task. Hands it to manager 7. Manager hands the task to the frontend dev 8. Both continue working