Jedna aplikacja stojaca na hoscie “X”, wielu klientow na roznych hostach w sieci Internet.
Klienci maja korzystac z bazy danych aplikacji na hoscie “X”, maly handicap : host “X” udostepnia tylko ruch po HTTP, malo tego, nie chodzi o sam numer portu, rowiez tylko ruch HTTP jest przepuszczany.
Zalozenie jest wiec takie, ze jesli wykonam rzadanie http://aplikacja_klient.pl/ ,aplikacja zamiast pytac lokalna baze MySQL, wyslaloby opakowane w dokument http zapytanie SQL do hosta “X”, ktory przetworzy rzadanie HTTP na plain SQL, wykona zapytanie i odpowiedz serwera SQL opakuje z powrotem w dokument HTML i zwroci jako odpowiedz.
Sa jakies gotowce tego typu ? Jesli nie ma to jak sie za cos takiego zabrac ?
To się nazywa szumnie “API”
Chociaż trochę przegięciem gruchy jest robienie akrobacji do obejścia głupiej polityki hostingu / administracji / firewalla.
I musisz je dobrze przemyśleć, konkretnie w kwestii autentykacji / autoryzacji.
Pierwszy złośliwy klient wysyłający “DROP DATABASE” zamyka Ci temat.
[quote=Tomash]I musisz je dobrze przemyśleć, konkretnie w kwestii autentykacji / autoryzacji.
Pierwszy złośliwy klient wysyłający “DROP DATABASE” zamyka Ci temat.[/quote]
Jasne, zdaje sobie z tego sprawe.
Pozostaje jednak pytanie jak to rozwiazac, ze jesli mam w kodzie Article.find(:all)
zeby Rails puscil to do hosta X po HTTP zamiast pytac lokalny serwer mySQL. :), obejdzie sie bez klepania kodu w C ?
Szukam jednak nadal miejsca gdzie sie “wpiac” zeby rails zamist odpytac MySQL, wygenerwal zapytanie po http… , bedzie to bardziej przezroczyste dla samej aplikacji.
To znaczy ja Ci powiem tak: 2 aplikacje piszące do tej samej bazy danych to zazwyczaj (mówię: zazwyczaj!) nie jest dobry pomysł. Powodów jest kilka, ale pierwszy i najważniejszy jest taki że można narobić sobie syfu w bazie, jeśli 2 aplikacje będą miały trochę inną logikę. Na przykład: jedna aplikacja ma bardziej restrykcyjne walidacje niż druga. Wtedy w bazie pojawi Ci się wiele rekordów, które nie będą edytowalne w drugiej aplikacji, itd. Może dobrym rozwiązaniem było by współdzielenie kodu kluczowych modeli.