Slide 1

Slide 1 text

81"1*పఈ߈ུ PHPΧϯϑΝϨϯε 2017 ٶ಺ ོߦ @miya0001

Slide 2

Slide 2 text

No content

Slide 3

Slide 3 text

No content

Slide 4

Slide 4 text

No content

Slide 5

Slide 5 text

No content

Slide 6

Slide 6 text

No content

Slide 7

Slide 7 text

ࠓ೔ͷΞδΣϯμ

Slide 8

Slide 8 text

w 81"1*ͱ͸ʁ w άϩʔόϧύϥϝʔλ w ϖʔδωʔγϣϯ w ϑΟϧλʔ w ΧελϜ౤ߘλΠϓΛಠࣗΤϯυϙΠϯτͱͯ͠௥Ճ w ΧελϜϑΟʔϧυͷ௥Ճ w ೝূ w Ϣχοτςετ w ΫϥΠΞϯτϥΠϒϥϦʢ+BWB4DSJQUʣ

Slide 9

Slide 9 text

81"1*ͱ͸ʁ

Slide 10

Slide 10 text

w 3&45GVM"1* w 8PSE1SFTTͷ(6*ͱͷ༥߹ʹΑΔͳΜͰ΋"1*؀ڥ w 8PSE1SFTTϓϥάΠϯʹΑΔ֦ுੑ w ΦʔτσΟεΧόϦ

Slide 11

Slide 11 text

ΤϯυϙΠϯτ /wp-json/wp/v2 /wp-json/wp/v2/posts /wp-json/wp/v2/categories /wp-json/wp/v2/revisions /wp-json/wp/v2/tags /wp-json/wp/v2/pages /wp-json/wp/v2/comments /wp-json/wp/v2/taxonomies /wp-json/wp/v2/media /wp-json/wp/v2/users /wp-json/wp/v2/types /wp-json/wp/v2/statuses /wp-json/wp/v2/settings

Slide 12

Slide 12 text

/wp-json/wp/v2 w ͜ͷΤϯυϙΠϯτͰ͢΂͕ͯΘ͔Γ·͢ɻ w αϙʔτͯ͠ΔΤϯυϙΠϯτ w ͦΕͧΕͷΤϯυϙΠϯτ͕ͲͷϝιουΛαϙʔτ͠ ͍ͯΔ͔ʁ w ͲΜͳύϥϝʔλΛαϙʔτ͍ͯ͠Δ͔ʁ υΩϡϝϯτͷҰ෦΋ ͜ͷΤϯυϙΠϯτ͔Βࣗಈੜ੒͍ͯ͠·͢ɻ

Slide 13

Slide 13 text

ΦʔτσΟεΧόϦ $ http HEAD http://wp-api.test/wp-json/ HTTP/1.1 200 OK Access-Control-Allow-Headers: Authorization, Content-Type Access-Control-Expose-Headers: X-WP-Total, X-WP-TotalPages Allow: GET Connection: close Content-Type: application/json; charset=UTF-8 Date: Sat, 07 Oct 2017 23:16:58 GMT Link: ; rel="https://api.w.org/" Server: Apache/2.4.18 (Ubuntu) X-Content-Type-Options: nosniff X-Robots-Tag: noindex 8PSE1SFTTʹؔ࿈͢ΔͳΜΒ͔ͷαʔϏεΛ։ൃ͢Δ৔߹͸ɺ ϨεϙϯεϔομʔͷA-JOLAΛνΣοΫʂ

Slide 14

Slide 14 text

άϩʔόϧύϥϝʔλ

Slide 15

Slide 15 text

_jsonp /wp/v2/posts?_jsonp=hello ΫϩευϝΠϯͰίϯςϯπΛ࠶ར༻͢Δ͜ͱ͕Մೳʹɻ

Slide 16

Slide 16 text

_method /wp-json/wp/v2/posts/42?_method=DELETE ͋ΔಛఆͷϝιουʹରԠ͍ͯ͠ͳ͍ΫϥΠΞϯτͱͷޓ׵ੑͷͨΊʹ ϦΫΤετϝιουΛ্ॻ͖͢Δ͜ͱ͕Մೳɻ ͨͩ͠ɺPOSTͰϦΫΤετ͢Δ͜ͱɺೝূ͕ඞཁͳͲͷ੍໿͕͋Γ·͢ɻ POST /wp-json/wp/v2/posts/42 HTTP/1.1 Host: example.com X-HTTP-Method-Override: DELETE X-HTTP-Method-Override ϔομʔͰ΋ಉ͜͡ͱ͕Մೳ

Slide 17

Slide 17 text

_envelope /wp-json/wp/v2/posts/42?_envelope HTTPϨεϙϯεϔομΛਖ਼͘͠ղऍͰ͖ͳ͍ΫϥΠΞϯτͷͨΊʹ Ϩϯεϙϯεϔομʔͷ಺༰ΛJSONʹؚΊͯฦ͢ɻ HTTPεςʔλείʔυ͕200ʹͳΔ୅ΘΓʹ JSONʹΤϥʔ͕֨ೲ͞Εͯฦ٫͞Ε·͢ɻ $ curl --dump-header - http://.../posts/1111?_envelope HTTP/1.1 200 OK

Slide 18

Slide 18 text

_embed /wp-json/wp/v2/posts/42?_embed ͦͷΦϒδΣΫτʹؔ࿈͢ΔΦϒδΣΫτ΋औಘ͢ΔͨΊͷύϥϝʔλɻ ͨͱ͑͹౤ߘͰ͋Ε͹ΞΠΩϟονը૾ɻ ݻఆϖʔδͰ͋Ε͹਌ϖʔδ΁ͷϦϯΫͳͲɻ

Slide 19

Slide 19 text

ϖʔδωʔγϣϯ

Slide 20

Slide 20 text

ύϥϝʔλ ༻్ ?page= ϖʔδͷ൪߸Λࢦఆ ?per_page= 1ϖʔδ͋ͨΓͷΦϒδΣΫτ਺Λࢦఆɻ
 ࠷େ஋͸100ɻ ?offset= ΦϒδΣΫτͷΦϑηοτΛࢦఆɻ +40/಺ͷA981505"-AٴͼA9815PUBM1BHFTAʹ ΦϒδΣΫτͷ૯਺ͱ૯ϖʔδ਺ؚ͕·Ε͍ͯ·͢ɻ APSEFSAٴͼAPSEFSCZAͰιʔτ΋Մೳɻ

Slide 21

Slide 21 text

ϑΟϧλʔ

Slide 22

Slide 22 text

ʁpMUFSVODBUFHPSJ[FE 81"1*ͷϕʔλςετͰఏڙ͞Ε͍ͯͨpMUFSύϥϝʔλ͸ɺ ๲େͳϢʔεέʔεʹԠ͑Δ͜ͱ͕ࠔ೉ͳ͜ͱɻ σϑΥϧτͰ༗ޮԽ͢Δʹ͸ηΩϡϦςΟ্ͷݕ౼ࣄ߲͕ଟ͍͜ͱɻ ͳͲΛཧ༝ʹίΞʹϚʔδ͢Δ࣌఺Ͱ࡟আ͞Ε·ͨ͠ɻ https://github.com/WP-API/rest-filter ݱࡏ͸ϓϥάΠϯͱͯ͠ఏڙ͞Ε͍ͯ·͢ɻ
 ͨͩ͠׬શͰ͸ͳ͍

Slide 23

Slide 23 text

ಠࣗΤϯυϙΠϯτ

Slide 24

Slide 24 text

wp scaffold post-type REST APIʹରԠͨ͠ΧελϜ౤ߘλΠϓΛ ίϚϯυҰൃͰੜ੒Ͱ͖·͢ɻ

Slide 25

Slide 25 text

register_rest_route( 'rad/v1', 'site-info', array( array( 'methods' => 'GET', 'callback' => function( $request ) { return array( 'phone_number' => get_option( 'phone_number' ), ); }, ), array( 'methods' => 'POST', 'callback' => function( $request ) { update_option( 'phone_number', $request['phone_number'] ); return array( 'phone_number' => get_option( 'phone_number' ), ); }, ), ) ); `register_rest_route()` Λ࢖ͬͯΦϦδφϧAPIΛ࡞Δྫ

Slide 26

Slide 26 text

array( 'methods' => 'POST', 'callback' => function( $request ) { update_option( 'phone_number', $request['phone_number'] ); return array( 'phone_number' => get_option( 'phone_number' ), ); }, 'permission_callback' => function() { if ( current_user_can( 'manage_options' ) ) { return true; } return new WP_Error( 'rad_unauthorized', 'You do not have permission to update this resource.', array( 'status' => is_user_logged_in() ? 403 : 401 ) ); }, ), ೝূΛ͚ͭΔ৔߹͸ `permission_callback`

Slide 27

Slide 27 text

ΧελϜϑΟʔϧυ

Slide 28

Slide 28 text

add_action( 'rest_api_init', function() { register_rest_field( 'poi', 'poi', array( 'get_callback' => function( $object ) { $meta = get_post_meta( $object['id'], '_addr', true ); return array( 'address' => $meta ); }, 'schema' => null, ) ); } ); ΧελϜϑΟʔϧυͷ஋͸σϑΥϧτͰ͸APIʹؚ·Ε·ͤΜɻ ʢηΩϡϦςΟ্ॏཁͳ৘ใؚ͕·ΕΔ͜ͱ͕૝ఆ͞ΕΔͨΊʣ ্ͷྫ͸ɺ`_addr` ͱ͍͏ΧελϜϑΟʔϧυͷ஋Λ `address` ͱ͍͏εΩʔϚͰAPIʹؚΊΔྫɻ

Slide 29

Slide 29 text

ೝূ

Slide 30

Slide 30 text

https://wordpress.org/plugins/rest-api-oauth1/

Slide 31

Slide 31 text

Ϣχοτςετ

Slide 32

Slide 32 text

ࣄނ๷ࢭͷͨΊʹ"1*ΛΧελϚΠζ͢Δͱ͖͸ ςετΛॻ͖·͠ΐ͏ʂ

Slide 33

Slide 33 text

https://github.com/danielbachhuber/pantheon-rest-api-demo

Slide 34

Slide 34 text

ࢀߟ

Slide 35

Slide 35 text

https://developer.wordpress.org/rest-api/

Slide 36

Slide 36 text

͋Γ͕ͱ͏͍͟͝·ͨ͠ʂ