grpc go 예제

API는 모든 매개 변수를 문서화하지만 인터셉터에서 메타데이터를 처리하는 방법에 대해 신속하게 초점을 맞추고 싶습니다. 컨텍스트를 통해 각 인터셉터에서 메타데이터에 액세스할 수 있습니다. 컨텍스트 값(Unary 호출의 경우) 및 ServerStream 값(스트리밍 호출의 경우). 이 기능은 호출을 승인하기 위해 호출에 설정된 메타데이터(예: 권한 부여 세부 정보)에 액세스해야 하는 경우에 유용합니다. 이 헬로월드 의 예는 다음 예제에서 나온 것입니다: 기본 예제에서는 grpc를 공급합니다. 와함께안전하지 () grpc에 값. 다이얼 기능. grpc. 안전하지 않은() 함수는 클라이언트 연결에 대한 전송 보안을 비활성화하는 DialOption 값을 반환합니다. 기본적으로 전송 보안은 우리가 설정해야 전송 보안을 비활성화하려면 필요한Insecure.

그러나 TLS 전송 보안을 활성화하려고 합니다. 이것은 grpc로 수행됩니다. 와 교통 자격 증명() 기능. 그냥 GRPC처럼. Creds() 함수는 서버 측의 grpc에서 전송 보안을 활성화하는 데 사용했습니다. WithTransportCredentials() 함수는 자격 증명도 허용합니다. 전송 자격 증명하지만 차이점은 ServerOption 값이 아닌 DialOption 값을 반환하고 grpc를 반환하는 것입니다. 다이얼 기능은 DialOption 값을 허용합니다. API의 사용을 소개하기 위해 몇 가지 사용 사례를 살펴보고 위의 기본 예제를 기반으로 빌드해 보겠습니다. 인터셉터는 RPC 호출을 중심으로 기능을 래핑하는 데 매우 유용합니다. RPC 서비스의 논리에서 로깅/인증/모니터링/추적과 같은 항목을 구분하는 데 도움이 되며 한 곳에서 각 호출에 대해 균일한 방법(예: 로깅)을 만드는 데 도움이 됩니다.

인터셉터를 만들려면 만들려는 관련 유형의 인터셉터와 일치하는 정의가 있는 함수를 만들어야 합니다. 예를 들어 서버에 대한 Unary 인터셉터를 만들려면 아래 정의에 따라 UnaryServerInterceptor와 동일한 정의를 가진 함수를 만들고 해당 함수를 grpc에 제공해야 합니다. UnaryInterceptor() 서버에 대한 옵션을 설정하는 데 사용되는 ServerOption 값을 만듭니다. 프로토콜 버퍼 정의에서 필수, 선택 사항 및 반복 키워드는 매우 강력합니다. 이를 통해 스키마 수준에서 데이터 구조의 모양과 각 언어에서 클래스가 처리되는 방식에 대한 구현 세부 정보를 인코딩할 수 있습니다. 예를 들어 라이브러리는 필수 필드가 채워지지 않은 개체 인스턴스를 인코딩하려고 하면 예외를 발생시게 됩니다. 또한 해당 값에 대한 새 번호가 매겨진 필드로 롤링하기만 하면 필드를 항상 필수항목에서 선택 사항으로 변경할 수 있습니다. 직렬화 형식의 의미 체계에 이러한 종류의 유연성을 인코딩하는 것은 매우 강력합니다. 2017 년 출현 시리즈의 Day1의 블로그에는 gRPC-Web에 대한 훌륭한 기사와 GopherJS에서 클라이언트를 만드는 좋은 예가 있습니다. CallContentSubtype 호출에 대 한 콘텐츠 하위 형식을 설정 하는 호출 옵션을 반환 합니다.

예를 들어 콘텐츠 하위 유형이 ”json”인 경우 와이어를 통해 콘텐츠 유형은 ”응용 프로그램/grpc+json”이 됩니다. 콘텐츠 하위 유형은 콘텐츠 유형에 포함되기 전에 소문자로 변환됩니다. 자세한 내용은 https://github.com/grpc/grpc/blob/master/doc/PROTOCOL-HTTP2.md#requests 콘텐츠 유형을 참조하십시오. 위의 예제에서 모든 인터셉터 기능(로깅 및 인증)을 하나의 인터셉터에 포함했습니다. API는 클라이언트와 서버 모두에 대해 하나의 unary 인터셉터 처리기와 하나의 스트리밍 인터셉터 처리기만 허용합니다. go getgoogle.golang.org/grpc 함께 가져온 grpc 코드에는 예제도 포함되어 있습니다. $GOPATH/src/google.golang.org/grpc/예제 : 그들은 예제 디르에서 찾을 수 있습니다. `저장소서비스GrpcImpl”repositoryImpl := impl의 인스턴스를 만듭니다. NewRepositoryServiceGrpcImpl()`이 것을 업데이트하여 그리터 서비스에 두 가지 방법이 있습니다.