Slide 1

Slide 1 text

-BSBWFM΍4ZNGPOZͰखͬऔΓૣ͘ 0QFO"1*ͷυΩϡϝϯτΛ࡞੒͢Δ ୈճؔ੢1)1ษڧձ 4"8

Slide 2

Slide 2 text

$(whoami) ࢯ໊Ճ౻फҰ࿠ ࡀ ϋϯυϧωʔϜ4"8 9 چ5XJUUFS !B[VLJ@FBUFS ؔ੢ͷ*5ΤϯδχΞίϛϡχςΟͷ೐΍͔͠୲౰ ࣗশ େࡕࡏॅɾѪ஌ग़਎ ಘҙ෼໺8FCΞϓϦέʔγϣϯ։ൃ -BSBWFM 7VF ྉཧͷՃ೤࣌ؒΛ୹ॖ͢ΔͨΊʹ ڧՐͰௐཧͨ͜͠ͱ͕͋Δͷ͸ ࣗ෼͚ͩͰ͸ͳ͍͸ͣ ࠓ೔ͷ໎ݴ

Slide 3

Slide 3 text

͋ͳͨͷϓϩδΣΫτͰ "1*υΩϡϝϯτ͸ ଘࡏ͍ͯ͠·͔͢

Slide 4

Slide 4 text

ͦͷ"1*υΩϡϝϯτ͸ ӕΛ͍͍ͭͯͨΓ͠·ͤΜ͔

Slide 5

Slide 5 text

"1*࢓༷ॻͱ࣮૷͕ဃ཭͢Δཧ༝ ʮղऍͷ༨஍ͷ͋Δ࢓༷ॻʯ ྫ೔෇΍࣌ࠁͷදݱܗ͕ࣜᐆດ ෢ాݑଠ࿠ !,FOUBSPV5BLFEB ͞Μ ʮ-BSBWFM0QFO"1*ʹΑΔਏ͘ͳ͍εΩʔϚۦಈ։ൃʯ QΑΓҾ༻ ʮ࢓༷ॻͷ৑௕Խʹա͗ͳ͍࣮૷ʯ ਓ͕ؒख࡞ۀͰ࣮૷͢Δͱϛε͕ൃੜ͠͏Δ ෢ాݑଠ࿠ !,FOUBSPV5BLFEB ͞Μ ʮ-BSBWFM0QFO"1*ʹΑΔਏ͘ͳ͍εΩʔϚۦಈ։ൃʯ QQΑΓҾ༻

Slide 6

Slide 6 text

0QFO"1*ͱ͸ 3&45"1*ͷ࢓༷ॻΛදݱ͢ΔͨΊͷඪ४Խن֨ "1*ͷΠϯλϑΣʔεΛఆٛ ਓ͚ؒͩͰͳ͘ίϯϐϡʔλ΋࢓༷ΛཧղՄೳ ᐆດͳදݱΛഉআͯ͠ղऍͷ༨஍Λͳ͘͢ "1*࢓༷ॻ͸:".- +40/ܗࣜͰදه 0QFO"1*ʹରԠͨ͠πʔϧ͕"1*࢓༷Λղऍͯ͠ར༻Մೳ ίϯϐϡʔλ͕ղऍͰ͖ΔΑ͏ʹϑΥʔϚοτ͕ఆΊΒΕ͍ͯΔ 0QFO"1*͸"1*࢓༷ॻͷͨΊͷهड़ݴޠͱ΋ߟ͑ΒΕΔ

Slide 7

Slide 7 text

0QFO"1*ͷ࢓༷ॻͷྫ :".-ܗࣜ openapi: 3.0.0 info: title: Sample description: 'Sample API' version: 1.0.0 paths: '/api/hoge/{id}': get: parameters: - name: id in: path description: 'ID of hoge' required: true schema: type: string responses: 200: description: 'hoge response body' content: application/json: schema: properties: id: type: integer message: type: string type: object

Slide 8

Slide 8 text

0QFO"1*͕͋Ε͹ ࢓༷ॻͷ՝୊͸ղফͰ͖Δ͔

Slide 9

Slide 9 text

0QFO"1*୯ମͰ͸࣮૷ͱͷဃ཭໰୊͸ղܾ͠ͳ͍ ࣮૷͕มߋ͞ΕͨΒ0QFO"1*ͷϑΝΠϧ΋มߋ͕ඞཁ υΩϡϝϯτͷมߋ࿙Ε΍ޡͬͨมߋʹΑ࣮ͬͯ૷ͱͷဃ཭͕ੜ͡ΔՄೳੑ͕͋Δ ن໛͕େ͖͍:".-΍+40/͸ਓ͕ؒಡΈॻ͖͢Δʹ͸ਏ͍ ࢓༷ͷ৑௕ԽͰ͋Δ͜ͱʹมΘΓ͸ͳ͍ ࣮૷͸0QFO"1*ͷ಺༰Λॻ͖௚ͨ͠΋ͷʹա͗ͳ͍ 0QFO"1*ΛղऍՄೳͳςετπʔϧͰ࢓༷ͱ࣮૷ͷဃ཭ͷݕग़͸Մೳ

Slide 10

Slide 10 text

࣮૷͔Β0QFO"1*υΩϡϝϯτΛੜ੒͢Δ "1*ͷ࣮૷͔Β0QFO"1*υΩϡϝϯτΛࣗಈੜ੒ ϝϦοτʮ࢓༷ͱ࣮૷ͱΛҰகͤ͞΍͍͢ʯ ෢ాݑଠ࿠ !,FOUBSPV5BLFEB ͞Μ ʮ-BSBWFM0QFO"1*ʹΑΔਏ͘ͳ͍εΩʔϚۦಈ։ൃʯQΑΓҾ༻ 1)1ͷ0QFO"1*υΩϡϝϯτΛੜ੒͢ΔϥΠϒϥϦ 4ZNGPOZ/FMNJP0QFO"QJ#VOEMF -BSBWFM-4XBHHFS

Slide 11

Slide 11 text

/FMNJP0QFO"QJ#VOEMF 1)1ͷΞτϦϏϡʔτΛར༻ͯ͠هड़ 4ZNGPOZͷ#[Route()]͔Β"1*ͷ63-Λදݱ #[OpenApi\Attributes\Response()]ͰϨεϙϯεͷ৘ใΛදݱ 4XBHHFS6*ͷϖʔδΛࣗಈతʹੜ੒ 4XBHHFS6*ͷϖʔδΛੜ੒͢ΔͨΊͷίϚϯυͷ࣮ߦ͕ෆཁ 4XBHHFS6*ͷϖʔδʹΞΫηε͢Δ͚ͩͰྑ͍ 4XBHHFS6*Λར༻͢ΔͨΊʹ͸ผ్ґଘύοέʔδͷΠϯετʔϧ͕ඞཁ

Slide 12

Slide 12 text

/FMNJP0QFO"QJ#VOEMFͷΠϯετʔϧͱ࣮૷ྫ # NelmioOpenApiBundle のインストール composer require nelmio/api-doc-bundle # Swagger UI に必要な依存パッケージのインストール composer require symfony/twig symfony/asset /FMNJP0QFO"QJ#VOEMFͷΠϯετʔϧखॱ use OpenApi\Attributes as OA; class SampleController extends AbstractController { #[Route('/hoge/{id}', methods: ['GET'])] #[OA\Response( response: 200, description: 'Get specified hoge data', content: new OA\JsonContent( ref: new Model(type: Hoge::class), ) )] public function get(int $id): JsonRespnose { // 略 } } ࣮૷ྫ app.swagger_ui: path: /api/doc method: GET defaults: { _controller: nelmio_api_doc.controller.swagger_ui } 4XBHHFS6*Λ༗ޮԽ͢Δઃఆͷྫ config/routes/nelmio_api_doc.yaml

Slide 13

Slide 13 text

/FMNJP0QFO"QJ#VOEMFͰͷ4XBHHFS6*ͷදࣔྫ

Slide 14

Slide 14 text

-4XBHHFS 1)1ͷΞτϦϏϡʔτΛར༻ͯ͠هड़ #[OpenApi\Attributes\Get()]΍#[OpenApi\Post()]ͳͲͰ63-΍Ϩεϙϯεͷ ৘ใΛදݱ 4XBHHFS6*Λར༻͢ΔͨΊʹ௥ՃͷύοέʔδͷΠϯετʔϧ͕ෆཁ ެࣜυΩϡϝϯτͷ৘ใ͕΍΍ෆ਌੾ (JU)VCͷ8JLJ͕-4XBHHFSͷυΩϡϝϯτ ࣮૷ྫ͸1)1%PDͷΞϊςʔγϣϯͷΈ ΑΓৄࡉͳϦϑΝϨϯε͕ඞཁͳ৔߹͸4XBHHFS1)1ͷυΩϡϝϯτΛࢀর

Slide 15

Slide 15 text

-4XBHHFSͷΠϯετʔϧͱ࣮૷ྫ # L5 Swagger のインストール composer require darkaonline/l5-swagger -4XBHHFSͷΠϯετʔϧखॱ use OpenApi\Attributes as OA; class SampleController extends Controller { #[OA\Get( path: '/api/hoge/{id}', summary: 'Get specified hoge data', responses: [ new OA\Response( response: Response::HTTP_OK, description: 'hoge response body', ), ) )] public function get(int $id): JsonRespnose { // 略 } ࣮૷ྫ # ServiceProvider の登録 php artisan vendor:publish --provider \ "L5Swagger\L5SwaggerServiceProvider" # Swagger UI の 生 成 php artisan l5-swagger:generate -4XBHHFSͷઃఆͱυΩϡϝϯτੜ੒

Slide 16

Slide 16 text

-4XBHHFSͰͷ4XBHHFS6*ͷදࣔྫ

Slide 17

Slide 17 text

૯ׅ 0QFO"1*ʹ͍ͭͯઆ໌ ίʔυ͔Β0QFO"1*υΩϡϝϯτΛࣗಈੜ੒͢Δํ๏Λ঺հ 4ZNGPOZ/FMNJP"QJ%PD#VOEMFS -BSBWFM-4XBHHFS

Slide 18

Slide 18 text

͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠