SORU
1 Ocak 2011, CUMARTESİ


Kullanım SİLMEK POST KOYMAK neden API - ELDE KALAN?

Yani, REST API oluşturma ile ilgili bazı makaleler bakıyordum. PUT 10* POST GET*gibi.ve onlara bazı HTTP istekleri her türlü kullanmanızı öneririz: Örneğin oluşturmak istiyoruzindex.phpve API bu şekilde yazmak:

$method = $_SERVER['REQUEST_METHOD'];
$request = split("/", substr(@$_SERVER['PATH_INFO'], 1));

switch ($method) {
  case 'PUT':
    ....some put action.... 
    break;
  case 'POST':
    ....some post action.... 
    break;
  case 'GET':
    ....some get action.... 
    break;
  case 'DELETE':
    ....some delete action.... 
    break;
}

TAMAM, web servisleri hakkında pek bir şey bilmiyorum verilen (henüz). Sadece kabul etmek daha kolay olmaz amaJSONdüzenli POST GET (Bu yöntem adı ve parametreler içerir) nesne ve JSON olarak cevap verin o zaman. Kolayca PHP json_encode() json_decode())/serisini seri hale getirmek ve bu veri ile istediğimiz her şeyi HTTP isteği farklı yöntemler ile uğraşmak zorunda kalmadan yapabiliriz.

Bir şey mi kaçırdım?

GÜNCELLEME 1:

Tamam - çeşitli API aracılığıyla kazma ve hakkında çok şey öğrendikten sonraXML-RPC,JSON-RPC,SABUN,DİNLENMEAPI bu tür bir ses bir sonuca geldim. Aslında stack exchange oldukça sitelerinde bu yaklaşım kullanıyor ve bu insanlar Stack Exchange API ne yaptıklarının farkında olduğunu düşünüyorum.

CEVAP
1 Ocak 2011, CUMARTESİ


FikriREgörselStateTransfer mümkün olan en basit şekilde veri erişimi konusunda değil.

/Access son derece geçerli bir şekilde JSON, erişmek için post isteği kullanarak önerdi.

DİNLENMEK için bir yöntemdiranlamlıveri erişim. DİNLENME isteği gördüğünüzde, hemen veri ile neler olduğunu apparant olmalıdır.

Örneğin:

GET: /cars/make/chevrolet

büyük olasılıkla chevy araba listesi dönecek.İyi bir DİNLENME apı bile ?output=json veya erişimci bilgileri kodlanmış olarak ne olması gerektiğine karar vermek sağlayacak ?output=html gibi sorgu dizesi bazı çıktı seçenekleri dahil olabilir.

Sonra biraz düşünmek ne kadar makul dahil veri yazma içine bir REST API, geldim sona en iyi şekilde belirtmek türü veri açıkça olurdu ile zaten varolan dosya uzantısı gibi .js, .json, .html, veya .xml. Eksik bir dosya uzantısı varsayılan ne olursa olsun öntanımlı (JSON gibi); tarafından desteklenmeyen bir dosya uzantısı 501 Not Implemented status code bir dönüş olabilir.

Başka bir örnek:

POST: /cars/
{ make:chevrolet, model:malibu, colors:[red, green, blue, grey] }

büyük olasılıkla ilişkili renkleri ile db yeni chevy malibu yaratacak. Derimbüyük olasılıkladiğerleri gibi apı veritabanı yapısı ile doğrudan ilgili olması gerekmez. Gerçek verileri (veritabanı yapısı için erişimci ve mutators gibi düşün) korunur böylece maskeleme bir ara yüzdür sadece.

Şimdi idempotence konunun üzerine gitmeliyiz. Genellikle DİNLENME uygular HTTP üzerinden CRUD. HTTP istekleri içinGET, PUT, POST ve DELETE kullanır.

Geri KALAN çok basit bir uygulamaolabiliraşağıdaki ÇÖP eşleme kullanın:

Create -> Post
Read   -> Get
Update -> Put
Delete -> Delete

Bu uygulama ile ilgili bir sorun var: Yazı olmayan idempotent bir yöntem olarak tanımlanır. Bu aynı Post yöntemi sonraki aramalar sonuç anlamına gelirfarklısunucu Birleşik Devletleri. Get, Put, Delete, onları birden çok kez arayıp aynı server bir devlet neden bunun anlamı, idempotent;.

Bu bir istek gibi anlamına gelir:

Delete: /cars/oldest

aslında olarak uygulanabilir:

Post: /cars/oldest?action=delete

Oysa

Delete: /cars/id/123456

eğer bir kere ararsan aynı sunucu durumu neden olur, ya da eğer bunu 1000 kez adını.

oldest maddenin kaldırılması işleme daha iyi bir şekilde talep etmek olacaktır:

Get: /cars/oldest

ve elde edilen verileri ID delete bir istek yapmak için kullanın:

Delete: /cars/id/[oldest id]

Bu yöntem ile ilgili bir sorun varsa /cars başka bir öğe /oldest talep edildiği zaman ve delete verildiği arasına eklendi.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Paulo Bautista

    Paulo Bautis

    21 Aralık 2008
  • Stevie

    Stevie

    2 Mayıs 2010
  • Thom Hall

    Thom Hall

    24 Kasım 2006