k.....s
k.....s
#programowanie #pytanie #mvc #android #dotnet #csharp #aspnetmvc #ajax

Chciałbym poprosić Was o poradę odnośnie architektury, którą chcę zastosować w mojej aplikacji.

Główne elementy

- Aplikacja webowa (MVC) ASP.NET

- Klient na Androida

- później być może inni klienci (iOS, WP)

Wszystko zbudowane w oparciu o Web serwis wykonany Web API (2), który będzie udostępniał pełną funkcjonalność aplikacji web i klientom mobilnym:

- zakładanie kont

- logowanie

- przeglądanie, dodawanie danych przez zalogowanych użytkowników

Powiedzmy, że po zalogowaniu usera wygeneruje i zwrócę klientowi jakiś identyfikator sesji/token.

Web API powinno otrzymywać ten token każdorazowo kiedy wykonywana jest jakaś akcja kontrolera.

Strona internetowa może sobie trzymać ten token w sesji.

Android może sobie trzymać token nawet w jakiejś zmiennej.

Chyba muszę ten token przekazywać w do API w dodatkowym headerze HTTP?

Bo przecież w aplikacji Androidowej nie będę miał ciasteczek?

Z androida chyba nie będzie problemu.

A jak załączać ten header np. w requestach AJAX ze strony?

Gdzie wtedy trzymać ten klucz po stronie przeglądarki skoro ajax musi go znać żeby odpytać web api?

Jak to sensownie rozwiązać?

I kolejne pytanie:

Jak rozwiązuje się kwestie ładowania danych np. do tabelki na stronie?

Powiedzmy przy pierwszym wejściu na podstronę z listą warzyw chciałbym żeby serwer zwrócił stronę z już uzupełnioną tabelką.

Tutaj musiałbym np. w kontrolerze z kodu C# odwołać się do Web API, pobrać warzywa i wrzucić do widoku.

Potem jeśli sama tabelka ma być odświeżana ajaxem co 30 sekund to znowu muszę to pobierać ajaxem?

Wtedy w dwóch miejscach musiałbym pobierać dane:

w kontrolerze w C# aby zwrócić wypełniony widok przy pierwszym wejsciu na strone, a potem dodatkowo to samo robić jeszcze ajaxem w JS przy odświeżaniu.

Coś mi tu nie gra. Jak to się robi? :) Jakie jest sensowne rozwiązanie?
  • Najlepsze
  • Wszystkie komentarze
aaandrzeeey
Chyba muszę ten token przekazywać w dodawkowym headerze HTTP?


Bo przecież w aplikacji Androidowej nie będę miał ciasteczek?

W takim wypadku musi być https bo ktoś przechwyci token.

Zależy jaki ma być poziom bezpieczeństwa.
aaandrzeeey
A jak załączać ten header np. w requestach AJAX ze strony?


@krukers: Jako parametr webserwisu.

przekazywałbym jeszcze token związany z aplikacją.
aaandrzeeey
@krukers: ponadto możesz dodać podpis cyfrowy do danych, który będzie ważny przez jakiś określony czas.

aplikacja i serwer powinny mieć swoje klucze, którymi będą podpisywały komunikację.
aaandrzeeey
@krukers: szyfrowane połączenie to powinien być standard, chyba, że robisz na zaliczenie.
mathix
@krukers:

Technicznie rzecz biorąc wysyłanie tokena w ciasteczku i headerze to to samo. Content ciasteczek jest wysyłany w specjalnym headerze http://en.wikipedia.org/wiki/http_cookie

Ja to widzę
aaandrzeeey
aplikację, która zyska międzynarodowy rozgłos hehe, serio ;P


@krukers: I bardzo dobrze. Życzę Tobie powodzenia.
k.....o
k.....o
@krukers: Poszukaj prezentacji maxa małeckiego o rest
teddybear69
@krukers: wejdź sobie na codeshool i znajdź darmowy video interaktywny turorial do angular.js... 2 godziny i zajebiście ogarniesz SPA... sprawdź, to może się przekonasz :)
k.....s
k.....s
przekazywałbym jeszcze token związany z aplikacją.


@aaandrzeeey: racja, dobrze, że zwróciłeś uwagę.

Token jako parametr WS... ale skąd go wygodnie pobierać? Z jakiegoś pola hidden widocznego na każdej stronie?
jurandrulez
Przede wszystkim zwieksz mase.
k.....s
k.....s
@mathix:

faktycznie, ale jeśli będę odpalał API z Androida to nie ma chyba po co się bawić w udawanie ciasteczek, dodałbym własny AccessToken tak jak mówisz.

A w apce webowej chyba faktycznie będę to trzymał w ciasteczku. Będzie do tego dostęp z JS i po stronie serwera też wygodnie mogę je
k.....s
k.....s
@aaandrzeeey: nie na zaliczenie. Robię aplikację, która zyska międzynarodowy rozgłos hehe, serio ;P