2013-03-12 13 views
11

Bir MongoDB mağazasının üzerine kurulmuş RESTful API'im var, bu yüzden dizileri depolayabileceğinize sevindim.Dizi öğeleri eklemek/kaldırmak için RESTful API son noktası?

POST /users { items: [ 1001, 1002, 1003 ] }

Ama nasıl bir öğeyi yeni bir öğe ekleyerek veya çıkararak HTTP bitiş noktası gibi görünür olacaktır: Böyle bir yeni kaynak oluşturmak için basit değil mi?

PATCH /users/{id} { name: 'Bruce Wayne', items: [ 1001, 1002 ] }

Veya doğrudan mongodb sorguda geçmesi:

PATCH /users/{id}?query[$push][items]=1003

Şu anda, ben dokunmak istemiyorum elemanları dahil olmak üzere tüm dizi belirtmek zorunda

Bunu yapmanın daha iyi bir yolu var mı?

Düzenleme:

Ben StackMob's API nasıl yapıyor gibi. name'u nasıl güncellerim ve bir öğeyi items'dan aynı zamanda nasıl kaldırabilirim? Örneğin, kullanıcının yöneticilerinin bir bölümünü yönetici kontrol panelinde güncellediğimde? Dizinin tamamını değiştirmenin mongodb'de iyi bir fikir olduğunu düşünmüyorum?

+0

RESTful API için ne kullanıyorsunuz? MongoDB'nin genel kullanıma yönelik bir kullanıma hazır API'si yoktur (yalnızca Yönetici için). Ayrıca, üretim kullanımı için tavsiye edilmez: http://docs.mongodb.org/manual/administration/security/#rest-api – WiredPrairie

+0

Soruyu açıklığa kavuşturdum (mongodb üzerine bir Express uygulaması var) – thatmarvin

+0

Yeni başlayanlar için, Bir mongodb sorgusunu RESTful çağrısına geçirmekten kesinlikle kaçınmalıydım. Birisi verilerinizi zarara uğratan beklenmedik bir sorgudan geçebileceği için oldukça önemli bir güvenlik açığı olabilir. – thehiatus

cevap

-1

yeni bir istek yaratmak ve silmek DİNLENME standartlarına göre -> SONRASI -oluşturun koleksiyonunda yeni bir kaynak ve

Sana nasıl bir örnek verebilirim -Sil Bir kaynak SİL java'daki yüksek düzeyli HTTP son noktası, Jersey'i kullanıyor gibi görünüyor. Belirtilen HTTP Yolu ve farklı işlemler yapan yöntemler için belirli Yollarla bir Kaynak sınıfınız olabilir. İşte

tabii (giriş noktası, olur olur örnek bir kaynak sınıftır (bu senin girdi verilerini içeren) bir istek JSON veya XML eşliğinde /dinlenme/MyResource/Kaynak - Yani URL gibi görünebilir) Bu sınıf için URL eşlemesi yapmak web.xml''deki yapılandırmanızı yapmak zorunda ->

import javax.ws.rs.Consumes; 
import javax.ws.rs.POST; 
import javax.ws.rs.DELETE; 
import javax.ws.rs.Produces; 
import javax.ws.rs.core.MediaType; 
import javax.ws.rs.core.Response; 
import org.json.JSONObject; 

public class SampleRESTServiceResource { 

    /** 
    * @param incomingJsonString 
    * @return Response 
    */ 
    @POST 
    @Consumes(MediaType.APPLICATION_JSON) 
    @Produces(MediaType.APPLICATION_JSON) 
    public Response createNewResource(JSONObject myJson) { 
     // Do a call to a DAO Implementation that does a JDBC call to insert into Mongo based on JSON 
     return null; 

    } 

    /** 
    * @param incomingJsonString 
    * @return Return response 
    */ 
    @DELETE 
    @Produces(MediaType.APPLICATION_JSON) 
    @Consumes(MediaType.APPLICATION_JSON) 
    public Response deleteResource(JSONObject myJson) { 
     // Do a call to a DAO Implementation that does a JDBC call to delete resource from Mongo based on JSON 
     return null; 
    } 
} 

Eğer bu sayfada bakabilirsiniz bir örnek denemek istiyorsanız -> https://www.ibm.com/developerworks/library/wa-aj-tomcat/

+0

@Downvoter dizisinden öğe kaldırmak için ... neden? –

+0

Belirli bir Java uygulamasında yapılacak bir şey değil, mongodb dizileri için üst düzey son nokta tasarımı ile ilgili soruyu ele almıyor. – thatmarvin

+0

Özellikle bu soruyu cevapladığını düşündüm -> "Ama yeni bir öğe eklemek veya bir öğeyi kaldırmak için HTTP son noktası nasıl görünürdü?" Bu yüzden Java'da nasıl görüneceğine dair bir örnek verdim. –

9

Bir mongodb sorgusu geçmek kötü bir fikir gibi görünüyor.

  • : arka uç uygulamasına bağlı olarak, bazı kısıtlamalarla PUT veya PATCH'in bir kaynakta bir özelliğin değişiklik modelleyebilirsiniz SQL Injection

    gibi verilerinize kötü şeyler yapıyor bir saldırganın yol açabilir PUT kullanarak istemcinin, kaynağın tüm temsilini göndermesi beklenir. BT sizin için çalışıyor, ancak hantal olabilir.

  • PATCH'u kullanırken, istemcinin, tüm kaynak yerine değişmesi planlanan özellikleri göndermesi beklenir. Yine de, bütün değerine değerini göndermeniz yeterlidir, sadece öğelerin eklemelere eklenmesini veya silinmesini değil.Yine işe yarıyor ama sen buna aşık değilsin. /users/:id/items
  • eklemek için POST Kabul: Ben kendi başına bir kaynak olarak diziyi modellik yapar mısın

    1. :

Sana dizisine öğeleri ekleme ve kaldırma modellemek için bir yol arıyoruz düşünüyorum Diziden bir öğe ve diziden kaldırmak için DELETE.

Bu basit ve RESTful.

+0

Yukarıdaki yöntemler, tek bir öğe üzerinde çalışırken, oluşturma veya silme işlemlerinde iyidir. Bir kerede birden çok öğe oluşturmam/silmem gerektiğinde API'yi nasıl yapılandırabilirim? –

+0

Kullanıcı için dizi öğeleri varsa: {userId: 1, items: [1,2,3]} ve sadece "item = 2 & item = 3" öğesini kaldırmak istiyorum? Delee'de 'vücut' kurabilirim. – W92

+0

Ancak dizideki öğeleri, "DELETE"/users /: id/items /: index 'URI yolunda kullanılan dizide dizinlerine göre tanımlayabilirsiniz. –

İlgili konular