RESTful API tüm form için veri sağlamalı mıdır?


13

Veriler için tamamen RESTful API kullanan bir JavaScript web uygulamam olduğunu varsayalım.

Diyelim ki bu uygulama bir veri formuna sahip ve diyelim ki / product / 12345 adresindeki bir kaydı düzenliyorum. Formu oluştururken, / product / 12345 için RESTful bir istekte bulunuyorum ve JSON verilerini alıyorum:

{
  "id": 12345,
  "name": "Some Product",
  "active": true,
  "sales_user_id": 27
}

Dolayısıyla, formumun bir satış elemanı seçmek için bir açılır listeye sahip olabileceği açıktır. Bu listeyi doldurmam gerekiyor. Veriler nereden gelmelidir? En yaygın yaklaşım nedir?

/ Product / 12345 istek yanıtının bir parçası haline getirmek mantıklı olur mu?

{
  "id": 12345,
  "name": "Some Product",
  "active": true,
  "sales_user_id": 27,
  "sales_users": [
    {"id": 1, "name": "Anna Graham"},
    {"id": 2, "name": "Dick Mussell"},
    {"id": 3, "name": "Ford Parker"},
    {"id": 4, "name": "Ferris Wheeler"},
    {"id": 5, "name": "Jo King"}
  ]
}

Yeni bir kayıt oluşturmaya ne dersiniz? API'm GET / product / new ürününe aşağıdakilerle de yanıt vermeli mi?

{
  "sales_users": [
    {"id": 1, "name": "Anna Graham"},
    {"id": 2, "name": "Dick Mussell"},
    {"id": 3, "name": "Ford Parker"},
    {"id": 4, "name": "Ferris Wheeler"},
    {"id": 5, "name": "Jo King"}
  ],
  "categories": [
    {"id": 1, "name": "Category 1"},
    {"id": 2, "name": "Category 2"},
    {"id": 3, "name": "Category 3"},
    {"id": 4, "name": "Category 4"},
    {"id": 5, "name": "Category 5"}
  ],
  "etc": [ ... ]
}

lütfen hiçbir zaman bir şey oluşturmak için GET isteğini kullanmayın. Bitiş noktanız / ürün değil / ürün / yeni olmalıdır . Yeni bir ürün oluşturmak için bu uç noktaya bir PUT isteği göndermelisiniz.
Kerem Baydoğan

Bu hiçbir şey yaratmıyor. Bu sadece mevcut veriler için bir talep veya henüz kaydedilmemiş yeni bir kayıt için bir şablondur.
Chad Johnson

Üzgünüm, şimdi ne demek istediğini anlıyorum. her iki şekilde de ürün bitiş noktası, bir şablon ürünü veya ürün oluşturma formu açılır menüleri için bir değer listesi sağlamaktan sorumlu olmamalıdır. @Dan'ın söylediği gibi, ayrı ayrı uç noktalar oluşturun ve tarayıcınızın açılır değerleri performans için önbelleğe alabilmesi için önbellek başlıklarını kullanın.
Kerem Baydoğan

Yanıtlar:


6

Çok basit, dar odaklanmış uç noktalara yöneliyorum. Tüm satış kullanıcılarını döndüren / sales_users gibi bazı yerlerde bir istek bekliyorum.

GET / sales_users:

[
    {"id": 1, "name": "Anna Graham"},
    {"id": 2, "name": "Dick Mussell"},
    {"id": 3, "name": "Ford Parker"},
    {"id": 4, "name": "Ferris Wheeler"},
    {"id": 5, "name": "Jo King"}
]

Benzer şekilde, bir kategori listesine sahip olacaksanız, bunun için ayrı bir bitiş noktası eklerdim.

GET / kategoriler:

[
    {"id": 1, "name": "Category 1"},
    {"id": 2, "name": "Category 2"},
    {"id": 3, "name": "Category 3"},
    {"id": 4, "name": "Category 4"},
    {"id": 5, "name": "Category 5"}
]

Ben bir GET / ürün / yeni inşa olmaz. Bunun yerine, uygulamanızda, listelerini doldurmak için uygun istekleri bilen yeni ürünleri (örneğin, GET / kategoriler, GET / satış_kullanıcılar vb.) Eklemek için bir form oluşturacağım.


3

Satış görevlilerinin listesinin nispeten statik olduğunu varsayarsak, bir /salesuserskez (form yükü vb.) Arayabileceğiniz ve kaydedebileceğiniz ayrı bir API çağrısı isteyeceğinizi düşünürüm , böylece bu verileri yeniden istemeniz gerekmez saati. REST'te, API'nizi kaynaklar etrafında düzenlediğinizi ve satış görevlilerinin kaynakları mantıksal olarak ürünlerden ayrı olduğunu unutmayın.

Benzer şekilde, arama yaparken /product/newyalnızca yeni bir ürüne ilişkin bir satış_kullanıcı kimliği içerebilecek, ancak başka bir şey içermeyen veriler göndermek istersiniz. Bir satış_ kullanıcısında yapılan değişiklikler ayrı bir çağrı olacaktır.

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.