Upgrade to Pro — share decks privately, control downloads, hide ads and more …

入門APIあれこれ Numaハウス勉強会

入門APIあれこれ Numaハウス勉強会

Avatar for Shun Manabe

Shun Manabe

April 28, 2019

Other Decks in Technology

Transcript

  1. ࠓ೔ͷAGENDA <஌ࣝฤ> 1. API֓ཁ ~ͦ΋ͦ΋APIͬͯͳʹʁ~ 2. APIͷ࢓૊Έ 3. APIͷઃܭ <࣮ફฤ>

    4. APIΛखݩͰ࢖ͬͯΈΔ === optional hands-on === ɾAWS API gatewayͱLambdaؔ਺ͰAPIΛ࡞੒ͯ͠ΈΔ ɾWEBϑϨʔϜϫʔΫͰAPIΛ࡞੒ͯ͠ΈΔ
  2. ͦ΋ͦ΋APIͬͯʁ API = Application Programming Interface 1.APIͷ֓ཁ ΞϓϦέʔγϣϯϓϩάϥϛϯάΠϯλϑΣʔεʢAPIɺӳ: Application Programming

    Interfaceʣͱ͸ɺιϑτ΢ΣΞίϯϙʔωϯ τ͕ޓ͍ʹ΍ΓͱΓ͢Δͷʹ࢖༻͢ΔΠϯλϑΣʔεͷ࢓༷Ͱ͋Δɻ - Wikipedia
  3. 2-1.HTTPͱURI(σʔλϑΥʔϚοτ) HTTP(HyperText Transfer Protocol) ɹ- جຊతͳwebαʔόͱͷ΍ΓऔΓΛߦ͏ํࣜ URI(Uniform Resource Indicator) ɹ-

    web্ͰͷϦιʔε(σʔλ)ͷ͋Γ͔Λࢦ͢ ɹ- URI ∋ URL, URN ɹ- ݸਓతʹ͸URIͰ΋URLͰ΋ͲͬͪͰ΋͍͍ ɹɹ(΄Μͱ͸ͩΊ) 2.APIͷ࢓૊Έ
  4. 2-2.Req/Respͷܾ·Γ͝ͱ 2.APIͷ࢓૊Έ ͦΕͧΕ͸ҎԼΛؚΊͳ͚Ε͹ͳΒͳ͍ ϦΫΤετ ɹ- URL ɹ- ϝιου: Ͳ͏͍ͬͨૢ࡞Λߦ͏ͷ͔Λද໌͢Δ ɹ

    ɹˠGET/POST/PUT/DELETE͕୅දత Ϩεϙϯε ɹ- εςʔλείʔυ: Ϩεϙϯεͷ݁ՌΛཁ໿ͨ͠΋ͷ ɹ ɹˠ਺஋Ͱද͞ΕΔ ex. 201: ੒ޭ, 404: not found ɹ- Ϩεϙϯείϯςϯπ
  5. REST(REpresentational State Transfer) ɹ- Webͷઃܭࢥ૝ͷ1ͭ(΋ͬͱ΋ϝδϟʔ) ɹ- Ϧιʔεͷѻ͍ํͷ͓࿩ ɹ- ҎԼͷ4ͭͷಛ௃͕͋Δ΋ͷΛRESTfulͱݺͿ 3.APIͷઃܭ

    3-1. ઃܭͷϕετϓϥΫςΟε • 1. ΞυϨεࢦఆՄೳͳURIͰެ։͞Ε͍ͯΔ͜ͱ • 2. ΠϯλʔϑΣʔε(HTTPϝιουͷར༻)ͷ౷Ұ͕͞Ε͍ͯΔ͜ͱ • 3. εςʔτϨεͰ͋Δ͜ͱ • 4. ॲཧ݁Ռ͕HTTPεςʔλείʔυͰ௨஌͞ΕΔ͜ͱ
  6. 1. ΞυϨεࢦఆՄೳͳURIͰެ։͞Ε͍ͯΔ ɹˠ 1ͭͷϦιʔεʹରͯ͠ΞυϨεࢦఆՄೳͳURI͕༻ҙ͞Ε͍ͯΔ ɹˠ ϦιʔεͳͷͰ໊ࢺͰߏ੒͢Δͷ͕ݪଇ ɹex. ⭕ https://qiita.com/api/v2/users/ShunManabe ɹex.

    ❌ https://qiita.com/api/v2/getUsers/ShunManabe 2. ΠϯλʔϑΣʔε͕౷Ұ͞Ε͍ͯΔ ɹˠ HTTPϝιουͰAPI͕ૢ࡞Ͱ͖Δ ɹex. 3.APIͷઃܭ 3-1. REST=ઃܭͷϕετϓϥΫςΟε ొ࿥ POST /calendars/calendarId/events औಘ GET /calendars/calendarId/events/eventId ߋ৽ PUT /calendars/calendarId/events/eventId ࡟আ DELETE /calendars/calendarId/events/eventId
  7. 3. εςʔτϨεͰ͋Δ ɹˠ αʔό͸ΫϥΠΞϯτͷηογϣϯͳͲͷঢ়ଶ؅ཧΛ͠ͳ͍ ɹˠ ΫϥΠΞϯτͷϦΫΤετ͸Ϧιʔεૢ࡞ʹඞཁे෼ͳ৘ใʹͳΔ 4. ॲཧ݁Ռ͕HTTPεςʔλείʔυͰ௨஌͞ΕΔ ɹˠ ͭ·Γಉ͡URL͔Βಉ݁͡ՌΛऔಘͰ͖Δ

    ɹex. 3.APIͷઃܭ 200ɹOKɹϦΫΤετ͕ਖ਼ৗʹॲཧ͞Εͨ 201ɹCreatedɹϦΫΤετ͕ਖ਼ৗʹॲཧ͞Εɺ৽نϦιʔε͕࡞੒͞Εͨ 203ɹNo ContentɹϦΫΤετ͕ਖ਼ৗʹॲཧ͞Ε͕ͨɺฦ͢৽ن৘ใ͸ͳ͍ 400ɹBad Requestɹαʔόʔ͕ཧղͰ͖ͳ͍ແޮͳཁٻͰ͋Δ 401ɹUnauthorizedɹཁٻ͞ΕͨϦιʔεʹ͸ೝূ͕ඞཁͰ͋Δ 500ɹInternal Server ErrorɹαʔόʔͰΤϥʔ͕ൃੜͨ͠ 3-1. REST=ઃܭͷϕετϓϥΫςΟε
  8. 3-2. URIઃܭ 3.APIͷઃܭ 1. ୹ͯ͘ೖྗ͠΍͍͢ ɹ⭕ http://api.example.com/search ɹ❌ http://api.example.com/service/api/search 2.

    ਓ͕ؒཧղ͠΍͍͢ ɹ⭕ http://api.example.com/users ɹ❌ http://api.example.com/sv/u/ 3. େจࣈখจࣈ͕ࠞࡏ͍ͯ͠ͳ͍ ɹ⭕ http://api.example.com/users/12345 ɹ❌ http://api.example.com/Users/12345
  9. 3-2. URIઃܭ 3.APIͷઃܭ 4. αʔόʔଆͷΞʔΩςΫνϟ͕൓ө͞Ε͍ͯͳ͍ ɹ⭕ http://api.example.com/users?user=100 ɹ❌ http://api.example.com/cgi-bin/get_user.php?user=100 5.

    APIશମͷϧʔϧ͕౷Ұ͞Ε͍ͯΔ ɹ⭕ http://api.example.com/friends/100 ͱ ɹɹ http://api.example.com/friends/100/messages ɹ❌ http://api.example.com/friends?id=100 ͱ ɹɹ http://api.example.com/friends/100/messages
  10. 3-3.HTTPϝιου 3.APIͷઃܭ Α͘࢖ΘΕΔHTTPϝιουҰཡ ϝιου໊ ϝιουͷҙຯ GET ϦιʔεΛऔಘ POST σʔλ௥Ճ/ͦͷ΄͔ͷॲཧ PUT

    Ϧιʔεͷߋ৽ DELETE Ϧιʔεͷ࡟আ HEAD Ϧιʔεͷϝλσʔλͷऔಘ OPTIONS Ϧιʔε͕ఏڙ͢Δϝιουͷऔಘ
  11. 3.APIͷઃܭ 2. API΁ͷΞΫηεճ਺͸ۃྗ࠷খݶʹ ɹ❌ҎԼ͸Α͘ͳ͍ ex.ຊͷ৘ใΛऔಘ͢ΔAPI 3-4.Ϩεϙϯεઃܭ { "books": [ 00001,

    00002, 00003, 00004, 00005 ] } ←ຊͷID͚ͩͱ͖ͬͯͯ΋ͦ Μͳ࢖͑ͳ͍ΑͶʁ ଟ͘ͷ৔߹ɺଞͷσʔλ΋ඞཁʹͳ Δ͔ΒϦΫΤετճ਺૿͑ͪΌ͏!!!
  12. 3.APIͷઃܭ 2. API΁ͷΞΫηεճ਺͸ۃྗ࠷খݶʹ ɹ⭕ྑ͍ྫ ex.ຊͷ৘ใΛऔಘ͢ΔAPI 3-4.Ϩεϙϯεઃܭ { "books": [ {

    "id": 00001, "name": "ຊͷ໊લ1", "url": "http://example.com/books/00001" }, { "id": 00002, "name": "ຊͷ໊લ2", "url": "http://example.com/books/00002" } ] }
  13. Q.࣍ͷAPIΛ࡞੒͢Δͱ͖ͷద੾ͳURL ͱHTTPϝιουΛڭ͍͑ͯͩ͘͞ɻ 3.APIͷઃܭ https://numahouse.com ʹଓ͘ɺ URL HTTPϝιου API͕ఏڙ͢Δػೳ /users/ GET

    ϢʔβʔҰཡΛऔಘ /users/1 GET ID͕1ͷϢʔβʔΛऔಘ /?????? ??? ϢʔβʔΛ࡞੒ /?????? ??? ID͕1ͷϢʔβʔΛ࡟আ /?????? ??? ID͕1ͷϢʔβʔΛߋ৽
  14. ਖ਼ղ 3.APIͷઃܭ URL HTTPϝιου API͕ఏڙ͢Δػೳ /users/ GET ϢʔβʔҰཡΛऔಘ /users/1 GET

    ID͕1ͷϢʔβʔΛऔಘ /users/ POST ϢʔβʔΛ࡞੒ /users/1 DELETE ID͕1ͷϢʔβʔΛ࡟আ /users/1 PUT ID͕1ͷϢʔβʔΛߋ৽
  15. ૣ଎΍ͬͯΈΔʂ 4.APIΛखݩͰ࢖ͬͯΈΔ $ curl -X GET “http://www.omdbapi.com/? t=Bohemian+Rhapsody&&apikey=͋ͳͨͷapiΩʔ" 1. λʔϛφϧΛ։͘

    2. λʔϛφϧͰҎԼͷίϚϯυΛୟ͍ͯϦΫΤετ ↓curlͷΦϓγϣϯ -X [Method] Ͱϝιουࢦఆ ↑APIͱύεύϥϝʔλͷࢦఆ APIτʔΫϯͷࢦఆ(ྲྀग़ݫې!!)↑
  16. Ϩεϙϯε 4.APIΛखݩͰ࢖ͬͯΈΔ {"Title":"Bohemian Rhapsody","Year":"2018","Rated":"PG-13","Released":"02 Nov 2018","Runtime":"134 min","Genre":"Biography, Drama, Music","Director":"Bryan Singer","Writer":"Anthony

    McCarten (story by), Peter Morgan (story by), Anthony McCarten (screenplay by)","Actors":"Rami Malek, Lucy Boynton, Gwilym Lee, Ben Hardy","Plot":"The story of the legendary rock band Queen and lead singer Freddie Mercury, leading up to their famous performance at Live Aid (1985).","Language":"English","Country":"UK, USA","Awards":"N/ A","Poster":"https://m.media-amazon.com/images/M/ MV5BMTA2NDc3Njg5NDVeQTJeQWpwZ15BbWU4MDc1NDcxNTUz._V1_SX300.jpg","Ratings" :[{"Source":"Internet Movie Database","Value":"8.1/10"},{"Source":"Rotten Tomatoes","Value":"61%"}, {"Source":"Metacritic","Value":"49/100"}],"Metascore":"49","imdbRating":" 8.1","imdbVotes":"314,530","imdbID":"tt1727824","Type":"movie","DVD":"12 Feb 2019","BoxOffice":"N/A","Production":"20th Century Fox","Website":"http://www.bohemianrhapsody.com","Response":"True"}
  17. ݟ΍͘͢͢Δͱ 4.APIΛखݩͰ࢖ͬͯΈΔ { "Title": "Bohemian Rhapsody", "Year": "2018", "Rated": "PG-13",

    "Released": "02 Nov 2018", "Runtime": "134 min", "Genre": "Biography, Drama, Music", "Director": "Bryan Singer", "Writer": "Anthony McCarten (story by), Peter Morgan (story by), Anthony McCarten (screenplay by)", "Actors": "Rami Malek, Lucy Boynton, Gwilym Lee, Ben Hardy", "Plot": "The story of the legendary rock band Queen and lead singer Freddie Mercury, leading up to their famous performance at Live Aid (1985).", "Language": "English", "Country": "UK, USA", "Awards": "N/A", "Poster": "https://m.media-amazon.com/images/M/ MV5BMTA2NDc3Njg5NDVeQTJeQWpwZ15BbWU4MDc1NDcxNTUz._V1_SX300.jpg", "Ratings": [
  18. ݟ΍͘͢͢Δͱ 4.APIΛखݩͰ࢖ͬͯΈΔ { "Title": "Bohemian Rhapsody", "Year": "2018", "Rated": "PG-13",

    "Released": "02 Nov 2018", "Runtime": "134 min", "Genre": "Biography, Drama, Music", "Director": "Bryan Singer", "Writer": "Anthony McCarten (story by), Peter Morgan (story by), Anthony McCarten (screenplay by)", "Actors": "Rami Malek, Lucy Boynton, Gwilym Lee, Ben Hardy", "Plot": "The story of the legendary rock band Queen and lead singer Freddie Mercury, leading up to their famous performance at Live Aid (1985).", "Language": "English", "Country": "UK, USA", "Awards": "N/A", "Poster": "https://m.media-amazon.com/images/M/ MV5BMTA2NDc3Njg5NDVeQTJeQWpwZ15BbWU4MDc1NDcxNTUz._V1_SX300.jpg", "Ratings": [ ↓͜͜ʹϙελʔ৘ใ͕͋ΔΈ͍ͨ ←λΠτϧ ←ެ։೔
  19. ࣮ࡍʹ͸ϓϩάϥϜͰॲཧ͠·͢ 4.APIΛखݩͰ࢖ͬͯΈΔ // ྫ͑͹SwiftͰͪΐͪΐ͍ͱ࣮૷͢Δͱ͜Μͳ͔Μ͡ // Outlets @IBOutlet weak var movieInput:

    UITextField! @IBOutlet weak var movieLabel: TextLabel! // Actions @IBAction func searchButton(_ sender: Any){ let url = "http://www.omdbapi.com/?t=\(movieInput.text!)&apikey=288c43ad" getURL(url: url) //ଓ͖ͷॲཧ } getURL(url: String){ do{ let apiURL = URL(string: url) let data = try Data(contentOf: apiURL) let json = try JSONSerialization.jsonObject(with: data) print(json) }catch{ self.movieLabel.text = "αʔόʔʹ઀ଓͰ͖·ͤΜɻ" } }
  20. seminar = Seminar(API, you) hands_on_selected = \ seminar.is_hands_on_selected() if hands_on_selected:

    logger.info('ϋϯζΦϯ͍ͥ͘!!') seminar.start_hands_on_proc() else: logger.info('ղࢄʙ') seminar.end_proc() ࢒Γ͸
  21. 1. AWS API gatewayͱLambdaؔ਺ͰAPI࡞੒ ϑϩʔ 0. AWSʹొ࿥&IAMϢʔβʔΛઃఆ 1. Ͳ͏͍͏APIʹ͢Δ͔ܾΊΔ 2.

    APIઃܭ 3. Lambdaؔ਺Λ࣮૷ 4. API gatewayͰ৽͍͠apiΛ࡞੒ 5. 3-4Λඥ͚࣮ͮͯߦͯ͠ΈΔ ϋϯζΦϯ