Wpis z mikrobloga

#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?
  • 13
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? ;P

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


A jakieś inne podejście bez HTTPS? Czyli się nie obędzie bez tego przy zastosowaniu uniwersalnego WS ze względu na ten token?
@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ę tak:

Klucz wysyłasz w headerze:

My-AccessToken:

W apce webowej możesz ustawiać customowe headery w XmlHttpRequest http://stackoverflow.com/questions/19661157/how-to-add-header-data-in-xmlhttprequest-when-using-formdata Chociaż pewnie używasz czegoś typu jQuery, więc w praktyce będzie to wyglądało inaczej. Np. angular.js bardzo fajnie wspiera takie rzeczy.

W apce webowe tego tokena możesz składować ciasteczku, albo na nowszych
@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 odczytywać.

Do SPA nie jestem przekonany, ja tu przyszedłem oderwany cepem od Web Formsów ;P Ale chyba zabawy z JS