Tam olarak Huzurlu programlama nedir?
Tam olarak Huzurlu programlama nedir?
CEVAP
DİNLENMEweb mimari temel ilkesidir. Web konuda şaşırtıcı olan istemcileri (tarayıcıları) ve sunucuları istemci olmadan karmaşık yollar önceden bir şey sunucu hakkında bilmek ve barındırdığı kaynakları içinde etkileşim olmasıdır. Anahtar kısıtlaması sunucu hem de istemci üzerinde anlaşmak gerekirmedyaweb durumda kullanılırHTML.
İlkelerine uygun bir APIDİNLENMEistemci API yapısı hakkında hiçbir şey bilmek gerekmez. Bunun yerine, sunucu istemci hizmeti ile etkileşim ihtiyaçlarının giderilmesini sağlamak gerekiyor. BirHTML formbu bir örnektir: sunucu kaynak ve gerekli alanları konumunu belirtir.Tarayıcı bilgisi göndermek için nerede önceden bilmiyor ve göndermek için önceden ne olduğunu bilmiyor. Bilgi her iki formu tamamen sunucu tarafından sağlanır.(Bu prensibi denirHATEOAS.)
Nasıl bu için geçerli buHTTPve pratikte nasıl uygulanabilir?HTTP fiilleri ve kaynakları etrafında odaklı. Yaygın kullanımı iki fiiller herkes tanır sanırım GET ve POST. Ancak, HTTP standart KOYMAK ve SİLME gibi birçok Diğerleri tanımlar. Bu fiiller o zaman kaynaklar için uygulanan, yönergeleri, sunucu tarafından sağlanan göre.
Örneğin, diyelim ki bir web hizmeti tarafından yönetilen kullanıcı bir veritabanı olduğunu hayal edin. Bizim hizmet eden mime tipi atamak JSON, dayalı özel bir hiper ortam kullanırapplication/json userdb(Bir de olabilirapplication/xml userdbvene olursa olsun userdb uygulama/- desteklenen birçok medya türleri). İstemci hem de sunucu bu biçimde anlamak için programlanmıştır, ama birbirleri hakkında hiçbir şey bilmiyorlar. Roy Fielding belirttiği gibi:
Bir REST API açıklayıcı çabaları neredeyse tüm harcamak gerekir media type(s) kaynakları temsil etmek için kullanılan tanımlama ve sürüş uygulama durumu, ya da isim ve/veya uzun ilişki tanımlama köprü metni-etkin mevcut standart kağıt türleri için işaretleyin.
Temel kaynak / isteği böyle bir şey döndürebilir
İstek
GET /
Accept: application/json userdb
Yanıt
200 OK
Content-Type: application/json userdb
{
"version": "1.0",
"links": [
{
"href": "/user",
"rel": "list",
"method": "GET"
},
{
"href": "/user",
"rel": "create",
"method": "POST"
}
]
}
Bölüm adı ile ilgili kaynaklar hakkında bilgi bulabilirsiniz bizim medya açıklaması biliyoruz "bağlantılar". Bu denirHiper kontrol eder. Bu durumda, kullanıcı için başka bir istek yaparak kullanıcı listesini bulabiliriz böyle bir bölümünden söyleyebiliriz:
İstek
GET /user
Accept: application/json userdb
Yanıt
200 OK
Content-Type: application/json userdb
{
"users": [
{
"id": 1,
"name": "Emil",
"country: "Sweden",
"links": [
{
"href": "/user/1",
"rel": "self",
"method": "GET"
},
{
"href": "/user/1",
"rel": "edit",
"method": "PUT"
},
{
"href": "/user/1",
"rel": "delete",
"method": "DELETE"
}
]
},
{
"id": 2,
"name": "Adam",
"country: "Scotland",
"links": [
{
"href": "/user/2",
"rel": "self",
"method": "GET"
},
{
"href": "/user/2",
"rel": "edit",
"method": "PUT"
},
{
"href": "/user/2",
"rel": "delete",
"method": "DELETE"
}
]
}
],
"links": [
{
"href": "/user",
"rel": "create",
"method": "POST"
}
]
}
Bu yanıtı pek çok şey söyleyebiliriz. Örneğin, biz şimdi /kullanıcı göndererek yeni bir kullanıcı yaratmak için:
İstek
POST /user
Accept: application/json userdb
Content-Type: application/json userdb
{
"name": "Karl",
"country": "Austria"
}
Yanıt
201 Created
Content-Type: application/json userdb
{
"user": {
"id": 3,
"name": "Karl",
"country": "Austria",
"links": [
{
"href": "/user/3",
"rel": "self",
"method": "GET"
},
{
"href": "/user/3",
"rel": "edit",
"method": "PUT"
},
{
"href": "/user/3",
"rel": "delete",
"method": "DELETE"
}
]
},
"links": {
"href": "/user",
"rel": "list",
"method": "GET"
}
}
Biz mevcut verileri değiştirebiliriz o da biliyor:
İstek
PUT /user/1
Accept: application/json userdb
Content-Type: application/json userdb
{
"name": "Emil",
"country": "Bhutan"
}
Yanıt
200 OK
Content-Type: application/json userdb
{
"user": {
"id": 1,
"name": "Emil",
"country": "Bhutan",
"links": [
{
"href": "/user/1",
"rel": "self",
"method": "GET"
},
{
"href": "/user/1",
"rel": "edit",
"method": "PUT"
},
{
"href": "/user/1",
"rel": "delete",
"method": "DELETE"
}
]
},
"links": {
"href": "/user",
"rel": "list",
"method": "GET"
}
}
Farklı HTTP fiiller (GET PUT, DELETE vb. SONRASI) kullanıyoruz dikkat edin müşteriler kısmında olduğumuzu tahmin sadece bilgi bizim medya tanımı bu kaynakları işlemek için, ve.
Daha fazla bilgi için:
- Bu sayfada pek çok cevaplar.
- How I explained REST to my wife.
- Martin Fowler's thoughts
- Paypal's API has hypermedia controls
(Bu cevap bu konu için eleştiri adil bir miktar konu olmuştur. Çoğunlukla, bu adil bir eleştiri olmuştur. Aslında tarif ne genellikle bunu ilk yazdığımda bir kaç yıl önce nasıl uygulandığını yerine, gerçek anlamı ile daha uyumlu oldu. Cevap daha iyi gerçek anlamını göstermek için revize ettim.)
Nedir (fonksiyonel) reaktif programlam...
Bir JavaBean tam olarak nedir?...
Nullptr tam olarak nedir?...
Tam olarak Maven bir Anlık nedir ve ne...
Tam olarak nasıl android:özelliği XML ...