Download - Symfony ile Gelişmiş API Mimarisi
![Page 1: Symfony ile Gelişmiş API Mimarisi](https://reader031.vdocuments.net/reader031/viewer/2022031910/58ea6b861a28ab4d578b587b/html5/thumbnails/1.jpg)
Symfony ile Gelişmiş API Mimarisi
![Page 2: Symfony ile Gelişmiş API Mimarisi](https://reader031.vdocuments.net/reader031/viewer/2022031910/58ea6b861a28ab4d578b587b/html5/thumbnails/2.jpg)
Behram ÇELEN
Software Developer
github.com/behramcelen
twitter.com/behramcelen
![Page 3: Symfony ile Gelişmiş API Mimarisi](https://reader031.vdocuments.net/reader031/viewer/2022031910/58ea6b861a28ab4d578b587b/html5/thumbnails/3.jpg)
API
● Application Programming Interface
● REST
● Facebook/Twitter.. API
● Postman
● Swagger
● RESTful API
● JSON and XML
● Versioning
![Page 4: Symfony ile Gelişmiş API Mimarisi](https://reader031.vdocuments.net/reader031/viewer/2022031910/58ea6b861a28ab4d578b587b/html5/thumbnails/4.jpg)
Symfony Bundles
● FOSRestBundle
● NelmioApiDocBundle
https://github.com/FriendsOfSymfony/FOSRestBundlehttps://github.com/nelmio/NelmioApiDocBundle
![Page 5: Symfony ile Gelişmiş API Mimarisi](https://reader031.vdocuments.net/reader031/viewer/2022031910/58ea6b861a28ab4d578b587b/html5/thumbnails/5.jpg)
API Methods
● GET
● POST
● PUT
● PATCH
● DELETE
https://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html
![Page 6: Symfony ile Gelişmiş API Mimarisi](https://reader031.vdocuments.net/reader031/viewer/2022031910/58ea6b861a28ab4d578b587b/html5/thumbnails/6.jpg)
GET
● Değişikliğe neden olmamalı
● Cache Kullanılabilir
● Resource veya Resource Collection dönmeli
● Offset ve Limit olmalı (Collection için)
https://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html#sec9.3
![Page 7: Symfony ile Gelişmiş API Mimarisi](https://reader031.vdocuments.net/reader031/viewer/2022031910/58ea6b861a28ab4d578b587b/html5/thumbnails/7.jpg)
POST
● Resource create
● Validation
● Hata veya resource location dönmeli
https://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html#sec9.5
![Page 8: Symfony ile Gelişmiş API Mimarisi](https://reader031.vdocuments.net/reader031/viewer/2022031910/58ea6b861a28ab4d578b587b/html5/thumbnails/8.jpg)
PUT
● Create resource if not exists
● Validation
● Eğer resource varsa güncellemeli
● Yoksa resource u oluşturmalı
https://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html#sec9.6
![Page 9: Symfony ile Gelişmiş API Mimarisi](https://reader031.vdocuments.net/reader031/viewer/2022031910/58ea6b861a28ab4d578b587b/html5/thumbnails/9.jpg)
PATCH
● Resource yoksa 404 dönmeli
● Validation
● Resource un belirli fieldları güncellenebilir
https://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html#sec9.6
![Page 10: Symfony ile Gelişmiş API Mimarisi](https://reader031.vdocuments.net/reader031/viewer/2022031910/58ea6b861a28ab4d578b587b/html5/thumbnails/10.jpg)
DELETE● Resource yoksa 404
dönmeli
● Resource varsa silinmeli
● NULL content dönmeli
https://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html#sec9.7
![Page 11: Symfony ile Gelişmiş API Mimarisi](https://reader031.vdocuments.net/reader031/viewer/2022031910/58ea6b861a28ab4d578b587b/html5/thumbnails/11.jpg)
FOSRestBundle● Kurulum
● JMSSerializerBundle
● Handlers
● Routing
http://symfony.com/doc/master/bundles/FOSRestBundle/1-setting_up_the_bundle.htmlhttp://jmsyst.com/libs/serializerhttps://github.com/ojs/ojs/tree/master/src/Ojs/ApiBundle/Handlerhttps://github.com/ojs/ojs/blob/master/src/Ojs/ApiBundle/Resources/config/routing_rest.yml
![Page 12: Symfony ile Gelişmiş API Mimarisi](https://reader031.vdocuments.net/reader031/viewer/2022031910/58ea6b861a28ab4d578b587b/html5/thumbnails/12.jpg)
NelmioApiDocBundle
● Swagger Doc Support
● View Layer
● Annotation
● Commands
● HTML, Markdown, JSON do dump
● Sandbox Supporthttps://github.com/nelmio/NelmioApiDocBundle/blob/master/Resources/doc/index.rsthttps://github.com/ojs/ojs/blob/master/src/Ojs/ApiBundle/Controller/Journal/JournalArticleAuthorRestController.php#L150
![Page 13: Symfony ile Gelişmiş API Mimarisi](https://reader031.vdocuments.net/reader031/viewer/2022031910/58ea6b861a28ab4d578b587b/html5/thumbnails/13.jpg)
Routing
https://github.com/ojs/ojs/blob/master/app%2Fconfig%2Frouting_rest.ymlhttps://github.com/ojs/ojs/blob/master/src%2FOjs%2FApiBundle%2FResources%2Fconfig%2Frouting_rest.yml
![Page 14: Symfony ile Gelişmiş API Mimarisi](https://reader031.vdocuments.net/reader031/viewer/2022031910/58ea6b861a28ab4d578b587b/html5/thumbnails/14.jpg)
Security● ACL
● ApiKey Auth
![Page 15: Symfony ile Gelişmiş API Mimarisi](https://reader031.vdocuments.net/reader031/viewer/2022031910/58ea6b861a28ab4d578b587b/html5/thumbnails/15.jpg)
Related Links
https://github.com/ojs/ojs/blob/master/app/config/security.yml#L20https://github.com/ojs/ojs/blob/a8f11d6b7fd351a837a21ece92f487a3ca978d71/app/config/services.yml#L14https://github.com/ojs/ojs/blob/master/src/Ojs/ApiBundle/Security/ApiKeyUserProvider.php#L20https://github.com/ojs/ojs/blob/master/src%2FOjs%2FApiBundle%2FSecurity%2FApiKeyAuthenticator.php#L16https://github.com/ojs/ojs/blob/master/src%2FOjs%2FApiBundle%2FController%2FAdmin%2FArticleTypeRestController.php#L44
![Page 16: Symfony ile Gelişmiş API Mimarisi](https://reader031.vdocuments.net/reader031/viewer/2022031910/58ea6b861a28ab4d578b587b/html5/thumbnails/16.jpg)
Handlers
https://github.com/ojs/ojs/blob/master/src%2FOjs%2FApiBundle%2FResources%2Fconfig%2Fservices.ymlhttps://github.com/ojs/ojs/blob/master/src%2FOjs%2FApiBundle%2FHandler%2FArticleTypeHandler.phphttps://github.com/ojs/ojs/blob/master/src%2FOjs%2FApiBundle%2FController%2FAdmin%2FArticleTypeRestController.php#L129
![Page 17: Symfony ile Gelişmiş API Mimarisi](https://reader031.vdocuments.net/reader031/viewer/2022031910/58ea6b861a28ab4d578b587b/html5/thumbnails/17.jpg)
Exception
https://github.com/ojs/ojs/blob/master/src%2FOjs%2FApiBundle%2FException%2FInvalidFormException.phphttps://github.com/ojs/ojs/blob/master/src%2FOjs%2FApiBundle%2FController%2FAdmin%2FArticleTypeRestController.php#L45https://github.com/ojs/ojs/blob/master/src%2FOjs%2FApiBundle%2FController%2FAdmin%2FArticleTypeRestController.php#L277https://github.com/ojs/ojs/blob/master/src%2FOjs%2FApiBundle%2FSecurity%2FApiKeyAuthenticator.php#L31
![Page 18: Symfony ile Gelişmiş API Mimarisi](https://reader031.vdocuments.net/reader031/viewer/2022031910/58ea6b861a28ab4d578b587b/html5/thumbnails/18.jpg)
Validation
https://github.com/ojs/ojs/blob/master/src%2FOjs%2FApiBundle%2FHandler%2FArticleTypeHandler.php#L119https://github.com/ojs/ojs/blob/master/src%2FOjs%2FAdminBundle%2FForm%2FType%2FArticleTypesType.phphttps://github.com/ojs/ojs/blob/master/src%2FOjs%2FJournalBundle%2FResources%2Fconfig%2Fvalidation%2FJournal.yml
![Page 19: Symfony ile Gelişmiş API Mimarisi](https://reader031.vdocuments.net/reader031/viewer/2022031910/58ea6b861a28ab4d578b587b/html5/thumbnails/19.jpg)
Serializer
http://jmsyst.com/libs/serializerhttp://jmsyst.com/libs/serializer/master/reference/annotationshttps://github.com/ojs/ojs/blob/master/src%2FOjs%2FJournalBundle%2FEntity%2FArticle.php#L26
![Page 20: Symfony ile Gelişmiş API Mimarisi](https://reader031.vdocuments.net/reader031/viewer/2022031910/58ea6b861a28ab4d578b587b/html5/thumbnails/20.jpg)
Tests
https://github.com/ojs/ojs/tree/master/src/Ojs/ApiBundle/Tests/Controller
![Page 21: Symfony ile Gelişmiş API Mimarisi](https://reader031.vdocuments.net/reader031/viewer/2022031910/58ea6b861a28ab4d578b587b/html5/thumbnails/21.jpg)
File Upload
https://github.com/ojs/ojs/blob/master/src%2FOjs%2FApiBundle%2FTests%2FController%2FJournalIssueRestControllerTest.php#L25https://github.com/ojs/ojs/blob/master/src%2FOjs%2FApiBundle%2FHandler%2FJournalIssueHandler.php#L162
![Page 22: Symfony ile Gelişmiş API Mimarisi](https://reader031.vdocuments.net/reader031/viewer/2022031910/58ea6b861a28ab4d578b587b/html5/thumbnails/22.jpg)
Teşekkü[email protected]