2012-12-29 2 views
2

여러 가지 방법으로 서비스 스택에서 서비스를 구현하는 방법을 설명하는 문서 (명확하거나 달리)를 찾을 수 없습니다. 모든 예에서는 하나의 메소드 만있는 서비스 클래스를 보여줍니다. 4 + 메소드가있는 서비스가 있다면 실제로 4+ 서비스 클래스를 만들 필요가 있다고 상상해보십시오. 4+ DTO 요청과 4+ 응답 DTO를 요청하십시오. (As shown here)ServiceStack CRUD 서비스 라우팅 문서

예 4 검색 방법에

서비스 (방법 (Identifer1) 방법 2 (identifer2)의 Method3 (identifer3)) 요청 DTO의 기록 구조를 기반

(Service Stack Wiki , Creating your First Web Service), 요청 DTO의 클래스 속성, 서비스 클래스에 대한 라우팅 제어 (정확하게 이해했지만 다시 문서 또는 예제를 찾고있는 경우)

라우팅에 관한 문서는 약간 퍼지기 때문에, 대부분의 예제는 정의를 따르지 않으므로 "Your First Web Service Explained"의 외곽선 인 DTo 's

나는 또한 SO Post을 읽었지만 조언을 따른 후에도 같은 질문을 남겼습니다.

+0

감사하지만 때로는 2 + 2! = 5입니다. –

답변

5

4 + 메소드가있는 서비스가 있다면 실제로 4+ 서비스 클래스를 만들 필요가 있고 4+ DTO 요청과 4+ 응답 DTO가 필요하다고 상상할 수 없습니다.

아니요. 네 가지 방법으로 하나의 서비스 클래스가 필요합니다. 각 메소드는 물론 Dto를 요청하고 응답 Dto를 반환합니다. 내가 중첩 된 클래스로 요청 및 응답 DTO들을 넣었습니다

public class ProductsService: Service 
{ 
    [Route("/products")] 
    public class GetProductsRequest: IReturn<List<ProductResponse>> {} 

    public class ProductResponse 
    { 
     public int Id { get; set; } 
     public string Name { get; set; } 
    } 

    public object Get(GetProductsRequest request) 
    { 
     IEnumerable<ProductResponse> response = ... 
     return response; 
    } 

    [Route("/products/{id}")] 
    public class GetProductRequest: IReturn<ProductResponse> 
    { 
     public int Id { get; set; } 
    } 

    public object Get(GetProductRequest request) 
    { 
     ProductResponse response = ... 
     return response; 
    } 

    [Route("/products")] 
    public class CreateProductRequest 
    { 
     public string Name { get; set; } 
    } 

    public object Put(CreateProductRequest request) 
    { 
     ... create the product here 
     return new HttpResult { StatusCode = HttpStatusCode.Created }; 
    } 

    [Route("/products/{id}")] 
    public class UpdateProductRequest 
    { 
     public int Id { get; set; } 
     public string Name { get; set; } 
    } 

    public object Patch(UpdateProductRequest request) 
    { 
     ... update the product here 
     return new HttpResult { StatusCode = HttpStatusCode.Accepted }; 
    } 

    [Route("/products/{id}")] 
    public class DeleteProductRequest 
    { 
     public int Id { get; set; } 
    } 

    public object Delete(DeleteProductRequest request) 
    { 
     ... delete the product here 
     return new HttpResult { StatusCode = HttpStatusCode.Accepted }; 
    } 
} 

: 분명히 몇 가지 방법에 대해 당신이 응답 예를 들어

DTO 필요하지 않을 수도 있습니다, 여기에 추천 방법과 일반적인 서비스가 보일 수 있습니다 방법 이 서비스를 별도의 파일에 두는 것이 더 읽기 쉽도록 만들 것입니다.

public class ProductsService: Service 
{ 
    public object Get(GetProductsRequest request) 
    { 
     IEnumerable<ProductResponse> response = ... 
     return response; 
    } 

    public object Get(GetProductRequest request) 
    { 
     ProductResponse response = ... 
     return response; 
    } 

    public object Put(CreateProductRequest request) 
    { 
     ... create the product here 
     return new HttpResult { StatusCode = HttpStatusCode.Created }; 
    } 

    public object Patch(UpdateProductRequest request) 
    { 
     ... update the product here 
     return new HttpResult { StatusCode = HttpStatusCode.Accepted }; 
    } 

    public object Delete(DeleteProductRequest request) 
    { 
     ... delete the product here 
     return new HttpResult { StatusCode = HttpStatusCode.Accepted }; 
    } 
} 
+0

고마워요. 나는이 예제에서 이것을 배웠다고 생각한다. 이걸 문서화 한 게 아니라고 말해? –

+2

알아야 할 모든 것은 문서에 있습니다. 나머지는 소매를 굴리고 그걸 가지고 놀기 시작합니다. –

+0

설명서에서이 구현을 찾을 수 없었습니다. (원래 문제) 다시 한 번,이 설명서를 읽은 후 설명서의 예제가 그런 식으로 작성된 이유를 알 수 있습니다. 나는 당신이 준 설명과 함께 위의 문서에 있었으면 좋겠다. –