2016-10-09 5 views

답변

2

숫자 ("1 :"및 "2 :")는 매개 변수의 서수 값입니다. 서수는 "일련의 위치"라고 말하는 멋진 방법이지만 숫자는 순차적 일 필요가 없으며 고유 한 것일뿐입니다.

[TLDR] 아파치 드리프트 IDL에서

는 서수는 구조체의 파라미터리스트의 각 파라미터와 각 필드에 할당된다. 클라이언트 프로그램이 Apache Thrift 서버를 호출 할 때 매개 변수 이름을 전달하지 않으면 훨씬 작은 서수, 매개 변수 유형을 나타내는 숫자 및 일련 화 된 매개 변수 값을 전달합니다.

유선에서 공간을 절약 할 수있을뿐만 아니라 시간이 지남에 따라 함수에 매개 변수를 추가하고 클라이언트 나 서버를 손상시키지 않고 매개 변수를 임의의 순서로 보낼 수 있습니다. Apache Thrift 프로그램이 서수가있는 매개 변수를받는다면 인식하지 못하는 매개 변수를 무시합니다.

또한 매개 변수가 누락 된 경우 기본값을 사용할 수 있습니다. 클라이언트가 GetSiteRankByName 메소드를 호출하고 PARAM은 "2"통과하지 않는 경우

service SocialLookup { 
    string GetSiteByRank(1: i32 rank) 
    i32 GetSiteRankByName(1: string name, 2: bool allowPartialMatch=false) 
    list<string> GetSitesByUsers(1: i32 minUserCount, 2: i32 maxUserCount) 
} 

: 기본 사용 여기 allowPartialMatch 매개 변수에 할당 된 기본 값을 또 다른 예 서비스입니다. 인터페이스를 이와 같이 진화시키는 것은 서비스의 모든 사용자를 동시에 업데이트하지 않고도 개별 서비스의 새 버전을 출시하려는 환경에서 중요합니다. 마이크로 서비스 및 CI/CD.

일단 설정되면 지정된 클라이언트와 서버가 서로 오해 할 수 있으므로 서수를 절대로 변경하면 안됩니다. 매개 변수를 제거 할 수는 있지만 주석을 제거하는 것이 가장 좋으므로 모든 사람이 서수를 다시 사용하지 않아도됩니다.

[/ TLDR]

1

한이 숫자는 특정 필드를 식별하기 위해 클라이언트와 서버 사이에 사용되는 정보 것을 추가 할 수 있습니다. 필드 이름은 일반적으로 메시지에 직렬화되지 않습니다.

+1

멋진 점! 서수의 모든 목적은 큰 필드 이름을 직렬화 할 필요를 없애는 것입니다. 실제로 중요한 것은 말할 것도 없습니다. – codeSF