13 mar 2017

Pierwsze kroki z Python, Flask i Heroku

W trakcie pisania portfela emerytalnego chcę nauczyć się czegoś nowego, stąd pomysł na użycie języka Python. Po krótkich poszukiwaniach znalazłem też prosty framework do API, czyli Flask. Uruchomienie przykładu ze strony Flask na localhost poszło jeszcze szybciej niż postawienie szkieletu strony w Angular i sprowadza się do utworzenia jednego pliku i wywołania dwóch komend w konsoli. Nie chcę przepisywać treści z oficjalnej strony więc zainteresowanych odsyłam na http://flask.pocoo.org/

Wybierając Python jako język w którym powstanie backend miałem nadzieję (a nawet byłem przekonany), że będę mógł uruchomić napisane przeze mnie skrypty na hostingu który posiadam. O jakże naiwne było to podejście ;) Nawet jeśli udałoby się uruchomić jakiś prosty skrypt to nie było mowy o zainstalowaniu czegokolwiek - a ja potrzebowałem wspomniany wyżej Flask.
Na szczęście są platformy w chmurze w modelu PaaS (Platform as a Service, czyli dostajemy gotowe całe środowisko w którym uruchamiamy swoje aplikacje). Nigdy nie korzystałem z takich platform, więc znowu pojawiła się okazja do nauki nowych rzeczy. Po szybkim przeszukaniu sieci znalazłem Google App Engine (GAE) oraz Heroku. W obydwu tych miejscach można bez problemu można uruchomić prostą aplikację bez konieczności płacenia, a kiedy potrzebujemy większych zasobów to płacimy za ich zużycie.

Moje pierwsze kroki skierowałem w stronę GAE, ale ilość opcji i skomplikowanie instalacji szybko mnie zniechęciły. Heroku okazało się nie mieć żadnej z tych wad i po krótkiej konfiguracji udało się utworzyć aplikację retirement-savings-api i uruchomić jej pierwszą wersję - standardowe Hello World o którym pisałem we wstępie.
Pewnym zaskoczeniem dla mnie było to, jak uploaduje się aplikację na serwer. Działa to tak, że po stronie serwera mamy uruchomione repozytorium git - więc wystarczy
heroku git:remote -a retirement-savings-api
git add .
git commit -m "stub"
git push heroku master
i aplikacja już jest na serwerze gotowa do działania. Jeszcze słowem wyjaśnienia - komenda heroku wywoływana powyżej pochodzi z narzędzia udostępnionego przez Heroku, ale nic nie stoi na przeszkodzie żeby użyć po prostu
git remote add heroku https://git.heroku.com/retirement-savings-api.git
Zachęcony początkowymi sukcesami postanowiłem przygotować jakieś konkretne dane z których będzie mógł skorzystać frontend. Na początek dodałem statyczny plik z jsonem który API ma odczytywać i po prostu zwracać do klienta. Dopisałem krótką metodę:
@app.route("/test")
def testdata():
    file = open('static/testdata.json', 'r') 
    file_contents = file.read()
    resp = Response(file_contents, status=200, mimetype='application/json')
    return resp
Ponownie commit, push i sprawdzam https://retirement-savings-api.herokuapp.com/test. Wszystko działa jak należy, dane z pliku wyświetlają się, więc teraz pora odebrać te dane po stronie frontu - ale to już materiał na następnego posta.

1 komentarz: