En iyi REST API uygulamaları: sorgu dizesindeki bağımsız değişkenler ile istek gövdesinin karşılaştırması


126

Bir REST API çeşitli yerlerde bağımsız değişkenlere sahip olabilir:

  1. İstek gövdesinde - Bir json gövdesinin parçası olarak veya başka bir MIME türü olarak
  2. In sorgu dizesi - örneğin/api/resource?p1=v1&p2=v2
  3. URL yolunun bir parçası olarak - ör./api/resource/v1/v2

Yukarıda 1 ile 2 arasında seçim yapmanın en iyi uygulamaları ve dikkate alınması gereken noktalar nelerdir?
2'ye 3 burada ele alınmıştır .



Yukarıdakilere ek olarak, başlık kullanmaya ne dersiniz?
değişkeni

Yanıtlar:


40

Yukarıda 1 ile 2 arasında seçim yapmanın en iyi uygulamaları ve dikkate alınması gereken noktalar nelerdir?

Genellikle içerik gövdesi, sunucuya / sunucuya yüklenecek / indirilecek veriler için kullanılır ve sorgu parametreleri, istenen kesin verileri belirtmek için kullanılır. Örneğin, bir dosya yüklediğinizde, gövdede adı, mime türünü vb. Belirtirsiniz, ancak dosya listesini getirdiğinizde, listeyi dosyaların bazı özelliklerine göre filtrelemek için sorgu parametrelerini kullanabilirsiniz. Genel olarak, sorgu parametreleri verilerin değil, sorgunun özelliğidir.

Elbette bu katı bir kural değildir - sizin için daha uygun olduğunu / çalıştığını düşündüğünüz şekilde uygulayabilirsiniz.

Ayrıca , sorgu dizesi hakkındaki wikipedia makalesine , özellikle de ilk iki paragrafa göz atmak isteyebilirsiniz .


2
Yukarıdaki analizinizin makul bir sonucu, idempotent işlemlerinin en iyi şekilde url sorgu dizelerinde tutulması ve CRUD'nin en iyi şekilde, SOP'tan yararlanan ve sosyal mühendislik / kimlik avı saldırılarının çok temel biçimlerini önleyen katı şekilde yazılmış yanıt gövdelerinde tutulmasıdır
Rice

CRUD'daki @Rice R bağımsız bir işlemdir.
user398039

16

POST / PUT isteklerinden bahsettiğinizi varsayacağım. Anlamsal olarak, istek gövdesi gönderdiğiniz veya yama uyguladığınız verileri içermelidir.

Sorgu dizesi, URL'nin (URI) bir parçası olarak, hangi kaynağı gönderdiğiniz veya yama uyguladığınızı tanımlamak için oradadır.

En iyi uygulamaları istediniz, aşağıdaki anlambilim benimdir. Elbette pratik kurallarınızı kullanmak işe yaramalı, özellikle de kullandığınız web çerçevesi bunu parametrelere dönüştürüyorsa .

En çok biliyorsun:

  • Bazı web sunucularının URI'nin uzunluğu konusunda sınırları vardır.
  • CURL ile istek gövdesi içindeki parametreleri gönderebilirsiniz.
  • Verileri nereye gönderdiğinizin hata ayıklama üzerinde etkisi olmamalıdır.

6

Aşağıdakiler benim pratik kurallarım ...

Vücudu ne zaman kullanmalı:

  • Bağımsız değişkenlerin düz bir anahtarı olmadığında: değer yapısı
  • Değerler, serileştirilmiş ikili veriler gibi okunabilir değilse
  • Çok fazla argümanınız olduğunda

Sorgu dizesi ne zaman kullanılır:

  • Bağımsız değişkenler, hata ayıklama sırasında onları görmek isteyecek şekilde olduğunda
  • Kodu geliştirirken bunları manuel olarak arayabilmek istediğinizde, örn. curl
  • Argümanlar birçok web hizmetinde ortak olduğunda
  • Zaten farklı bir içerik türü gönderirken application/octet-stream

Karıştırıp eşleştirebileceğinize dikkat edin - ortak olanları, hata ayıklaması gerekenleri sorgu dizesine koyun ve geri kalan her şeyi json'a atın.


34
API'nizi geliştirme kolaylığına göre nasıl yapılandıracağınızı seçmek iyi bir uygulama değildir.
Eric Stein

1
@EricStein'in dediği gibi, tersten anladınız.
DanMan

20
Beyler, soruyu sormamın nedeni doğru yanıtı almak. Devam et, bir cevap yaz ve kusurlu olanı kaldırayım. @EricStein
Jonathan

4
İnsan eliyle kolayca tüketilebilen @Jonathan api'ler neredeyse her zaman iyi apilerdir.
KISS'i

1
@AkshayHiremath Vücutta başka bir şey gönderiyor olabileceğinizden bahsediyor, örneğin "image / jpeg" gibi bir ContentType başlığı gönderdiyseniz, mesaj gövdenizin jpeg verilerini içermesi gerekir ve içeri başka bir şey dahil edemezsiniz o
Shayaan
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.