Slide 1

Slide 1 text

த໺ڿਓ(.01&1"#0JOD ୈճ&$ࣄۀ෦5FDI.5( ϓϥΠϕʔτ"1*ͷΫϥΠΞϯτΛ ͍͍ײ͡ʹ͍ͨ͠

Slide 2

Slide 2 text

8ΞϓϦέʔγϣϯΤϯδχΞ &$ࣄۀ෦Χϥʔϛʔγϣοϓάϧʔϓ த໺ڿਓ ͖͋ͬʔ !/","/0@"LJIJUP ಛ߈ୂνʔϜ IUUQTBDLJOUPTIHJUIVCJP

Slide 3

Slide 3 text

໨࣍ wղܾ͍ͨ͜͠ͱ wཧ૝ w࣮ݱ·Ͱͷϋʔυϧ wϨϏϡʔґཔ

Slide 4

Slide 4 text

ղܾ͍ͨ͜͠ͱ

Slide 5

Slide 5 text

ΧΦεԽ͖͍ͯͯ͠Δ

Slide 6

Slide 6 text

ϓϥΠϕʔτ"1*ΫϥΠΞϯτͷݱঢ় w ࣮૷ʹ౷Ұײ͕ͳ͍ w +40/Λσίʔυ͚ͨͩ͠ͷσʔλΛฦ͢ͷ΋͋Ε͹ɺϞσϧ૬౰ͷΠϯελϯεΛฦ͢ͷ ΋͋Δ w ෳ਺ͷϦϙδτϦʹ෼ࢄ࣮ͯ͠૷͞Ε͍ͯΔ w ͦΕͧΕʹ"1*Λୟͨ͘Ίͷ਌ɾࢠΫϥε͕ଘࡏ͢Δ w ผͷϦϙδτϦͷ਌ΫϥεΛܧঝͯ͠Δͷ΋͋Δ w Ϣχοτςετͷϝϯςφϯείετ w "1*ͷ࢓༷Λม͑ͨΒQIQWDSͷϑΟΫενϟ΋ਓؒͷखͰमਖ਼͠ͳ͍ͱ͍͚ͳ͍ w ಉ͡Α͏ͳςετ͕ͨ͘͞Μ͋Δ

Slide 7

Slide 7 text

ΧΦεԽ͸·ͩ࢝·ͬͨ͹͔Γ ͍·ͷ͏ͪʹखΛଧ͍ͪͨ

Slide 8

Slide 8 text

ཧ૝

Slide 9

Slide 9 text

4XBHHFS$PEFHFO

Slide 10

Slide 10 text

4XBHHFS$PEF(FOFSBUPS wIUUQTXBHHFSJPTXBHHFSDPEFHFO w0QFO"1*4XBHHFSʹԊͬͨఆ͔ٛΒ৭ʑͳݴޠɾϑϨʔϜϫʔΫͷαʔ όʔɺΫϥΠΞϯτɺςετ΍ελϒΛੜ੒Ͱ͖Δ w࠷৽͸W wW ͦΖͦΖϦϦʔε ͔Β͸(V[[MF 143 Λ)551ΫϥΠΞϯτͱͯ͠ ར༻͍ͯ͠Δ w1)1Ҏ্

Slide 11

Slide 11 text

ΠϯετʔϧʙΫϥΠΞϯτੜ੒ $ brew install swagger-codegen $ swagger-codegen generate \ -i http://petstore.swagger.io/v2/swagger.json \ -l php \ -o . ಛఆͷόʔδϣϯΛ࢖͍͍ͨ৔߹͸ $ git clone https://github.com/swagger-api/swagger-codegen $ ./run-in-docker.sh mvn package $ ./run-in-docker.sh generate \ -i http://petstore.swagger.io/v2/swagger.json \ -l php \ -o .

Slide 12

Slide 12 text

ੜ੒͞ΕΔϑΝΠϧ WҰ෦ൈਮ ├── lib │ ├── Api │ │ ├── PetApi.php │ │ ├── StoreApi.php │ │ └── UserApi.php │ ├── ApiClient.php │ ├── Model │ │ ├── ApiResponse.php │ │ ├── Category.php │ │ ├── Order.php │ │ ├── Pet.php │ │ ├── Tag.php │ │ └── User.php

Slide 13

Slide 13 text

ϖοτετΞͷTXBHHFSKTPO { "paths": { "/pet/{petId}": { "get": { "operationId": “getPetById", …… "definitions": { "Pet": { "type": "object", "properties": { "category": { "$ref": "#/definitions/Category" },

Slide 14

Slide 14 text

QFU\QFU*E^ͷϨεϙϯε { "id": 1, "category": { "id": 1, "name": "string" }, "name": "doggie", "photoUrls": [ "string" ], "tags": [ { "id": 1,

Slide 15

Slide 15 text

ΫϥΠΞϯτͷ࢖͍৺஍ (new \Swagger\Client\Api\PetApi)->getPetById(1); class Swagger\Client\Model\Pet#9 (1) { protected $container => array(6) { 'id' => int(1) 'category' => class Swagger\Client\Model\Category#10 (1) {

Slide 16

Slide 16 text

ΫϥΠΞϯτͷ࢖͍৺஍ (new \Swagger\Client\Api\PetApi)->findPetsByStatus('sold') array(1424) { [0] => class Swagger\Client\Model\Pet#4239 (1) { } [1] => class Swagger\Client\Model\Pet#4243 (1) {

Slide 17

Slide 17 text

࣮ઓ౤ೖΛ૝ఆͨ͠՝୊ wϞσϧʹ࣮૷ΛՃ͍͑ͨ w$JSDVJU#SFBLFSΛ࢖͍͍ͨ w4XBHHFS$PEFHFO$JSDVJU#SFBLFS (BOFTIB w IUUQTBDLJOUPTIHJUIVCJPCMPHTXBHHFSDPEFHFOXJUIHBOFTIB

Slide 18

Slide 18 text

ϋʔυϧ

Slide 19

Slide 19 text

࣮ݱ·Ͱͷϋʔυϧ w 0QFO"1*Ͱఆٛ͢Δ w Ұؾʹ΍Δඞཁ͸ແ͍ͷͰ౎౓΍ͬͯ͘ w ϩʔΧϧ؀ڥͷվળ w 13͕͋ΔͷͰؤுΔʢՃ੎͓ئ͍͠·͢QSBZʣ w ࣮ઓ౤ೖΛ૝ఆͨ͠՝୊ w .PEFMʹ࣮૷ΛՃ͍͑ͨ৔߹͸Ͳ͏͢Δʁ w $JSDVJU#SFBLFSΛ࢖͍͍ͨ৔߹͸Ͳ͏͢Δʁ w ӡ༻Ͳ͏͢Δʁ ࣍ͷεϥΠυ΁

Slide 20

Slide 20 text

ίʔυࣗಈੜ੒ͷϓϥΫςΟε w(FOFSBUJPO(BQύλʔϯ wIUUQTNBSUJOGPXMFSDPNETM$BUBMPHHFOFSBUJPO(BQIUNM wIUUQXXXIZVLJDPNEQEQJOGPIUNM(FOFSBUJPO(BQ wlॻ͖Ճ͑ͯͨ෦෼͕ফ͑ͯΔʜzΛ๷͙ wࣗಈੜ੒͞Εͨίʔυͱਓ͕ؒॻ͍ͨίʔυΛ෼཭͢Δ wੜ੒͞ΕͨίʔυͷαϒΫϥεʹਓ͕࣮ؒ૷ΛՃ͑Δ

Slide 21

Slide 21 text

.PEFMʹ࣮૷ΛՃ͍͑ͨ৔߹ͬͯʁ ࣮ྫͱͯ͠ɺطଘͷ.PEFMͷ࣮૷ΛݟͯΈΔ

Slide 22

Slide 22 text

(FOFSBUJPO(BQύλʔϯΛద༻͍͕ͨ͠ʜ (new \Swagger\Client\Api\PetApi)->getPetById(1); // class Swagger\Client\Model\Pet w1FUϞσϧʹखΛೖΕ͍ͨ w1FU"QJͷฦΓ஋͕1FUϞσϧ w1FUͷαϒΫϥεΛར༻͢Δ༨஍͕ແ͍ʜ

Slide 23

Slide 23 text

࣮ઓ౤ೖΛ૝ఆͨ͠՝୊ .PEFMʹ࣮૷ΛՃ͍͑ͨ wΦϦδφϧςϯϓϨʔτͱϑΝΫτϦΛ࢖͏ wΦϦδφϧςϯϓϨʔτ wਓ͕ؒॻ͘αϒΫϥεΛར༻͢ΔͨΊͷԼ஍Λ࡞Δ wϑΝΫτϦ w"1*Ϋϥεͷੜ੒Λ୲౰͢Δ w"1*Ϋϥε͕ฦ͢΂͖ϞσϧΛ؅ཧͤ͞Δ

Slide 24

Slide 24 text

.PEFMʹ࣮૷ΛՃ͍͑ͨΦϦδφϧςϯϓϨʔτ class PetApi { public function __construct( ClientInterface $client = null, Configuration $config = null, HeaderSelector $selector = null, $modelClass = null w ಠࣗͷίʔυੜ੒ςϯϓϨʔτΛ༻ҙͯ͠ੜ੒͞ΕΔίʔυΛΧελϚΠζ͢Δ w TXBHHFSDPEFHFOHFOFSBUFͷUΦϓγϣϯ w ࣮ߦ݁Ռͱͯ͠ฦ͢ϞσϧΫϥεΛࠩ͠ସ͑ΒΕΔΑ͏ʹ͢ΔͨΊʹ࠷খݶͷΧ ελϚΠζΛ͢Δ

Slide 25

Slide 25 text

.PEFMʹ࣮૷ΛՃ͍͑ͨΦϦδφϧςϯϓϨʔτ Πϝʔδ

Slide 26

Slide 26 text

.PEFMʹ࣮૷ΛՃ͍͑ͨϑΝΫτϦ w ࣮ߦ݁Ռͱͯ͠ฦ͢΂͖ϞσϧΫϥεΛ؅ཧͤ͞Δ ApiFactory::instantiate(‘PetApi’)->getPetById(1); // class ……\Model\HandWrittenPet class ApiFactory { private static $map = [‘PetApi’ => ‘HandWrittenPet’]; public static function instantiate($apiClass) { …… return new $apiClass(… , $modelClass);

Slide 27

Slide 27 text

.PEFMʹ࣮૷ΛՃ͍͑ͨϑΝΫτϦ Πϝʔδ

Slide 28

Slide 28 text

.PEFMʹ࣮૷ΛՃ͍͑ͨ ApiFactory::instantiate(‘PetApi’)->getPetById(1); // class Swagger\Client\Model\HandWrittenPet (new \Swagger\Client\Api\PetApi)->getPetById(1); // class Swagger\Client\Model\Pet ϏϑΥʔ Ξϑλʔ ΦϦδφϧςϯϓϨʔτϑΝΫτϦͰ (FOFSBUJPO(BQύλʔϯΛద༻༷ͨ͠ࢠ

Slide 29

Slide 29 text

࣮ઓ౤ೖΛ૝ఆͨ͠՝୊ $JSDVJU#SFBLFSΛ࢖͍͍ͨ wϑΝΫτϦΛ࢖͏ w"1*ΫϥεΛ࡞Δͱ͖ʹɺ$JSDVJU#SFBLFSΛ૊ΈࠐΜͩ)551ΫϥΠΞ ϯτΛηοτ͢Δ

Slide 30

Slide 30 text

$JSDVJU#SFBLFSΛ࢖͍͍ͨ class ApiFactory { public static function instantiate($apiClass) { …… return new $apiClass($httpClientWithCB, … , $modelClass); w༧Ί$JSDVJU#SFBLFSΛ૊ΈࠐΜͩΫϥΠΞϯτ͕ηοτ͞Εͨ"1*Πϯελ ϯεΛฦ͢ w IUUQTBDLJOUPTIHJUIVCJPCMPHTXBHHFSDPEFHFOXJUIHBOFTIB w "QJ$MJFOUΛܧঝͨ͠ΫϥεΛ༻ҙ͢Δํ๏

Slide 31

Slide 31 text

$JSDVJU#SFBLFSΛ࢖͍͍ͨ Πϝʔδ

Slide 32

Slide 32 text

ӡ༻ w ϓϥΠϕʔτ"1*ΫϥΠΞϯτઐ༻ͷϦϙδτϦΛ࡞Δ w ཁٻ͞ΕΔ1)1όʔδϣϯ͕ҧ͏ͷͰڞ༗ϦϙδτϦʹ͸ೖΕΒΕͳ͍ w Ϣχοτςετ w ਓ͕ؒॻ͘ίʔυ͚ͩςετΛॻ͚͹ྑ͍ͷͰ͸ w "1*ఆٛͱੜ੒͞ΕΔίʔυ͸ඞͣҰக͢Δ w "1*ͷৼΔ෣͍͸"1*ଆͷςετ͕อূ͢Δ w ։ൃͷྲྀΕ w "1*Λ࣮૷͢Δʗ0QFO"1*ͷఆٛΛॻ͘ w ΫϥΠΞϯτΛੜ੒͢ΔʗαϒΫϥεͷ࣮૷͕ඞཁͳΒ΍Δ ςετΛॻ͘

Slide 33

Slide 33 text

ݱঢ়ˠ4XBHHFS$PEFHFOΛ࢖͏ͱ w࣮૷ʹ౷Ұײ͕ͳ͍ wੜ੒͞ΕΔίʔυͰ଍৔͕੔උ͞Εɺ౷Ұײ͕ͰΔ wෳ਺ͷϦϙδτϦʹ෼ࢄ࣮ͯ͠૷͞Ε͍ͯΔ wઐ༻ͷϦϙδτϦʹ౷Ұ wϢχοτςετͷϝϯςφϯείετ wਓ͕ؒॻ͍ͨίʔυ͚ͩςετ͢Ε͹ྑ͍

Slide 34

Slide 34 text

ϨϏϡʔ͓ئ͍͠·͢