REST tətbiqlərinin aktiv olmadığı halda, oturumları necə idarə edirsiniz?

Mənə bəzi aydınlıq lazımdır. REST haqqında oxumaq və RESTful applications yaratmaq. Vikipediyanın məlumatına görə, REST özü dövlət köçürməsinin təmsilçisidir. Buna görə də, bütün bu sivilizasiyalı gobbledeygooku başa düşmürəm.

Vikipediya:

Hər hansı bir zamanda, müştəri ya ərizə və ya "tək" arasında keçid prosesində ola bilər. İstirahətdə olan müştəri istifadəçi ilə qarşılıqlı əlaqə qura bilər, lakin heç bir yük yaratmır və bir neçə serverdə və ya ağda hər hansı bir müştəri saxlamır.

Onlar yalnız sessiya / proqram katmanı veri saxlama istifadə etmədiklərini söyləyirlərmi?

REST-in bir məqsədi, URI-nin girişə uyğun və əlçatan olması, məsələn, mesaj içərisində paging istəklərinin gizləməyəcəyi və GET URI-nın istək hissəsinin səhifəsinin nömrəsini yaratmaqdır. Mənə məntiq verir. Lakin müştərilərin heç biri (seans verisi) heç bir server tərəfində saxlanılmadığını söyləyərək, artıq gəmiyə gedir.

Bir mesaj sıramım olsaydı və mənim istifadəçi mesajı oxumaq istədi, amma onları oxuyarkən, bütün iclasda keçən göndəricilərin bəzi mesajlarını bloklamaq istədi? Server tərəfində saxlamağa və istifadəçi tərəfindən server tərəfindən bloklanmayan yalnız mesajlara (və ya mesaj identifikatorlarına) göndərmək məntiqli deyildir?

Yeni bir mesaj siyahısını istəmirəm hər dəfə mesaj göndəricilərin bütün siyahısını göndərməməlisən? Mənə aid mesajların siyahısı ümumiyyətlə paylaşılan bir qaynaq olmamalıdır / olmamalıdır.

Yenə də bunu anlamaq üçün çalışırıq. Biri, xahiş edirəm.


Yeniləmə:

Mənə kifayət qədər qucaqlaşmır ki, cavab verən bir sual tapdım: REST- də dövləti necə idarə etmək vacib olan müştərinin dövləti hər bir istək üzrə qəbul edilməlidir ... Ugg .. çox yerüstü görünür. Bu doğru mu?

446
23 июня '10 в 23:30 2010-06-23 23:30 Zak 23 İyun tarixində saat 23: 30-da başlayacaq 2010-06-23 23:30
@ 15 cavab

Əsas izahat:

Serverdə müştəri sessiya vəziyyəti yoxdur.

Dövlət qəsd etmədən, bu, server server tərəfində müştəri seansı haqqında heç bir dövlət saxlamır deməkdir.

Müştəri seansı müştəridə saxlanılır. Bir vətəndaşsız server, hər bir server istənilən vaxt istənilən müştəriyə xidmət edə biləcəyini, sessiyalara və ya əlavə iclaslara heç bir aidiyyəti yoxdur. Müvafiq iclas məlumatları müştəri üzərində saxlanılır və zəruri hallarda serverə ötürülür.

Bu, veb-serverin alış-veriş səbəti kimi biznes obyektləri haqqında dövlətin qorunması üçün əlaqə qurduqları digər xidmətlərə mane olmur, lakin müştərinin ərizəsi / sessiyasının mövcud vəziyyəti barədə deyil.

Müştəri ərizəsinin vəziyyəti heç vaxt serverdə saxlanmır, lakin müştəridən lazım olan bütün yerlərə köçürülməlidir.

ST burada REST, Dövlət Transferdən gəlir. Siz onu saxlayan server yerinə statusunu ötürür. Bu, milyonlarla eyni zamanda istifadəçiyə qədər genişləndirmək üçün yeganə yoldur. Milyonlarla sessiya milyonlarla sessiya olduğundan başqa heç bir səbəb olmasaydı.

Sessiyanın idarə olunması üzrə yüklənmə bütün müştərilər üçün amortizasiya olunur, müştərilər oturum vəziyyətini saxlayırlar və serverlər dövlət qorunmasız çox sifariş və ya daha çox müştəriyə xidmət edə bilərlər.

Hətta yalnız 10,000 paralel istifadəçiyə ehtiyac duyduğunuz bir xidmət üçün hətta xidmətinizi vətəndaşlığı olmayan hala gətirmək lazımdır. On minlərlə adam on minlərlədir, vaxt və məkan xərcləri bununla əlaqəli olacaq.

Stateless, HTTP və şəbəkə bütövlükdə işləmək üçün nəzərdə tutulmuşdur və bu, ümumiyyətlə, daha sadə bir tətbiqdir və sessiya qrupu qrupunu dəstəkləmək üçün bir sıra server yanlısı məntiqin yerinə bir kod yolu var.

Çox sadə bir tətbiq prinsipi var:

Bunlar prinsiplərdir, tətbiqlər deyil, bu prinsiplərə əməl etdiyiniz üsul fərqli ola bilər.

Beləliklə, beş əsas prinsip :

  1. Hər bir "şeyə" şəxsiyyət vəsiqəsini verin.
  2. Bir şeyi birlikdə bağlayın
  3. Standart metodlardan istifadə edin
  4. Multi-baxım resursları
  5. Vətəndaşlıq olmadan ünsiyyət

Bir REST dissertasiyasında kimlik və ya icazə vermək barədə bir şey yoxdur.

Tələbinin doğrulanmasından fərqli heç bir şey olmadığı üçün RESTful, istəkdən deyil. Doğrulama RESTful müzakirə ilə əlaqəli deyil.

StackOverflow üçün xüsusi tələbləriniz üçün vətəndaşlığı olmayan bir tətbiq yaratmağı necə çox çətinləşdirir.

REST baxımından autentifikasiya və icazənin tətbiqi daha genişdir və müxtəlif tətbiqetmə yanaşmaları İnternetdə bütövlükdə ətraflı təsvir edilmişdir.

Bu arzu / yardım haqqında məlumat istəyən şərhlər "artıq lazım deyil" kimi qeyd edilməlidir .

454
23 июня '10 в 23:35 2010-06-23 23:35 cavab 23 iyun 2010- cu il tarixində saat 10: 35-də 2010-06-23 23:35 istifadəçi tərəfindən verilir

Dövlətin olmaması deməkdir ki, hər bir HTTP sorğu tamamilə təcrid olunur. Bir müştəri bir HTTP sorğu edərkən, server bu tələbi yerinə yetirməsi üçün lazım olan bütün məlumatları ehtiva edir. Server heç vaxt əvvəlki istəklərdən məlumat ala bilmir. Bu məlumat vacibdirsə, müştəri növbəti sorğu ilə yenidən göndərməlidir. Vətəndaşsızlıq da yeni imkanlar gətirir. Yük dağılımı olan serverlər arasında vətəndaşlığı olmayan tətbiqin yayılması daha asandır. Vətəndaşsız müraciət də asanlıqla önlənə bilər.

Əslində iki növ dövlət var. Müştəri üzərində yaşayan tətbiqin vəziyyəti və serverdə yaşayan qaynağın vəziyyəti.

Bir web xidməti, həqiqətən, bir müraciət etdiyiniz zaman müraciətinizin vəziyyətinə diqqət yetirməlidir. Zamanın qalan hissəsi, sənin var olduğunu da bilmir. Bu deməkdir ki, bir müştəri hər hansı bir müraciət etmədikdə, server onu işləməməsi üçün lazım olan bütün ərizələr daxil etməlidir.

border=0

Resurs statusu hər bir müştəri üçün eyni və serverdə düzgün yerdir. Serverə bir şəkil yükləyərkən, yeni bir resurs yaradın: yeni bir görünüşün öz URI var və gələcək istəklərin hədəfi ola bilər. Bu resursu HTTP vasitəsilə əldə edə, redaktə edə və silə bilərsiniz.

Ümid edirəm ki, bu, vətəndaşlığı nə deməkdir və fərqli dövlətləri fərqləndirir.

236
24 июня '10 в 5:56 2010-06-24 05:56 Cavab Srikar Doddi tərəfindən 24 iyun 'da 5:56' də verildi 2010-06-24 05:56

Onlar yalnız sessiya / proqram katmanı veri saxlama istifadə etmədiklərini söyləyirlərmi?

Xeyr Bu mövzuda əhəmiyyətli bir şəkildə danışmırlar.

Onlar "iclas" ı müəyyən etmədiklərini söyləyirlər. Giriş etməyin. Çıxış etməyin. Tələb ilə etimadnaməsini verin. Hər bir tələb birinə layiqdir.

Hələ də data mağazalarınız var. Hələ də təsdiq və icazəniz var. Siz sadəcə sessiyanın yaradılması və sessiya vəziyyətindən qənaət etməyin.

Əslində, hər bir sorğunun (a) tamamilə tək olması və (b) nəhəng bir paralel server təsərrüfatına heç bir real iş etmədən trivial şəkildə emal edilə bilməsi. Apache və ya Squid kör-qat və müvəffəqiyyətli RESTful istəkləri ötürə bilər.

Bir mesaj sıramım olsaydı və mənim istifadəçi mesajı oxumaq istədi, amma onları oxuyarkən, bütün iclasda keçən göndəricilərin bəzi mesajlarını bloklamaq istədi?

Istifadəçi bir filtrə ehtiyac duyarsa, hər bir sorğu üçün bir filtre qoyun.

Yalnızca istifadəçi tərəfindən bloklanmayan serverə mesajlar (və ya mesaj identifikasiyası) göndərmək məlum deyil ...

Bəli RESTful URI tələbində bir filtr təmin edin.

Yeni bir mesaj siyahısını istəmirəm hər dəfə mesaj göndəricilərin bütün siyahısını göndərməməlisən?

Bəli Bu "göndərən siyahı" nə qədər böyükdür? PC-lərin qısa siyahısı?

GET tələbi çox böyük ola bilər. Gerekirse, bir istekte olduğu kimi görünse de, bir POST isteğini sınayabilirsiniz.

73
23 июня '10 в 23:44 2010-06-23 23:44 Cavab S.Lott tərəfindən 23 İyun 'da saat 11: 44' da 2010-06-23 23:44 'də verilir

Serverlə tamamilə qeyri-partizan qarşılıqlı əlaqələri dəstəkləyən tamamilə doğruysanız, bu müştəri üçün əlavə bir yük qoyur. Ancaq tətbiqin ölçüsünü nəzərdən keçirirsinizsə, müştərilərin hesablama gücü müştərilərin sayına görə mütənasibdir. Buna görə, çox sayda müştəriyə ölçekleme daha çox işə yaradılıb.

Müəyyən müştəri qarşılıqlı əlaqələrlə əlaqəli bəzi məlumatları idarə etmək üçün server üzərində kiçik bir məsuliyyət qoyduqdan sonra, bu yük tez serveri istehlak etməyə başlaya bilər.

Bu kompromisdir.

33
24 июня '10 в 5:41 2010-06-24 05:41 Cavab Darrel Millerə 24 iyun 2010-cu ildə 5: 41-də verilmişdir 2010-06-24 05:41

İstifadəçi tətbiqinin idarəetmə statusunun tarixi görünüşü

Ənənəvi mənada sessiyalar server içərisində tətbiqdə istifadəçinin vəziyyətini qoruyur. Bu, axındakı cari səhifə və ya əvvəllər daxil ola bilər, lakin əsas məlumat bazasında saxlana bilməz.

Bu ehtiyacın səbəbi xüsusi proqramları (məsələn, brauzerinizə aid) tətbiqlər və ya plug-ins yaratmadan dövləti effektiv şəkildə qorumaq üçün müştəri tərəfində standartların olmaması idi.

HTML5 və XML başlığı tələbi, müştəri (yəni brauzer) üzərində standart şəkildə tətbiqin vəziyyəti daxil olmaqla, kompleks məlumatların saxlanması konsepsiyasını standartlaşdırır, server arasında keçid etmədən müraciət edir.

REST xidmətlərinin ümumi istifadəsi

REST xidmətlərinin yerinə yetirilməsi üçün lazım olan bir əməliyyat olduqda və ya məlumat almaq lazımdırsa, adətən deyilir.

REST xidmətlərinin son istifadəçi üçün deyil, müştəri tətbiqi ilə çağırılması nəzərdə tutulur.

Doğrulama

Serverə edilən hər hansı bir müraciət üçün, sorğunun bir hissəsi icazə yetkisini ehtiva etməlidir. Bu tətbiq necə tətbiqə bağlıdır, amma ümumiyyətlə ya BASIC identifikasiyası və ya CERTIFICATE formasıdır.

Forma əsaslı autentifikasiya REST xidmətləri tərəfindən istifadə edilmir. Lakin, yuxarıda göstərildiyi kimi, REST xidmətləri istifadəçi tərəfindən deyil, ərizə ilə nəzərdə tutulmur. Tətbiq identifikasiya simvolu əldə etmək üçün idarə edilməlidir. Mənim vəziyyətimdə, avtomatik sınaq üçün autentifikasiya və sadə HTTP identifikasiyası üçün Google-a qoşulmaq üçün OAuth 2.0 ilə JASPIC çerezləri istifadə etdim . Mən də yerli test üçün JASPIC vasitəsilə HTTP başlıqlı identifikasiyası istifadə etdim (eyni yanaşma SiteMinder-də edilə bilər baxmayaraq)

Bu nümunələrə əsasən, identifikasiya müştəri tərəfində idarə olunur (baxmayaraq ki SiteMinder və ya Google sonda identifikasiya sessiyasını saxlayacaq), bu vəziyyət haqqında heç bir şey edilə bilməz, lakin REST tətbiq xidmətinin bir hissəsidir.

Axtarış İstekleri

REST axtarış sorğuları xüsusi bir qayda tələb olunan və önbelleğe alınmış olduğu GET əməliyyatlarıdır. Sorguda veri almaq üçün lazım olan hər bir şey olduğundan, server iclaslarına ehtiyac yoxdur: identifikasiyası və URI.

Əməliyyat skriptləri

Yuxarıda qeyd edildiyi kimi, müştəri ərizəsi REST xidmətlərini identifikasiya etməklə yanaşı müştəri tərəfində də idarə edir.

Bunun anlamı, bir REST server üçün bir REST xidmətinin [əgər düzgün yerinə yetirilməsə] tələb edilməsi üçün, bir əməliyyatda tələb olunan hər şeyi edən bir istifadəçi əməliyyatı üçün lazım olan hər şeyi ehtiva edir və Skript Əməliyyatı nədir? nümunə.

Bu, adətən, bir POST tələbi ilə aparılır, lakin digərləri də PUT kimi istifadə edilə bilər.

REST-in bir çox uzaqgörən nümunələri (mən bunu özüm etmişəm) HTTP protokolunda müəyyən edilmiş əməlləri yerinə yetirməyə çalışdı, bundan sonra daha pragmatik olmaq qərarına gəldim və yalnız GET və POST qaldı. POST metodu POST-Reddit-GET modelini tətbiq etməməlidir.

Buna baxmayaraq, yuxarıda qeyd etdiyim kimi, müştəri ərizəsi bu xidməti çağırış edən bir şəxs olacaq və lazım olan zaman (hər dəfə deyil) bütün məlumatları istənilən POST tələbi ilə çağırır. Bu, serverə daimi sorğuları maneə törədir.

anket

REST sorğu üçün də istifadə oluna bilər, baxmayaraq ki brauzerinizin uyğunluğu səbəbindən istifadə etməyəcəksiniz. Bunun üçün mən inkişaf etdiyim WebSockets istifadə edərdim

30
25 июля '14 в 1:53 2014-07-25 01:53 cavab 25.04.2014 tarixində Archimedes Trajano tərəfindən 1:53 2014-07-25 01:53 tarixində verilir

REST çox mücərrəddir. Bəzi yaxşı, sadə və real nümunələrə sahib olmaq üçün kömək edir.

Tumblr, Instagram, Facebook və Twitter kimi sosial şəbəkələr üçün bütün əsas tətbiqləri götürün. Onların hamısı bir kaydırıcı görünüş var, daha da aşağıya doğru hərəkət edərkən, daha çox məzmun görürsünüz, daha uzaq və daha uzaqsınız. Ancaq, hamımızın kaydırdığınız yeri kaybettiğiniz andan başlamış olduğunuz anı yaşadıq. Məsələn, tətbiqdən çıxarsanız, yenidən açdığınız zaman təkrar üstə dönəcəksiniz.

Bunun səbəbi serverin oturumunuzun vəziyyətini saxlamamış olmasıdır. Təəssüf ki, kaydırma mövqeyi sadəcə müştəri üzrə RAM-da saxlanılırdı.

Xoşbəxtlikdən, yenidən əlaqə qurarkən daxil olmalısınız, ancaq bu yalnız müştəri sertifikanızın qeydiyyat şəhadətnaməsini saxlamadığından ibarətdir. Proqramı qaldırın və yenidən bərpa et və server sizin IP ünvanınızı seansla əlaqələndirməməsi səbəbindən daxil olmanız lazımdır.

RESTə uyğun olduğundan serverinizə bir giriş oturumunuz yoxdur.


İndi yuxarıda göstərilən nümunələr heç bir veb brauzerlə əlaqəli deyil, arxa planda isə tətbiqlər HTTPS vasitəsilə onların host serverləri ilə məlumat mübadiləsi aparır. İstədim ki, REST cookies və brauzerləri və s. Daxil etməməlidir. Müştəri tərəfində sessiya vəziyyətini saxlamaq üçün müxtəlif yollar var.

Ancaq veb-brauzerlərdən bir saniyə danışaq, çünki REST-in başqa əhəmiyyətli bir üstünlüyünə səbəb yoxdur ki, heç kim burada danışmır.

Server oturum vəziyyətini saxlamağa çalışsa, hər bir fərdi müştəri necə müəyyənləşdirməlidir?

Onun IP ünvanından istifadə edə bilmədi, çünki bir çox insanlar ictimai routerdə eyni ünvanı istifadə edə bildi. Beləliklə necə?

MAC ünvanı bir neçə səbəbdən istifadə edə bilməz, ən azından müxtəlif brauzerlərdə və tətbiqdə bir neçə fərqli Facebook hesabına daxil ola bilərsiniz. Bir brauzer asanlıqla digərinə bənzəyir və MAC ünvanları aldatmaq kimi asandır.

Əgər server istənilən müştəri dövlətini tanımaq üçün saxlamağa ehtiyac duyarsa, sorğularınızı işləyib hazırlamaq üçün vaxtdan artıq RAM-da saxlamalı və ya bu məlumatları önləməlidir. Serverlər məhdud miqdarda RAM və cache var, prosessorun sürəti qeyd etmək deyil. Server tərəfi statusu hər üç üstünə əlavə olunur. Ayrıca, server sessiyalarınız haqqında hər hansı bir vəziyyəti saxlayırsa, hər bir brauzer və tətbiq etdiyiniz tətbiq üçün ayrıca istifadə etdiyiniz hər bir cihaz üçün ayrı saxlamalıdır.


Beləliklə ... İndi ümid edirəm ki, REST nə üçün ölçeklenebilirlik üçün çox vacibdir. Ümid edirəm ki, seansın server statusunun serverin ölçeklenebilirliği, avtomobilin sürətləndirilməsi üçün nə üçün olduğunu başa düşməyə başlaya bilərsiniz.


İnsanlar "dövlət" kimi bir məlumat bazasında saxlanılan məlumatlara istinad etdiyini düşünürlər. Xeyr, bu, istifadə etdiyiniz zaman serverin RAM-da olması lazım olan hər hansı məlumatı nəzərdə tutur.

24
10 янв. cavab CommaToast 10 yanvar verilir . 2016-01-10 03:37 '16 'da 3:37' də 2016-01-10 03:37 'də

Ölü, sonrakı istək və cavab arasında xidmətin vəziyyətinin təmin olunmadığını bildirir. Hər bir tələbin öz istifadəçi məlumatları vardır və fərdi şəkildə təsdiqlənir. Ancaq hər bir istəyi hər hansı bir əvvəlki istəkdən bilinir. Bütün dövlət istəkləri seans yönümlüdür, yəni hər bir istək əvvəlki istəklərdə edilmiş dəyişiklikləri bilməli və saxlamalıdır.

A bank proqramı dövlət proqramı nümunəsidir. Bir istifadəçi ilk olaraq qeyd etdikdə, tam əməliyyatlar və çıxış. Bir istifadəçi çıxdıqdan sonra bir əməliyyatı tamamlamağa çalışırsa, bunu edə bilməz.

Bəli, http protokası əsasən vətəndaşlığı olmayan bir protokol deyil, dövlət qənaət etmək üçün HTTP çerezləri yaradırıq. Beləliklə SOAP u mənimdir. Amma bu, istifadə edilən quruluşa bağlı olaraq dövlətin nəzərə alınması ilə də həyata keçirilə bilər.

HTTP qeyri-statikdir, lakin hələ də müxtəlif iclas izleme mexanizmindən istifadə edərək, Java tətbiqində sessiya saxlaya bilərik.

Bəli, biz REST və ya SOAP olub-olmamasından asılı olmayaraq, veb-saytımızda bir sessiya saxlaya bilərik. Bu hər hansı bir üçüncü tərəf kitabxanasından istifadə etməklə həyata keçirilə bilər və ya bunu özünüz edə bilərsiniz.

Http://gopaldas.org/webservices/soap/webservice-is-stateful-or-stateless-rest-soap ünvanından götürülmüşdür.

11
04 сент. Cavab verilir Ata ul Mustafa 04 sep. 2014-09-04 15:03 '14 at 15:03 2014-09-04 15:03

Görürəm ki, burada əsas problem Sessiyanı dövlətlə qarışdırmaqdır. REST, dövləti serverdə saxlamamağınızı göstərirsə də, heç bir şey bir istifadəçi sessiyasını saxlamağa mane olur.

Server vəziyyətini idarə etmə, serverinizin müştərinin nə etdiyini tam olaraq bildiyini (tətbiqin hansı bölməsində göründüyü səhifəni) bilməsi deməkdir. Və bunu etmək lazım deyil.

Oturum saxlamağını minimum səviyyədə saxlamağınızı söyləyən digər kəslərlə razıyam; və bu ümumi mənada baxmayaraq, həqiqətən də tətbiqdən asılıdır. Короче говоря, вы все равно можете хранить сеанс с кэшированными данными для обработки запросов с меньшей нагрузкой на сервер и управлять аутентификацией, предоставляя временный токен аутентификации/доступа для использования клиентом. Всякий раз, когда срок действия сеанса/токена истек, создайте новый файл и попросите его использовать его.