REST ifadesinde, bir kaynak ile temsil arasındaki fark nedir?


9

HTTP işleminden durumun gösterilmesi ve bir durumdan diğerine geçiş olarak hizmet işlemlerinin modellenmesini sağlayan REST anlayışım. Topluluk tarafından saygı duyulan akıllı bir geliştirici / mimar olduğunu bildiğim Jimmy Bogard'ın bu makalesini okuduğum zamana kadar kaynakları her zaman hizmet tarafı devletin temsili olarak anladım . Söz konusu yayından belirli bir ifade alıntılamak için

Temsil biraz farklıdır - kaynağın geçerli durumunu (istendiğinde) açıklar .

Bu beni şaşırttı. Konuyla ilgili genel kabul gören görüş nedir?


1
Kontrol etmek isteyebilirsiniz: Burada hangi konular hakkında soru sorabilirim? . Fikir anketleri Programcılar için konu ile ilgili değildir.
Adam Zuckerman

2
Peki, bu sayfada listelenen her şeyin siyah beyaz cevabı yok, tüm düşünceleri var. Ayrıca, bu sorunun görüş hakkında nasıl olduğundan emin değilim. Sadece sorumda "görüş" kelimesini kullandığım için mi?
Suhas

Öncelikle evet. Ne yazık ki (ya da belki de neyse ki), “görüş”, “en iyi uygulama” ve benzerleri, “beynin olması gereken boş bir rezonant boşluk” ile güçlü bir şekilde ilişkilendirilmiştir. uzaktan ve ondan sonra paça gidin. Kelime tanımları arayan insanlar genellikle en kötü suçlulardır. Hangi spesifik sorunu çözmeye çalışıyorsunuz?
Robert Harvey

1
Sorunuza gelince, bir kaynak yalnızca "internette adresli bir şey" iken, bir temsil "İnternet'teki şeyin yeniden sunulma biçimi" dir. Bir dosya, bir web sayfası veya bir JSON belgesi olabilir. Word belgesi veya e-tablo gibi belirli bir dosya türü olabilir. Tüm bu durumlarda temsil, aldığınız şeydir. "Kaynağın mevcut durumu", öğenin son alınışından bu yana değişmiş olabileceğinin tanınmasıdır.
Robert Harvey

Yanıtlar:


14

Kısa cevap

Harita bölge değil.

Daha uzun cevap - şey REST ile olduğu gibi, başlamak için yer Roy Fielding ile tez ; özellikle bölüm 5 . Mevcut sorunuz için bölüm 5.2.1'i istiyorsunuz.

REST dört arabirim kısıtlamasıyla tanımlanır: kaynakların tanımlanması; temsiller yoluyla kaynakların manipülasyonu; kendini tanımlayan mesajlar; ve uygulama durumunun motoru olarak hiper ortam.

Kaynak

REST'teki bilgilerin soyutlanması bir kaynaktır. Adlandırılabilecek herhangi bir bilgi bir kaynak olabilir: bir belge veya resim, geçici bir hizmet (ör. "Los Angeles'ta bugünün hava durumu"), diğer kaynakların bir koleksiyonu, sanal olmayan bir nesne (örn. Bir kişi), vb. . Başka bir deyişle, bir yazarın köprü metni başvurusunun hedefi olabilecek herhangi bir kavram, bir kaynağın tanımına uymalıdır. Kaynak, zaman içindeki belirli bir noktada eşleştirmeye karşılık gelen varlık için değil, bir dizi varlık için kavramsal bir eşlemedir.

temsil

REST bileşenleri, o kaynağın geçerli veya amaçlanan durumunu yakalamak için bir temsil kullanarak ve bu gösterimi bileşenler arasında aktararak bir kaynak üzerinde eylem gerçekleştirir. Temsili bir bayt dizisi ve bu baytları tanımlamak için temsili meta verileridir. Bir gösterim için yaygın olarak kullanılan ancak daha az kesin olan adlar şunlardır: belge, dosya ve HTTP iletisi varlığı, örnek veya değişken.

Bir gösterim verilerden, verileri tanımlayan meta verilerden ve bazen de meta verileri tanımlayan meta verilerden (genellikle mesaj bütünlüğünü doğrulamak amacıyla) oluşur.

Yani: "Los Angeles'ta bugünün hava durumu" bir kaynaktır. Aday beyanları şunları içerecektir: ulusal hava durumu servisinden en son tahminleri içeren bir metin belgesi; hava durumu radarının görsel bir temsili ve tahminin ses kaydı.


2

Kaynak, üzerinde çalıştığınız şeydir. Örneğin, belirli bir lambayı değiştirmek için bir API'niz varsa, kaynak lambanın kendisidir. Bir kaynak fiziksel (ör. Lamba, kişi) veya fiziksel olmayan (ör. Makale, rol, veritabanındaki bir satır) olabilir, bir kaynak birincil (örneğin denge) veya türetilebilir (örneğin işlem) olabilir. Bir kaynak belirli bir varlığı ifade edebilir (örn. Bu lamba soketine takılan beşinci lamba) veya farklı zamanlarda farklı varlıklarla eşleşen bir role başvurabilir (örneğin, şu anda kurulu lamba, 5 Ağustos 2008'de kurulan lamba) veya birden fazla objeye eşlenebilir (örn. evdeki tüm lambalar).

Bir kaynağın temsili, hizmetinizin kaynağın durumunu, örneğin lambanın durumunu temsil eden XML, JSON'u iletişim biçimidir.

REST API'sinde, kaynak tekdüze bir tanımlayıcı (ör. URI) ile tanımlanır. Tek bir kaynağın birden çok temsili olabilir, HTTP REST API'sinde normalde HTTP Content-Type ve Accept üstbilgilerinde kullanmak istediğiniz temsili belirtirsiniz.

İstemci sunucusu mimarisindeki önemli gerçekleştirmelerden biri, kaynağı istemciye getirememeniz ve bunu sizin yaptığınız gibi yapmaya çalışmamanızdır. Bunun yerine, REST API'sinde, kaynağın temsillerini aktararak bir kaynağı uzaktan yönetirsiniz. Bunu düşünün, lambayı FedEx ile yapmayın, böylece müşteri doğrudan lambayı manipüle edebilir, ancak hizmet lambanın XML / JSON / protobuf / CSV temsilini oluşturur ve istemci amaçlanan manipülasyonların bir temsilini gönderir. Hizmet daha sonra istemci adına lambanın gerçek durumunu değiştirir ya da istemcinin lamba üzerindeki işlemleri yapmaya yetkili olup olmadığını söyler. Bu açık / bölünmüş saç gibi görünebilir, ancak not edilmesi gereken önemli şey, temsilin kaynağın kendisi olmamasıdır,


1

Bir kaynak bir fatura olabilir.

Temsil, belirli bir zamanda JSON biçiminde veya XML biçiminde bir faturadır. Aynı faturayı daha sonraki bir tarihte aynı kaynak olacak ancak potansiyel olarak farklı bir durumda (iptal edilmiş, ödenmiş vb.) Alabilirsiniz.

Faturanın şu anki durumunu alırsınız (örneğin: veritabanındaki tüm fatura verileri) ve başka bir cihaza (örneğin: bir tarayıcı)

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.