2011-09-20 4 views
0

내 편안하고 웹 서비스에 대한 Openrasta을 사용하고 있는데 나는 방법 매개 변수와 URI 예를 들어OpenRasta URI 및 방법 바인딩 설명 - 편안하고 웹 서비스

에 관해서 작은 의심했습니다 : 나는 사용자의 설정에 따라 한 실재.

구성 :

{ 
    "userId":1, 
    "userName":"FirstName" 
} 
: 동일한위한

public OperationResult Put(long userId, User user){} 

URI가 http://localhost/User/1

요청 본문 아래와 같이 JSON을 포함 할 것이다 : PUT위한

ResourceSpace.Has.ResourcesOfType<User>() 
      .AtUri("/user") 
      .And.AtUri("/user/{userId}") 
      .HandledBy<UserHandler>() 
      .AsJsonDataContract() 
      .And.AsXmlDataContract(); 

핸들러 메소드

여기 내 질문은 : 두 개의 매개 변수로 PUT 메소드를 정의하는 것이 정확한지 아닌지? 그렇게하는 것이 옳은 경우 PUT 메소드의 userId 매개 변수는 User 엔터티 속성 UserId와 동일한 값을 포함하게됩니다.

그리고 PUT 메소드에서이 두 값이 같은지 아닌지를 확인해야하며 일치하지 않으면 BadRequest가 요청에 제공된 엔티티와 일치하지 않는다고 알리는 BadRequest를 리턴한다. 요청을 처리하는 동안 처리 할 수없는 이유와 PUT 메서드가 User 엔터티 만 매개 변수로 사용하는 이유는 무엇입니까? 나는 무엇인가를 크게 놓쳤는가 아니면이 설계에 대한 나의 이해가 완전히 틀렸는가? 어떤 생각이나 의견을 부탁해주십시오.

답변

1

몇 가지 이유가 있습니다.

먼저 URI 매개 변수를 처리하고 한 번에 하나의 변수에 대한 입력과 일치시키는 방법의 기술적 한계가 있습니다. 동일한 것이 키/값 코덱에 적용되므로 하나의 User 객체가 있어야합니다. 하지만 json 코덱을 사용하면 전체 객체가 반환되므로 User alltogether가 우선 적용됩니다.

두 번째는 그 문제를 해결하려고 시도한 적이 없다는 것입니다. 주로 uri 매개 변수와 응답 본문을 결합하면 숨겨진 보안 문제가 많이 생길 수 있기 때문입니다.

모델링의 관점에서 ReST API는 외부 키 대신 URI를 식별자와 링크로 사용해야하므로 ID (URI)가 이미 있으면 모델링해야하는 이유가 거의 없습니다. 엔티티 본문.

+0

귀하의 설명이 맞는 것입니다. 다른 사례는 무시 될 수 있습니다. – JPReddy