2013-04-05 4 views
4

ServiceStack의 Swagger 통합과 관련하여 다음 문제에 대한 해결책을 찾고 있습니다.ServiceStack & Swagger - 경로 및 쿼리로의 ApiMember

내 RequestObject에 필수 속성 ID가 있습니다. 나는 다음과 같은 경로를 제공하려면 :

[Route("/User/byId/{Id}", "GET", Summary = @"test", Notes = "test")] 
[Route("/User/byId", "GET", Summary = @"test", Notes = "test")] 

기본적으로 이것은 쿼리 문자열 또는 ServiceConsumer 경로로 아이디를 제공하는 선택을 떠나야한다.

Swagger UI는 2 개의 경로를 올바르게 표시하지만 API 구성원 속성은 'Path'또는 'query'매개 변수로 지정할 수 없으므로 두 방법으로 모두 테스트 할 수 없습니다.

출처 : https://gist.github.com/JohannesFerner/5317496

은 어떤 방법이 구체적 따라 국도하기 위해, API-회원 사양 제공하기 위해, 또는이 경로 및 쿼리로 valdid 것을 정의 할 수 있나요? 이처럼

:이 같은 경우

[ApiMember(Name = "Id", ParameterType="path,query", Description = "User Id", DataType = "int", IsRequired = true)] 
+1

나의 이해 - https://github.com/wordnik/swagger-core/wiki/Parameters - 매개 변수는 '본문', '경로'또는 '쿼리'중 하나 일 수 있습니다. 매개 변수 이름은 고유해야합니다. 이를 기반으로 'path'와 'query'로 표시된 매개 변수를 가질 수없는 것 같습니다. – paaschpa

+0

고마워, 그건 내 이해도. 두 가지 방법으로 parameterType을 정의 할 방법이없는 것처럼 보입니다. –

답변

2

나는 자신감에 올바르게 각각의 경로를 문서화 촉진하기 위해 두 개의 분리 된 DTO 클래스를 생성하는 것이 가장 쉬운 찾을 수 있습니다. DTO 클래스는 동일한 속성 (이 경우 Id, 모양은 같음)과 RouteApiMember 속성이 다를 수 있습니다. 각각의 DTO에 하나씩 두 개의 서비스 메소드가 있으며, 구현 메소드가 중복되지 않도록 Id 등록 정보 값을 전달하는 공유 메소드를 호출 할 수 있습니다.

1

ApiMember를 여러 번 제공 할 수 있습니다. 이 개 경로에 대한 사양에 물론 결과

[Route("/User/byId/{Id}", "GET", Summary = @"test", Notes = "test")] 
[Route("/User/byId", "GET", Summary = @"test", Notes = "test")] 
public class TestRoute 
{ 
    [ApiMember(Name = "Id", ParameterType="path", Description = "User Id", DataType = "int", IsRequired = false)] 
    [ApiMember(Name = "Id", ParameterType="query", Description = "User Id", DataType = "int", IsRequired = false)] 
    public int Id { get; set; } 
} 

이를, 모두의 ID 쿼리 PARAM 또는 경로 PARAM을 받아들이 : 그래서 예에 확대.

당신이 자신감-CODEGEN이 불행하게도 다음과 같습니다 전화를 생성합니다 사용하는 경우이의

public GetTestId(int Id1, int Id2 = null)