sjiamnocna / nette-apication
Simple & lightweight API with security based on Nette
Installs: 54
Dependents: 0
Suggesters: 0
Security: 0
Stars: 0
Forks: 0
pkg:composer/sjiamnocna/nette-apication
Requires
- php: >=8.1.0
- ext-json: *
- nette/di: ^3.0
- nette/http: ^3.1
- nette/neon: ^3.2
- nette/nette: ^3.1
- nette/utils: ^3.2
README
Welcome to a little experiment over Nette Framework.
Its aim is to reduce the serverload while using Nette as API. <br/> Nette is great and complex thing. So is APItte and other API tools.
This project don't solve every possible API.<br/> It's very simple, minimalistic and lightweight (by design).
- replaces Nette\Application
- gets rid of unnecessary preloaded Nette stuff to improve performance
- presenters (turned into Endpoints)
- router (simplified and merged with Request)
- some other unnecessary autoloaded things in the container
- DI Services are created on-demand for each Endpoint
- Automatically processes data from JS/Fetch API, that came via
STDINifx-requested-with: XMLHttpRequestheader is present - Use Tracy to display error over XHR/Fetch requests
- Introduces minimalistic AJAX API security
- Using git@gitlab.com:sjiamnocna/renette.git as frontend you can simplify React + Nette integration
- if you clone this repo into
server/directory within the project, you can usenpm startoryarn startto run React (Node) and PHP dev server (DEV only, don\'t use on public) - more features coming
- if you clone this repo into
- If you dont like anything, feel free to override
Dont get me wrong, I love Nette!
Nette, Latte etc. are great. It's IMHO just not efficient enough for modern "API" world
Usage
- Do
composer require sjiamnocna/nette-apicationor addsjiamnocna/nette-apicationto your composer.json and runcomposer install - Create
tempandlogdirectories for Nette to work - Add service to configuration
app/config/common.neonservices: Application: APIcation\CApplication(%parameters%) - Create
app/config/local.neonlike this (don't ever add to GIT!!!);parameters: service: # used for service authentication service: privatekey #...other param
Start both server and local React app (CRA) using yarn start from the root directory (the one above server/)
OR use Makefile: make run to run local PHP server
Use CLIRunner to run commands in CLI, eg. CRON or maintenance
- Create class implementing I**
Code
- Create your Endpoint class starting with 'E' (like
EEndpoint) that inherits from CAbstractEndpoint.- I suggest you create
src/Endpoints/directory for your Endpoints - Feel free to override public method
run()that runs anytime the Endpoint is called if you find out you need to (be or not to bea performance benefit), but then you're on your own :)
- I suggest you create
- There, create a method
default(or__defaultfor secret method) - Access
apidomain.com/api/endpointURL
Performance
- Performance is what matters here
- API solution made from basic Nette-app with Presenters and Responses without any API security took over
80ms,20mswhen cached - This project implements simple security, DI injects into Endpoints and performs around
40ms,5mscached - Measured by Tracy - when debug mode is off I guess the app will perform even better
- API solution made from basic Nette-app with Presenters and Responses without any API security took over
Example
- See git@gitlab:sjiamnocna/renette for React + Nette