2012-11-08 4 views
8

kullanıyor:Ben dinlendirici bir API tasarlıyorum ve çabasıyla açıklayıcı olmalı ve aşağıdaki gibi benim içerik http başlığını beyan etmek istiyorum dokümantasyon daha net hale getirmek için özel json içerik tipleri iyi bir fikir

Content-Type: application/vnd.mycorp.mydatatype+json 
Mycorp, şirketime özgü bir tanımlayıcı ve mydatatype, her veri türüne özgü olan

. Bir örnek olacaktır:

Content-Type: application/vnd.ford.car+json 

{ 
"manufactured_year": 2000 
, "color": "blue" 
, "hp": 160 
, "model" "Focus" 
, "type": "sedan" 
} 

Bu içerik tipi geçerli olması için bir POST yapabilmesi için zorunlu olacak ve bir tepkinin bir parçası olarak gönderilecek. Bana yükün içinde ne olması gerektiğine dair kuralları tanımlamanın iyi bir yolu gibi görünüyor.

Bunun iyi bir fikir olup olmadığı veya IETF standartlarına izin verilip verilmediği konusunda iyi bir kaynak bulamıyorum.

Yani, soru: Daha uygulanabilir, uygulama/vnd.mycorp.mydatatype + json veya sadece uygulama/json hangisi?

cevap

4

Kesinlikle izin verilir. İyi bir fikir olup olmadığı başka bir hikaye.

Başarımın kuralı, bir çok şey için yararlı olan, kendi başına tanımlanması gereken ve birçok uygulamada birlikte çalışmanız gereken, kesinlikle bir ortam türü vermeniz gereken birincil veri biçimidir. Bununla birlikte, API'nızda birçoğu arasında yalnızca bir ileti varsa ve yalnızca bir kaynak (veya bir kaynak "türü") için iyi bir ileti varsa, yalnızca uygulama/json'u kullanın.

YMMV, elbette.

+0

Bu iyi bir nokta. Büyük soru, elbette "birincil veri türü" nedir ve neyin olmadığıdır. Belgelerim tarafından iyi tanımlanmış bir veri türüm var ... ancak bu her zaman RPC API'ları için geçerli bir durumdur ve ben bu verileri kullanarak veri türlerini nadiren buluyorum. Bunun, bunun iyi bir yol olmadığını ya da API uygulayıcılarının genellikle bunun hakkında düşünmediği için acaba. – gardarh

5

Soru, REST API sürüm sürümünüzle yakından ilgilidir.

İçerik türü, içeriğin türünü iyi tanımlamak için kullanılır. Eğer mesaj JSON biçiminde olduğunu müşteriye söylüyorsun

application/json 

gibi standart içerik türü kullanın. Bu, API'sini yorumlamayan veya yalnızca en yeni sürümü destekleyen tüm web uygulamaları için yeterlidir. API'nizin farklı sürümlerini kullanan istemcileriniz varsa, standart içerik türleri yeterli değildir. Aşağıdaki senaryoyu düşünün:

Eğer onaltılık kodunu kullanarak rengi temsil istediğinize karar Bir noktada mesajın

Content-Type: application/vnd.ford.carV1+json 

{ 
"manufactured_year": 2000 
, "color": "blue" 
, "hp": 160 
, "model" "Focus" 
, "type": "sedan" 
} 

sürümü 1 olarak örneğini ele alalım. Bir araba sürümünü içeren doğru içerik türünü belirtir istemci sorduğunda nedenle tip

Content-Type: application/vnd.ford.carV2+json 

{ 
"manufactured_year": 2000 
, "color": "0000FF" 
, "hp": 160 
, "model" "Focus" 
, "type": "sedan" 
} 

sürümünü 2 oluşturun. Bu, rengin altıgen kodu veya isim olarak gönderilip gönderilmeyeceğini uygulamayı söyler.

Burada bir kaynağın gösterimini görüntülüyorsunuz.Kaynak gösterimi sürümlerini desteklemeye yönelik bir alternatif, sürümü özel başlık olarak eklerken (içerik türü standardı korurken)

Content-Type: application/json 
Message-Version: 1.0 
İlgili konular