{"id":17867156,"url":"https://github.com/caarmen/notes","last_synced_at":"2026-04-09T23:03:12.391Z","repository":{"id":200401435,"uuid":"701809548","full_name":"caarmen/notes","owner":"caarmen","description":"Explorations of different Python REST frameworks","archived":false,"fork":false,"pushed_at":"2023-11-21T21:09:55.000Z","size":51,"stargazers_count":1,"open_issues_count":0,"forks_count":1,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-02-08T12:31:02.946Z","etag":null,"topics":["alembic","crud-sample","django-rest-framework","drf","fastapi","flask","python","rest","sqlalchemy","vanilla-python"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/caarmen.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null}},"created_at":"2023-10-07T16:12:05.000Z","updated_at":"2024-01-19T15:29:00.000Z","dependencies_parsed_at":"2023-10-23T21:44:56.876Z","dependency_job_id":null,"html_url":"https://github.com/caarmen/notes","commit_stats":null,"previous_names":["caarmen/notes"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/caarmen%2Fnotes","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/caarmen%2Fnotes/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/caarmen%2Fnotes/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/caarmen%2Fnotes/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/caarmen","download_url":"https://codeload.github.com/caarmen/notes/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":246899668,"owners_count":20851898,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["alembic","crud-sample","django-rest-framework","drf","fastapi","flask","python","rest","sqlalchemy","vanilla-python"],"created_at":"2024-10-28T09:44:38.677Z","updated_at":"2026-04-09T23:03:07.345Z","avatar_url":"https://github.com/caarmen.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Simple CRUD REST implementation\n\nThe purpose of this project is to explore different implementations of a REST server providing CRUD operations on \"notes\".\n\nThe notes have the following attributes:\n* `id`: auto-increment primary key.\n* `text`: a string.\n* `created_at`: datetime automatically set when a note is created.\n* `updated_at`: datetime automatically set when a note is updated.\n\nThe data is stored in an SQLite database.\n\nThe server provides the following REST routes:\n* Create a note: `POST /notes/`\n* List notes: `GET /notes/`\n* Get a note: `GET /notes/\u003cnote id\u003e/`\n* Update a note: `PUT /notes/\u003cnote id\u003e/`\n* Delete a note: `DELETE /notes/\u003cnote id\u003e/`\n\n## Implementations\nCurrently implementations are included for:\n* FastAPI\n* Flask\n* Django REST Framework\n* Vanilla (only python standard library, no external dependencies)\n\nThe goal is to be able to compare the different frameworks and learn about their trade-offs.\n\n## Running\n\n\nIn each of the implementations, the server can be run as follows:\n\nChange directory into the implementation folder. For example, for fastapi:\n```\ncd fastapi\n```\n\n\nRun the server with `./scripts/run.sh`.\n\nThen, you can use the server:\n\n\n*Create a note*:\n```\ncurl -X POST -H \"content-type: application/json\"  localhost:8000/notes/ -d '{\"text\": \"some note text\"} '\n```\n\n*List all notes*:\n```\ncurl localhost:8000/notes/\n```\n\n*Read a note with id 1*:\n```\ncurl localhost:8000/notes/1/\n```\n\n*Modify the note with id 1*:\n```\ncurl -X PUT -H \"content-type: application/json\"  localhost:8000/notes/1/ -d '{\"text\": \"some note text\"} '\n```\n\n*Delete the note with id 1*:\n```\ncurl -X DELETE localhost:8000/notes/1/\n```\n\n## Api documentation\nThe api documentation is available for all implementations:\n* Openapi json: http://0.0.0.0:8000/openapi.json\n* Swagger ui: http://0.0.0.0:8000/docs\n* Redoc: http://0.0.0.0:8000/redoc\n\n## Limitations\n* No user account management is implemented. Any client can modify and read all the notes.\n* The project isn't currently Dockerized.\n* No work has been done for deploying the servers in a production environment.\n* The project structures may not be scalable. The goal of this project is to discover and compare some REST frameworks at an introductory level, not necessarily to demonstrate an architecture of a complex application.\n\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcaarmen%2Fnotes","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcaarmen%2Fnotes","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcaarmen%2Fnotes/lists"}