Added Cache-Control rules for existing APIs.

This commit is contained in:
flash 2025-04-12 20:32:43 +00:00
parent d15e074674
commit 4b4ae1c820
Signed by: flash
GPG key ID: 2C9C2C574D47FE3E
4 changed files with 17 additions and 7 deletions

View file

@ -1 +1 @@
20250411.1 20250412

View file

@ -51,11 +51,13 @@ final class ColoursApiRoutes implements RouteHandler {
/** @return int|mixed[] */ /** @return int|mixed[] */
#[AccessControl] #[AccessControl]
#[ExactRoute('GET', '/api/v1/colours/presets')] #[ExactRoute('GET', '/api/v1/colours/presets')]
public function getPresets(HttpRequest $request): array|int { public function getPresets(HttpResponseBuilder $response, HttpRequest $request): array|int {
$transformer = $this->createPresetTransformer(); $transformer = $this->createPresetTransformer();
if(!$transformer->filter($request)) if(!$transformer->filter($request))
return 400; return 400;
$response->setCacheControl('max-age=3600', 'stale-if-error=86400', 'public', 'immutable');
return XArray::select( return XArray::select(
$this->coloursCtx->presets->getPresets(), $this->coloursCtx->presets->getPresets(),
fn($preset) => $transformer->convert($preset), fn($preset) => $transformer->convert($preset),
@ -65,7 +67,7 @@ final class ColoursApiRoutes implements RouteHandler {
/** @return int|mixed[] */ /** @return int|mixed[] */
#[AccessControl] #[AccessControl]
#[PatternRoute('GET', '/api/v1/colours/presets/([A-Za-z0-9\-_]+)')] #[PatternRoute('GET', '/api/v1/colours/presets/([A-Za-z0-9\-_]+)')]
public function getPreset(HttpRequest $request, string $name): array|int { public function getPreset(HttpResponseBuilder $response, HttpRequest $request, string $name): array|int {
if(empty($name)) if(empty($name))
return 404; return 404;
@ -73,6 +75,8 @@ final class ColoursApiRoutes implements RouteHandler {
if(!$transformer->filter($request)) if(!$transformer->filter($request))
return 400; return 400;
$response->setCacheControl('max-age=3600', 'stale-if-error=86400', 'public', 'immutable');
try { try {
$preset = $this->coloursCtx->presets->getPreset( $preset = $this->coloursCtx->presets->getPreset(
$name, $name,

View file

@ -48,11 +48,13 @@ final class EmotesApiRoutes implements RouteHandler {
/** @return int|mixed[] */ /** @return int|mixed[] */
#[AccessControl] #[AccessControl]
#[ExactRoute('GET', '/api/v1/emotes')] #[ExactRoute('GET', '/api/v1/emotes')]
public function getEmotes(HttpRequest $request): array|int { public function getEmotes(HttpResponseBuilder $response, HttpRequest $request): array|int {
$transformer = $this->createEmoteTransformer(); $transformer = $this->createEmoteTransformer();
if(!$transformer->filter($request)) if(!$transformer->filter($request))
return 400; return 400;
$response->setCacheControl('max-age=3600', 'stale-if-error=86400', 'public', 'immutable');
return XArray::select( return XArray::select(
$this->emotesCtx->emotes->getEmotes(orderBy: 'order'), $this->emotesCtx->emotes->getEmotes(orderBy: 'order'),
fn($emote) => $transformer->convert($emote), fn($emote) => $transformer->convert($emote),
@ -62,7 +64,7 @@ final class EmotesApiRoutes implements RouteHandler {
/** @return int|mixed[] */ /** @return int|mixed[] */
#[AccessControl] #[AccessControl]
#[PatternRoute('GET', '/api/v1/emotes/([0-9]+)')] #[PatternRoute('GET', '/api/v1/emotes/([0-9]+)')]
public function getEmote(HttpRequest $request, string $id): array|int { public function getEmote(HttpResponseBuilder $response, HttpRequest $request, string $id): array|int {
if(empty($id)) if(empty($id))
return 404; return 404;
@ -76,6 +78,8 @@ final class EmotesApiRoutes implements RouteHandler {
return 404; return 404;
} }
$response->setCacheControl('max-age=3600', 'stale-if-error=86400', 'public', 'immutable');
return $transformer->convert($emote); return $transformer->convert($emote);
} }
@ -95,7 +99,7 @@ final class EmotesApiRoutes implements RouteHandler {
/** @return int|mixed[] */ /** @return int|mixed[] */
#[AccessControl] #[AccessControl]
#[PatternRoute('GET', '/api/v1/emotes/([0-9]+)/strings')] #[PatternRoute('GET', '/api/v1/emotes/([0-9]+)/strings')]
public function getEmoteStrings(HttpRequest $request, string $id): array|int { public function getEmoteStrings(HttpResponseBuilder $response, HttpRequest $request, string $id): array|int {
if(empty($id)) if(empty($id))
return 404; return 404;
@ -109,6 +113,8 @@ final class EmotesApiRoutes implements RouteHandler {
return 404; return 404;
} }
$response->setCacheControl('max-age=3600', 'stale-if-error=86400', 'public', 'immutable');
return XArray::select( return XArray::select(
$this->emotesCtx->emotes->getEmoteStrings($emote), $this->emotesCtx->emotes->getEmoteStrings($emote),
fn($emote) => $transformer->convert($emote), fn($emote) => $transformer->convert($emote),

View file

@ -132,7 +132,7 @@ final class UsersApiRoutes implements RouteHandler {
#[Before('authz:bearer', required: false)] #[Before('authz:bearer', required: false)]
#[Before('authz:misuzu', required: false)] #[Before('authz:misuzu', required: false)]
public function getMe(HttpResponseBuilder $response, HttpRequest $request): int|array { public function getMe(HttpResponseBuilder $response, HttpRequest $request): int|array {
$response->setHeader('Cache-Control', 'no-store'); $response->setCacheControl('no-store');
$openid = $this->authInfo->hasScope('openid'); $openid = $this->authInfo->hasScope('openid');
if(!$openid if(!$openid