sjiamnocna / nette-apication
Simple & lightweight API with security based on Nette
0.10.2
2023-03-21 11:06 UTC
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
STDIN
ifx-requested-with: XMLHttpRequest
header 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 start
oryarn start
to 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-apication
or addsjiamnocna/nette-apication
to your composer.json and runcomposer install
- Create
temp
andlog
directories for Nette to work - Add service to configuration
app/config/common.neon
services: Application: APIcation\CApplication(%parameters%)
- Create
app/config/local.neon
like 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 be
a performance benefit), but then you're on your own :)
- I suggest you create
- There, create a method
default
(or__default
for secret method) - Access
apidomain.com/api/endpoint
URL
Performance
- Performance is what matters here
- API solution made from basic Nette-app with Presenters and Responses without any API security took over
80ms
,20ms
when cached - This project implements simple security, DI injects into Endpoints and performs around
40ms
,5ms
cached - 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