aboutsummaryrefslogtreecommitdiff
path: root/lib/classes/JsonApi/Contracts/JsonApiPlugin.php
blob: 8821682083a60abf56e77129d6ed18250ac651ce (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
<?php

namespace JsonApi\Contracts;

/**
 * Stud.IP-Plugins, die dieses Interface implementieren, können
 * JSON-API-Routen zu Verfügung stellen.
 */
interface JsonApiPlugin
{
    /**
     * In dieser Methode können Plugins eigene autorisierte Routen
     * eintragen lassen.
     *
     * Dazu müssen am übergebenen \Slim\Routing\RouteCollectorProxy-Objekt die Methoden
     * \Slim\Routing\RouteCollectorProxy::get, \Slim\Routing\RouteCollectorProxy::post,
     * \Slim\Routing\RouteCollectorProxy::put, \Slim\Routing\RouteCollectorProxy::delete
     * oder \Slim\Routing\RouteCollectorProxy::patch aufgerufen werden.
     *
     * Beispiel:
     *     class Blubber ... implements JsonApiPlugin
     *     {
     *         public function registerAuthenticatedRoutes(\Slim\Routing\RouteCollectorProxy $group)
     *         {
     *             $group->get('/blubbers', BlubbersIndex::class);
     *         }
     *         [...]
     *     }
     *
     * @param \Slim\Routing\RouteCollectorProxy $group die Slim-Applikation, in der das Plugin
     *                       Routen eintragen möchte
     *
     * @return void
     */
    public function registerAuthenticatedRoutes(\Slim\Routing\RouteCollectorProxy $group);

    /**
     * In dieser Methode können Plugins eigene Routen ohne Autorisierung
     * eintragen lassen.
     *
     * Dazu müssen am übergebenen \Slim\Routing\RouteCollectorProxy-Objekt die Methoden
     * \Slim\Routing\RouteCollectorProxy::get, \Slim\Routing\RouteCollectorProxy::post,
     * \Slim\Routing\RouteCollectorProxy::put, \Slim\Routing\RouteCollectorProxy::delete
     * oder \Slim\Routing\RouteCollectorProxy::patch aufgerufen werden.
     *
     * Beispiel:
     *     class Blubber ... implements JsonApiPlugin
     *     {
     *         public function registerUnauthenticatedRoutes(\Slim\Routing\RouteCollectorProxy $group)
     *         {
     *             $group->get('/blubbers', BlubbersIndex::class);
     *         }
     *         [...]
     *     }
     *
     * @param \Slim\Routing\RouteCollectorProxy $group die Slim-Applikation, in der das Plugin
     *                       Routen eintragen möchte
     *
     * @return void
     */
    public function registerUnauthenticatedRoutes(\Slim\Routing\RouteCollectorProxy $group);

    /**
     * In dieser Methode können Plugins Schemata den verwendeten
     * Model-Klassen (also in der Regel SORM-Klassen) zuordnen.
     *
     * Wenn man in einer JSON-API-Route (als zum Beispiel einem
     * Unterklasse von \JsonApi\JsonApiController), Models
     * zurückgeben möchte, müssen für diese Models Schemata hinterlegt
     * worden sein.
     *
     * Beispiel:
     *     class Blubber ... implements JsonApiPlugin
     *     {
     *         public function registerSchema()
     *         {
     *             return [
     *                \BlubberPosting::class => \BlubberPostingSchema::class
     *             ];
     *         }
     *         [...]
     *     }
     *
     * @return array ein Array von Zuordnungen von Model-Klassennamen
     *               zu den entsprechenden Schema-Klassennamen
     */
    public function registerSchemas(): array;
}