Elixir & apis - presentation at ElixirConf 2016

99
an introduction APIs(?!) [email protected]

Transcript of Elixir & apis - presentation at ElixirConf 2016

Page 1: Elixir & apis - presentation at ElixirConf 2016

an introductionAPIs(?!)

[email protected]

Page 2: Elixir & apis - presentation at ElixirConf 2016

Victoria * Developer at 46elks * Elixir * EL Passion

Page 3: Elixir & apis - presentation at ElixirConf 2016

APIsweb

Page 4: Elixir & apis - presentation at ElixirConf 2016

[ > ] ”How to design a good API and why it matters”

Page 5: Elixir & apis - presentation at ElixirConf 2016

APIsweb

HTTP

Page 6: Elixir & apis - presentation at ElixirConf 2016
Page 7: Elixir & apis - presentation at ElixirConf 2016

HTTP request

Page 8: Elixir & apis - presentation at ElixirConf 2016

HTTP verbs

aka request methods

Page 9: Elixir & apis - presentation at ElixirConf 2016

Ask for Send Update Remove

Page 10: Elixir & apis - presentation at ElixirConf 2016

Ask for Send Update Remove

GET POST PUT DELETE

Page 11: Elixir & apis - presentation at ElixirConf 2016
Page 12: Elixir & apis - presentation at ElixirConf 2016
Page 13: Elixir & apis - presentation at ElixirConf 2016

cURL - Examplecurl -X POST \ -u <API Username>:<API Password> \ -H "Content-Type: application/x-www-form-urlencoded" \ -d "from=VILLE" \ -d ”message=Hej%20Kul” \ -d "to=+358503672181" \ 'https://api.46elks.com/a1/SMS'

Types

Auth Request Content Type

Request Data

EndpointService

Secure HTTP Socket

Page 14: Elixir & apis - presentation at ElixirConf 2016

So where does one start?

Page 15: Elixir & apis - presentation at ElixirConf 2016

Learn about the API • URL/base url • Endpoint(s) • Response format

Page 16: Elixir & apis - presentation at ElixirConf 2016

http://supernavet.skolverket.se/SusaNavExport/EmilExporter

XML

Page 17: Elixir & apis - presentation at ElixirConf 2016

<response> <mobilenumber>+46766861004</mobilenumber> <displayname>Victoria</displayname> <currency>SEK</currency> … </response>

XML

Page 18: Elixir & apis - presentation at ElixirConf 2016

[{ "mobilenumber": "+46766861004", "displayname": "Victoria", "costtype": "trial", "id": "u471962a39cc22c97415c84be437", "currency": "SEK", "trialactivated": "2016-10-23T15:37", "balance": 200000, "email": "[email protected]" }, { … } ]

json

Page 19: Elixir & apis - presentation at ElixirConf 2016

mix new

Page 20: Elixir & apis - presentation at ElixirConf 2016

mix new apifrenzy

Page 21: Elixir & apis - presentation at ElixirConf 2016

mix new apifrenzy cd apifrenzy

:e /lib/apifrenzy/fetcher.ex

Page 22: Elixir & apis - presentation at ElixirConf 2016
Page 23: Elixir & apis - presentation at ElixirConf 2016
Page 24: Elixir & apis - presentation at ElixirConf 2016

cd apifrenzy iex -S mix

Page 25: Elixir & apis - presentation at ElixirConf 2016

cd apifrenzy iex -S mix Apifrenzy.Fetcher.fetch_educational_resources

Page 26: Elixir & apis - presentation at ElixirConf 2016

cd apifrenzy iex -S mix Apifrenzy.Fetcher.fetch_educational_resources

Fetching educational resources from: http://supernavet.skolverket.se/SusaNavExport/EmilExporter

:ok

Page 27: Elixir & apis - presentation at ElixirConf 2016

Can I haz HTTP requests in Elixir plz?

Page 28: Elixir & apis - presentation at ElixirConf 2016

”Elixir http”

Page 29: Elixir & apis - presentation at ElixirConf 2016

Also a way to find resources by category: http://toolbox.elixir.pm/ by Henrik Nyh https://github.com/henrik/toolbox

Page 30: Elixir & apis - presentation at ElixirConf 2016
Page 31: Elixir & apis - presentation at ElixirConf 2016
Page 32: Elixir & apis - presentation at ElixirConf 2016
Page 33: Elixir & apis - presentation at ElixirConf 2016
Page 34: Elixir & apis - presentation at ElixirConf 2016

HTTPotion. HTTPoison! Tesla?

Page 35: Elixir & apis - presentation at ElixirConf 2016
Page 36: Elixir & apis - presentation at ElixirConf 2016
Page 37: Elixir & apis - presentation at ElixirConf 2016
Page 38: Elixir & apis - presentation at ElixirConf 2016
Page 39: Elixir & apis - presentation at ElixirConf 2016

mix.exs

Page 40: Elixir & apis - presentation at ElixirConf 2016

mix.exs

Page 41: Elixir & apis - presentation at ElixirConf 2016

mix deps.get

Page 42: Elixir & apis - presentation at ElixirConf 2016
Page 43: Elixir & apis - presentation at ElixirConf 2016

mix.exs

Page 44: Elixir & apis - presentation at ElixirConf 2016
Page 45: Elixir & apis - presentation at ElixirConf 2016

cd apifrenzy iex -S mix

Page 46: Elixir & apis - presentation at ElixirConf 2016

cd apifrenzy iex -S mix Apifrenzy.Fetcher.fetch_educational_resources

Page 47: Elixir & apis - presentation at ElixirConf 2016
Page 48: Elixir & apis - presentation at ElixirConf 2016
Page 49: Elixir & apis - presentation at ElixirConf 2016
Page 50: Elixir & apis - presentation at ElixirConf 2016

Look at docs.. (documentation)

Page 51: Elixir & apis - presentation at ElixirConf 2016

RTFM

Page 52: Elixir & apis - presentation at ElixirConf 2016
Page 53: Elixir & apis - presentation at ElixirConf 2016

HEX DOCS

Page 54: Elixir & apis - presentation at ElixirConf 2016
Page 55: Elixir & apis - presentation at ElixirConf 2016
Page 56: Elixir & apis - presentation at ElixirConf 2016
Page 57: Elixir & apis - presentation at ElixirConf 2016
Page 58: Elixir & apis - presentation at ElixirConf 2016
Page 59: Elixir & apis - presentation at ElixirConf 2016
Page 60: Elixir & apis - presentation at ElixirConf 2016
Page 61: Elixir & apis - presentation at ElixirConf 2016
Page 62: Elixir & apis - presentation at ElixirConf 2016
Page 63: Elixir & apis - presentation at ElixirConf 2016
Page 64: Elixir & apis - presentation at ElixirConf 2016
Page 65: Elixir & apis - presentation at ElixirConf 2016
Page 66: Elixir & apis - presentation at ElixirConf 2016
Page 67: Elixir & apis - presentation at ElixirConf 2016
Page 68: Elixir & apis - presentation at ElixirConf 2016

OK Nice!

Page 69: Elixir & apis - presentation at ElixirConf 2016

OK Nice!

Page 70: Elixir & apis - presentation at ElixirConf 2016
Page 71: Elixir & apis - presentation at ElixirConf 2016

status code

Page 72: Elixir & apis - presentation at ElixirConf 2016

Status code200 - OK404 - NOT found

Page 73: Elixir & apis - presentation at ElixirConf 2016

1xx Informational 2xx Success 3xx Redirection 4xx Client Error 5xx Server Error

Page 74: Elixir & apis - presentation at ElixirConf 2016

100 Keep sending 200 Success 301 Move to a different url 401 Unauthorized 500 Server Error - ex: crashed whilst trying.

Page 75: Elixir & apis - presentation at ElixirConf 2016

” http status codes cats ”

Page 76: Elixir & apis - presentation at ElixirConf 2016

https://http.cat/ https://http.cat/200

Page 77: Elixir & apis - presentation at ElixirConf 2016
Page 78: Elixir & apis - presentation at ElixirConf 2016
Page 79: Elixir & apis - presentation at ElixirConf 2016
Page 80: Elixir & apis - presentation at ElixirConf 2016
Page 81: Elixir & apis - presentation at ElixirConf 2016
Page 82: Elixir & apis - presentation at ElixirConf 2016

Let’s!

Page 83: Elixir & apis - presentation at ElixirConf 2016

Self-service setup

46elks.com/signup

Page 84: Elixir & apis - presentation at ElixirConf 2016
Page 85: Elixir & apis - presentation at ElixirConf 2016
Page 86: Elixir & apis - presentation at ElixirConf 2016
Page 87: Elixir & apis - presentation at ElixirConf 2016

workshop

Page 88: Elixir & apis - presentation at ElixirConf 2016

Gothchas & ahaaaa

Page 89: Elixir & apis - presentation at ElixirConf 2016

URI encoded x-www-form-urlencoded

json

Page 90: Elixir & apis - presentation at ElixirConf 2016
Page 91: Elixir & apis - presentation at ElixirConf 2016
Page 92: Elixir & apis - presentation at ElixirConf 2016
Page 93: Elixir & apis - presentation at ElixirConf 2016

Browsers caching

GET response

Page 94: Elixir & apis - presentation at ElixirConf 2016

Keep an eye on repository source code pages. What is the activity?

Stable? Stale? Community there?

Page 95: Elixir & apis - presentation at ElixirConf 2016

Version number. Poison is at 0.10 … Use at your own risk.

I’d say it depends on your confidence and skills, are there still challenges that simply haven’t been solved yet. You can always check pull requests, and forks, and of course ”reported issues” to see

what issues people have.

Page 96: Elixir & apis - presentation at ElixirConf 2016

graphql.org

Page 97: Elixir & apis - presentation at ElixirConf 2016
Page 98: Elixir & apis - presentation at ElixirConf 2016

Free popup 1on1 teaching/ mentoring, workshops/presentations for women in Warszawa [email protected]

Page 99: Elixir & apis - presentation at ElixirConf 2016

TYAvailable as mentor for free to women in tech { Warszaw in December}Victoria [email protected]

46elks.pl open data