{"id":14965597,"url":"https://github.com/contributte/apitte-skeleton","last_synced_at":"2025-04-04T21:10:26.717Z","repository":{"id":37888019,"uuid":"100059696","full_name":"contributte/apitte-skeleton","owner":"contributte","description":"🎁  API / REST API / JSON API / PSR-7 / Middlewares project skeleton based on Nette Framework (@nette), Apitte (@apitte), Doctrine (@nettrine) and Contributte (@contributte) libraries by @f3l1x.","archived":false,"fork":false,"pushed_at":"2025-03-04T01:55:23.000Z","size":1876,"stargazers_count":41,"open_issues_count":4,"forks_count":17,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-03-28T20:11:16.537Z","etag":null,"topics":["api","apitte","contributte","nette-framework","nettrine","project","projectte","template"],"latest_commit_sha":null,"homepage":"https://examples.contributte.org/apitte-skeleton/","language":"PHP","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/contributte.png","metadata":{"funding":{"github":["f3l1x"],"custom":["https://contributte.org/partners.html"]},"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,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2017-08-11T18:21:36.000Z","updated_at":"2025-03-04T01:55:24.000Z","dependencies_parsed_at":"2023-09-29T16:41:49.652Z","dependency_job_id":"b2ac7b8c-e273-4fc9-abc8-d8a4f2778b44","html_url":"https://github.com/contributte/apitte-skeleton","commit_stats":{"total_commits":731,"total_committers":16,"mean_commits":45.6875,"dds":0.2653898768809849,"last_synced_commit":"d04f80f147a366689ee481e2bab04ca8a4affef7"},"previous_names":[],"tags_count":0,"template":true,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/contributte%2Fapitte-skeleton","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/contributte%2Fapitte-skeleton/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/contributte%2Fapitte-skeleton/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/contributte%2Fapitte-skeleton/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/contributte","download_url":"https://codeload.github.com/contributte/apitte-skeleton/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247249532,"owners_count":20908212,"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":["api","apitte","contributte","nette-framework","nettrine","project","projectte","template"],"created_at":"2024-09-24T13:34:57.869Z","updated_at":"2025-04-04T21:10:26.699Z","avatar_url":"https://github.com/contributte.png","language":"PHP","funding_links":["https://github.com/sponsors/f3l1x","https://contributte.org/partners.html"],"categories":[],"sub_categories":[],"readme":"![](https://heatbadger.now.sh/github/readme/contributte/apitte-skeleton/)\n\n\u003cp align=center\u003e\n  \u003ca href=\"https://github.com/contributte/apitte-skeleton/actions\"\u003e\u003cimg src=\"https://badgen.net/github/checks/contributte/apitte-skeleton/master\"\u003e\u003c/a\u003e\n  \u003ca href=\"https://coveralls.io/r/contributte/apitte-skeleton\"\u003e\u003cimg src=\"https://badgen.net/coveralls/c/github/contributte/apitte-skeleton\"\u003e\u003c/a\u003e\n  \u003ca href=\"https://packagist.org/packages/contributte/apitte-skeleton\"\u003e\u003cimg src=\"https://badgen.net/packagist/dm/contributte/apitte-skeleton\"\u003e\u003c/a\u003e\n  \u003ca href=\"https://packagist.org/packages/contributte/apitte-skeleton\"\u003e\u003cimg src=\"https://badgen.net/packagist/v/contributte/apitte-skeleton\"\u003e\u003c/a\u003e\n\u003c/p\u003e\n\u003cp align=center\u003e\n  \u003ca href=\"https://packagist.org/packages/contributte/apitte-skeleton\"\u003e\u003cimg src=\"https://badgen.net/packagist/php/contributte/apitte-skeleton\"\u003e\u003c/a\u003e\n  \u003ca href=\"https://github.com/contributte/apitte-skeleton\"\u003e\u003cimg src=\"https://badgen.net/github/license/contributte/apitte-skeleton\"\u003e\u003c/a\u003e\n  \u003ca href=\"https://bit.ly/ctteg\"\u003e\u003cimg src=\"https://badgen.net/badge/support/gitter/cyan\"\u003e\u003c/a\u003e\n  \u003ca href=\"https://bit.ly/cttfo\"\u003e\u003cimg src=\"https://badgen.net/badge/support/forum/yellow\"\u003e\u003c/a\u003e\n  \u003ca href=\"https://contributte.org/partners.html\"\u003e\u003cimg src=\"https://badgen.net/badge/sponsor/donations/F96854\"\u003e\u003c/a\u003e\n\u003c/p\u003e\n\n\u003cp align=center\u003e\nWebsite 🚀 \u003ca href=\"https://contributte.org\"\u003econtributte.org\u003c/a\u003e | Contact 👨🏻‍💻 \u003ca href=\"https://f3l1x.io\"\u003ef3l1x.io\u003c/a\u003e | Twitter 🐦 \u003ca href=\"https://twitter.com/contributte\"\u003e@contributte\u003c/a\u003e\n\u003c/p\u003e\n\n\u003cp align=center\u003e\n    \u003cimg src=\"https://api.microlink.io?url=https%3A%2F%2Fexamples.contributte.org%2Fapitte-skeleton%2F\u0026overlay.browser=light\u0026screenshot=true\u0026meta=false\u0026embed=screenshot.url\"\u003e\u003c/img\u003e\n\u003c/p\u003e\n\n-----\n\n## Goal\n\nMain goal is to provide best prepared API starter-kit project for Nette-Apitte developers.\n\nFocused on:\n\n- PHP 8.2+\n- `nette/*` packages\n- build PSR-7 API via `contributte/apitte`\n- Doctrine ORM via `nettrine/*`\n- Symfony components via `contributte/*`\n- codestyle checking via **CodeSniffer** and `contributte/qa`\n- static analysing via **phpstan** and `contributte/phpstan`\n- unit / integration tests via **Nette Tester** and `contributte/tester`\n\nYou can try it out yourself either by running it with docker, or more easily with docker-compose.\n\n## Demo\n\nhttps://examples.contributte.org/apitte-skeleton/\n\n## Install with [docker](https://github.com/docker/docker/)\n\n1) At first, use composer to install this project.\n\n   ```bash\n   composer create-project -s dev contributte/apitte-skeleton\n   ```\n\n2) After that, you have to setup database.\n\n    1. Setup PostgreSQL 10. You can start it manually or use docker image `dockette/postgres:15`.\n\n       ```bash\n       docker run -it -p 5432:5432 -e POSTGRES_PASSWORD=contributte -e POSTGRES_USER=contributte dockette/postgres:15\n       ```\n\n       Or use make task, `make docker-postgres`.\n\n    2. Setup MariaDB 10.4. You can start it manually or use docker image `mariadb:10.4`.\n\n       ```bash\n       docker run -it -d -p 3306:3306 -e MARIADB_ROOT_PASSWORD=contributte -e MARIADB_PASSWORD=contributte -e MARIADB_USER=contributte -e MARIADB_DATABASE=contributte mariadb:10.4\n       ```\n\n       Or use make task, `make docker-mariadb`.\n\n3) Custom configuration file is located at `config/local.neon`. Edit it if you want.\n\n   Default configuration should look like this. Pick PostgreSQL or MariaDB.\n\n   ```neon\n   # Host Config\n   parameters:\n\n       # Database\n       database:\n\n           # Postgres\n           driver: pdo_pgsql\n           host: database\n           dbname: contributte\n           user: contributte\n           password: contributte\n           port: 5432\n\n           # MariaDB\n           driver: pdo_mysql\n           host: database\n           dbname: contributte\n           user: contributte\n           password: contributte\n           port: 3306\n   ```\n\n4) Ok database is now running and application is configured to connect to it. Let's create initial data.\n\n   Run `NETTE_DEBUG=1 bin/console migrations:migrate` to create tables.\n   Run `NETTE_DEBUG=1 bin/console doctrine:fixtures:load --append` to create first user(s).\n\n   Or via task `make build`.\n\n5) Start your devstack or use PHP local development server.\n\n   You can start PHP server by running `php -S localhost:8000 -t www` or use prepared make task `make dev`.\n\n6) Open http://localhost and enjoy!\n\n   Take a look at:\n    - [GET] http://localhost:8000/api/public/v1/openapi/meta (Swagger format)\n    - [GET] http://localhost:8000/api/v1/users\n    - [GET] http://localhost:8000/api/v1/users?_access_token=admin\n    - [GET] http://localhost:8000/api/v1/users/1?_access_token=admin\n    - [GET] http://localhost:8000/api/v1/users/999?_access_token=admin\n    - [GET] http://localhost:8000/api/v1/users/email?email=admin@admin.cz\u0026_access_token=admin\n    - [GET] http://localhost:8000/api/v1/static/text\n    - [POST] http://localhost:8000/api/v1/users/create\n\n## Install with [docker compose](https://github.com/docker/compose)\n\n1) At first, use composer to install this project.\n\n   ```\n   composer create-project -s dev contributte/apitte-skeleton\n   ```\n\n2) Modify `config/local.neon` and set host to `postgres` or `mariadb`\n\n   Default configuration should look like this. There is preconfigured database. Pick PostgreSQL or MariaDB.\n\n   ```neon\n   # Host Config\n   parameters:\n\n       # Database\n       database:\n\n           # Postgres\n           driver: pdo_pgsql\n           host: database\n           dbname: contributte\n           user: contributte\n           password: contributte\n           port: 5432\n\n           # MariaDB\n           driver: pdo_mysql\n           host: database\n           dbname: contributte\n           user: contributte\n           password: contributte\n           port: 3306\n   ```\n\n3) Run `docker-compose up`\n\n4) Open http://localhost and enjoy!\n\n   Take a look at:\n    - [GET] http://localhost:8000/api/public/v1/openapi/meta (Swagger format)\n    - [GET] http://localhost:8000/api/v1/users\n    - [GET] http://localhost:8000/api/v1/users?_access_token=admin\n    - [GET] http://localhost:8000/api/v1/users/1?_access_token=admin\n    - [GET] http://localhost:8000/api/v1/users/999?_access_token=admin\n    - [GET] http://localhost:8000/api/v1/users/email?email=admin@admin.cz\u0026_access_token=admin\n    - [POST] http://localhost:8000/api/v1/users/create\n    - [GET] http://localhost:8000/api/v1/static/text?_access_token=admin\n    - [GET] http://localhost:8000/api/v1/error/exception?_access_token=admin\n\n## (Optional) REST API documentation\n\nSince we have OpenAPI specification available at `/api/public/v1/openapi/meta` you just need to add UI for it (e.g. to `www/doc` directory or as a standalone application).\n\nAvailable options are:\n\n- [Swagger UI](https://swagger.io/tools/swagger-ui/) + [themes](https://github.com/ostranme/swagger-ui-themes)\n- [ReDoc](https://github.com/Redocly/redoc)\n- other\n\n## Features\n\nHere is a list of all features you can find in this project.\n\n- PHP 8.2+\n- :package: Packages\n    - Nette 3+\n    - Contributte\n- :deciduous_tree: Structure\n    - `app`\n        - `config` - configuration files\n            - `env` - prod/dev/test environments\n            - `app` - application configs\n            - `ext` - extensions configs\n            - `local.neon` - local runtime config\n            - `local.neon.dist` - template for local config\n        - `domain` - business logic and domain specific classes\n        - `model` - application backbone\n        - `module` - API module\n        - `resources` - static content for mails and others\n        - `bootstrap.php` - Nette entrypoint\n    - `bin` - console entrypoint (`bin/console`)\n    - `db` - database files\n        - `fixtures` - PHP fixtures\n        - `migrations` - migrations files\n    - `docs` - documentation\n    - `vae`\n        - `log` - runtime and error logs\n        - `tmp` - temp files and cache\n    - `tests` - test engine and many cases\n        - `tests/cases/E2E` - PhpStorm's requests files (`api.http`)\n        - `tests/cases/Integration`\n        - `tests/cases/Unit`\n    - `vendor` - composer's folder\n    - `www` - public content\n- :exclamation: Tracy\n    - Cool error 500 page\n\n### Composer packages\n\nTake a detailed look :eyes: at each single package.\n\n- [contributte/bootstrap](https://contributte.org/packages/contributte/bootstrap.html)\n- [contributte/di](https://contributte.org/packages/contributte/di.html)\n- [contributte/http](https://contributte.org/packages/contributte/http.html)\n- [contributte/security](https://contributte.org/packages/contributte/security.html)\n- [contributte/utils](https://contributte.org/packages/contributte/utils.html)\n- [contributte/tracy](https://contributte.org/packages/contributte/tracy.html)\n- [contributte/console](https://contributte.org/packages/contributte/console.html)\n- [contributte/neonizer](https://contributte.org/packages/contributte/neonizer.html)\n- [contributte/monolog](https://contributte.org/packages/contributte/monolog.html)\n- [contributte/apitte](https://contributte.org/packages/contributte/apitte.html)\n\n**Doctrine**\n\n- [contributte/doctrine-orm](https://contributte.org/packages/contributte/doctrine-orm.html)\n- [contributte/doctrine-dbal](https://contributte.org/packages/contributte/doctrine-dbal.html)\n- [contributte/doctrine-migrations](https://contributte.org/packages/contributte/doctrine-migrations.html)\n- [contributte/doctrine-fixtures](https://contributte.org/packages/contributte/doctrine-fixtures.html)\n\n**Nette**\n\n- [nette/finder](https://github.com/nette/finder)\n- [nette/robot-loader](https://github.com/nette/robot-loader)\n\n**Symfony**\n\n- [symfony/serializer](https://github.com/symfony/serializer)\n- [symfony/validator](https://github.com/symfony/validator)\n\n## Demo\n\n![](.docs/assets/screenshot1.png)\n![](.docs/assets/screenshot2.png)\n![](.docs/assets/screenshot3.png)\n\n## Development\n\nSee [how to contribute](https://contributte.org/contributing.html) to this package.\n\nThis package is currently maintaining by these authors.\n\n\u003ca href=\"https://github.com/f3l1x\"\u003e\n    \u003cimg width=\"80\" height=\"80\" src=\"https://avatars2.githubusercontent.com/u/538058?v=3\u0026s=80\"\u003e\n\u003c/a\u003e\n\n-----\n\nConsider to [support](https://contributte.org/partners.html) **contributte** development team.\nAlso thank you for using this project.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcontributte%2Fapitte-skeleton","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcontributte%2Fapitte-skeleton","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcontributte%2Fapitte-skeleton/lists"}