2016-10-11 60 views
5

Sadece düşünüyorum, dinlenme hizmeti için YOL haritalaması oluşturmak için en iyi uygulama nedir. en aşağıdaki yolları var diyelim:Spring Boot REST yol eşlemesi

/users POST 
/users/1 PATCH, GET 
/users/1/contacts GET, POST 
/users/1/contacts/1 GET, PATCH 

soru - denetleyicileri oluşturmak için en iyi yöntem nedir. Örneğin, tüm bu eşleştirmeleri teknik olarak koyabileceğimiz UserController var. Veya - ayrı denetleyiciler oluşturmalıyız (UserController, ContactsController). Altında her şeyi koyarsak, f.e UserController.

@RequestMapping("users") 
@RestController 
public class UserController { 

    @RequestMapping(method = RequestMethod.POST) 
    public ResponseEntity<Void> createUser() {} 

    @RequestMapping(method = RequestMethod.GET) 
    public User getUser() {} 

    @RequestMapping(value = "{id}/contacts", method = RequestMethod.GET) 
    public List<Contact> getContacts() {} 

    @RequestMapping(value = "{id}/contacts", method = RequestMethod.POST) 
    public ResponseEntity<Void> createContact() {} 

    ..... 
} 

Ve ayrı denetleyiciler oluşturursak, o zaman yollar nasıl düzenlenmeli? Muhtemelen aptalca bir soru, ama eğer birisi deneyimini paylaşabilirse memnun olurum.

+1

yapmanın birçok yolu vardır dikkat Kişileri ayrı bir bağlamda kullanmak ister misiniz? (yani ait oldukları Kullanıcıdan bağımsız) – ochi

cevap

3

Kullanıcıyla ilgili varlık sayısının gelecekte artacağını belirtelim. Bu yüzden daha iyi olur bariz varlıklarla göre bölmek:

UserController -> UserService -> UserRepository,

ContactController -> ContactService -> ContactRepository,

FriendshipController -> ArkadaşlıkServis -> ArkadaşlıkRepository

Deneyimlerimden, Kullanıcı Denetleyici

kullanıcı kapsam Dostluk denetleyiciye bağlı
@RestController 
@RequestMapping("/user") 
public class UserController extends AbstractController { 

... 

    @RequestMapping(method = RequestMethod.POST) 
    public ResponseEntity<?> createUser(@RequestHeader("X-Auth-Token") Optional<String> @RequestBody User user) { 

... 

    @RequestMapping(method = RequestMethod.GET) 
    public ResponseEntity<?> listUsers(@RequestHeader("X-Auth-Token") Optional<String> authToken) { 
... 

:

@RestController 
@RequestMapping("/user/{id}") 
public class FriendshipController extends AbstractController { 

... 

@RequestMapping(value = "/friendship/code", method = RequestMethod.POST) 
    public ResponseEntity<?> generateCodeForUser(@PathVariable("id") long id) { 

... 

@RequestMapping(value = "/friendship/code", method = RequestMethod.GET) 
    public ResponseEntity<?> retrieveCodeForUser(@PathVariable("id") long id) { 

... 

Değil emin aksiyomu, ama beni kodumu düzenlemeye yardımcı.

+1

Hatta arkadaşlık denetleyicisinin eşleştirmesinin '@RequestMapping ("/user/{id}/friendship ") olması gerektiğini ve daha sonra tüm eşlemelerin '/ code' – ochi

1

Users ve Contacts arasındaki bağlantıyı kaldırdıkları için ayrı denetleyiciler için bir fanım (örneğin) - daha sonra Contacts'u ayrı bir bağlamda kullanmak ister misiniz? (YaniUser bağımsız onlar

onlar ayrılır ise

, yollar ne varsa çok benzer görünecektir) aittir:

Kullanıcılar

/users GET, POST 
/users/{user-id} PATCH, GET 

İletişim

/contacts GET, POST 
/contacts/{contact-id} GET, PATCH 

arasında bir bağımlılık varsave Users (bir varmış gibi ve bu durumda, görünüşe), bunu şöyle olabilir:

/contacts/for-user/{user-id} GET, POST 
/contacts/for-user/{user-id}/{contact-id} GET, PATCH 

Bu başka bağlamlarda başka şeyler kişileri (sadece kullanıcı) ve kullanıcı eklemek için izin verir (bakılmaksızın temasların) Örneğin

, biz tamir için başvurabilirim kahve makinesi

/coffee-maker/users GET 

Veya kahve makinesi başarısız olursa, kullanıcıları?

/coffee-maker/contacts GET 

Muhtemelen kahve makinesi tamiri için bir temas ayrıca bir Kullanıcı (ancak bunlar olmak zorunda değildir)

Bir şey daha, sen arkanı dön ve bir kişi bir için olduğunu söyleyebiliriz cihaz (yani bir kahve makinesi)

/contact/for-appliance/{appliance-id} GET 

Demek istediğim kullanıcılardan kişileri ayrılabilmesi durumunda, diğer kuruluşlara kişileri atayabilir varlık yerine User -> Contacts olmaya ilişkiye zorlamak - olmadıkça, tabii ki, don iş kurallarından dolayı onları ayırmak istemiyorum ne daha sonra eğer - Her durumda nedense

, onlar (örneğin) Kullanıcılar ve Kişiler arasında bağlantı kaldırmak gibi ayrı denetleyicileri için bir fanatiğiyim eşleştirmesini