Hej,
jako że wygląda na to że będę trochę siedział w API, szukam informacji, jak do tego podejść. Ktoś ma do polecenia jakieś artykuły, video, własne doświadczenia?
Poniżej prezentacja drogusa o dekoratorach:
Jest rails-api,
Sporo api roznych ostatnio pisalem i preferuje sinatre, (goliath + grape), to sie tez przydac moze http://railscasts.com/episodes/350-rest-api-versioning
Przy tworzeniu api w Railsach wykorzystałbym https://github.com/apotonick/roar-rails, który pozwala zdefiniować co konkretnie mamy przesyłać np. jsonem. Unikałbym rozwiązań w stylu jbuilder (jest wolne). Nie używałbym również gemu representable - można go używać tylko z ActiveRecord (domyślnie).
Do testowania api możesz używać curla, albo np. gem api_taster.
Jeśli planujesz używać devise to na pewno nie korzystaj z Basic Auth. Mamy na Heroku aplikację, gdzie Basic Auth (ze standardowo skonfigurowanym bcryptem) zajmuje około 70-80% czasu zapytania do serwera.
Ja teraz bym użył do API active model serializers, tylko w czsasie robienia tej prezentacji ten gem był w bardzo wczesnej fazie.
@filiptepper: sprawdzaliście co tak długo zajmuje? Nie używam teraz nigdzie devise, ale to dziwnie wygląda…
Używam tego gemu, bardzo sobie chwalę.
BCrypt. Czego się w normalnej aplikacji nie czuje, bo weryfikacja nazwy użytkownika i hasła odbywa się tylko raz.
Ja używam RocketPants + rabl
Ach, myślałem, że chodzi o samo devise - co byłoby dziwne. Też używam bcrypta, będę musiał sprawdzić. Do API fajnie działa to co mają w githubie, tzn. uproszczony OAuth - wysyłasz POST /authentications i później tak stworzonym kluczem można się logować.
Co do bcrypta jeszcze, to kiedyś rozważałem mielenie tego na poziomie bazy: http://www.postgresql.org/docs/current/static/pgcrypto.html, może dałoby radę uciąć trochę ten czas.
Btw. jaki content type dla requestów preferujecie? application/x-www-form-urlencoded czy application/json?
Ja używam:
content_type ‘application/json; charset=utf-8’
+1 dla application/json
Wszystko zależy od tego jak będzie uzyskiwany dostęp do api. Oczywiście application/json jest chyba najbardziej prawidłowe, ale czasami są sytuacje nie do przeskoczenia (klientowi się nie wytłumaczy) i trzeba być przygotowany również na wykorzystywanie application/x-www-form-urlencoded.
Ale jak robisz api od zera to application/json.
Nie wiem tylko, na ile to pomoże - bcrypt w Rubym i tak jest w już rozszerzeniem w C, chyba aż tak dużej różnicy nie będzie?
Nie używam jakoś szczególnie dużo bcrypta w rubim, ale z tego co widzę ( https://github.com/codahale/bcrypt-ruby ) to ma możliwość zmiany cost factor (a nawet kalibracji pod konkretny sprzęt- calibrate(upper_time_limit_in_ms) ).
Bcrypt powinien być wolny, ale Aaron w readme pisze o potrzebie zmiany cost factor w niektórych przypadkach, próbowaliście?
Nieco z innej beczki. Czego używacie do testowania API?
Czy są jakieś narzędzia, które z testów potrafią wygenrować sensowną dokumentację?
Ja używam rspec + https://github.com/collectiveidea/json_spec testy są integracyjne, czyli uderzają po bazie i używają rzeczywistych modeli. Niestety nie jestem jakoś super zadowolony z tego rozwiązania. Testy ciężko się utrzymuje, wolno działają i wygenerowania z nich dokumentacja nie jest jakoś specjalnie przydatna.
Hmm a dlaczego używacie do tego bcrypt zamiast md5/sha1?
Bcrypt jest domyślny w Devise, nie trzyma soli w osobnym polu i nie jest bruteforce’owalny w tak krótkim czasie jak sha1 czy, nie daj boże, md5.