@@ -17,6 +17,9 @@ consider package version as unsupported except last version.
1717
1818## Usage
1919
20+ - [ Api client] ( #api-client-service )
21+ - [ Api server] ( #api-server-controller-tools )
22+
2023### Api client service
2124
2225Api client require guzzle client, psr client interface is not good enough because absence of async request.
@@ -84,3 +87,83 @@ catch (\SimpleAsFuck\ApiToolkit\Model\Client\ApiException $exception) {
8487}
8588
8689```
90+
91+ ### Api server controller tools
92+
93+ For request handling is prepared Validator and Response factories.
94+ More information about validation rules you can find in
95+ [ Simple as fuck / Php Validator] ( https://github.com/simple-as-fuck/php-validator ) readme.
96+
97+ If you using symfony request and responses, you can use factories from different namespace, commented in example.
98+
99+ ``` php
100+
101+ // star of your action
102+
103+ $rules = \SimpleAsFuck\ApiToolkit\Factory\Server\Validator::make($request);
104+ //$rules = \SimpleAsFuck\ApiToolkit\Factory\Symfony\Validator::make($request);
105+
106+ // validate some query parameter
107+ $someQueryValidValue = $rules->query()->key('someKey')->string()->parseInt()->min(1)->notNull();
108+
109+ // validate something from request body with json format
110+ $someJsonValidValue = $rules->json()->object()->property('someProperty')->string()->notEmpty()->max(255)->notNull();
111+
112+
113+
114+ // end fo your action
115+
116+ /**
117+ * @var YourClass $yourModelForResponseBody
118+ * @var \SimpleAsFuck\ApiToolkit\Service\Transformation\Transformer<YourClass > $transformer
119+ */
120+
121+ // response with one object
122+ $response = \SimpleAsFuck\ApiToolkit\Factory\Server\ResponseFactory::makeJson($yourModelForResponseBody, $transformer, \Kayex\HttpCodes::HTTP_OK);
123+ //$response = \SimpleAsFuck\ApiToolkit\Factory\Symfony\ResponseFactory::makeJson($yourModelForResponseBody, $transformer, \Kayex\HttpCodes::HTTP_OK);
124+
125+ // response with some array or collection (avoiding out of memory problem recommended some lazy loading iterator)
126+ $response = \SimpleAsFuck\ApiToolkit\Factory\Server\ResponseFactory::makeJsonStream(new \ArrayIterator([$yourModelForResponseBody]), $transformer);
127+ //$response = \SimpleAsFuck\ApiToolkit\Factory\Symfony\ResponseFactory::makeJsonStream(new \ArrayIterator([$yourModelForResponseBody]), $transformer);
128+
129+ ```
130+
131+ ### Api server middleware tools
132+
133+ If anything go wrong you can use Exception transformers in your exception catching middleware or in some exception handler.
134+
135+ For laravel is prepared Laravel config adapter which load automatically configuration for ExceptionTransformer,
136+ you can easily get this transformer from DI, without any new configuration (standard configuration from Laravel is used).
137+
138+ ``` php
139+
140+ /**
141+ * @var \SimpleAsFuck\ApiToolkit\Service\Config\Repository $configRepository
142+ */
143+
144+ try {
145+ // some breakable logic
146+ }
147+ catch(\SimpleAsFuck\ApiToolkit\Model\Server\ApiException $exception) {
148+ //catch(\Symfony\Component\HttpKernel\Exception\HttpException $exception) {
149+ $response = \SimpleAsFuck\ApiToolkit\Factory\Server\ResponseFactory::makeJson(
150+ //$response = \SimpleAsFuck\ApiToolkit\Factory\Symfony\ResponseFactory::makeJson(
151+ $exception,
152+ // transformer will convert exception in to json object with message property with original exception message
153+ new \SimpleAsFuck\ApiToolkit\Service\Server\ApiExceptionTransformer(),
154+ $exception->getStatusCode()
155+ );
156+ }
157+ catch (\Throwable $exception) {
158+ $response = \SimpleAsFuck\ApiToolkit\Factory\Server\ResponseFactory::makeJson(
159+ //$response = \SimpleAsFuck\ApiToolkit\Factory\Symfony\ResponseFactory::makeJson(
160+ $exception,
161+ // transformer will convert exception in to json object with message property
162+ // if application has turned off debug, message property contain only "Internal server error"
163+ // but with enabled debug message contains exception type, message, file and line where was exception thrown
164+ new \SimpleAsFuck\ApiToolkit\Service\Server\ExceptionTransformer($configRepository),
165+ \Kayex\HttpCodes::HTTP_INTERNAL_SERVER_ERROR
166+ );
167+ }
168+
169+ ```
0 commit comments