আমি কোনও নালিশ অনুরোধ বা প্রতিক্রিয়া দিয়ে একটি জিআরপিসি কলকে সংজ্ঞায়িত করতে পারি?


116

প্রোটো 3-তে থাকা আরপিসি সিনট্যাক্স নাল অনুরোধ বা প্রতিক্রিয়াগুলিকে অনুমতি দেয়?

যেমন আমি নীচের সমতুল্য চাই:

rpc Logout;
rpc Status returns (Status);
rpc Log (LogData);

অথবা আমি কেবল একটি নাল টাইপ তৈরি করা উচিত?

message Null {};

rpc Logout (Null) returns (Null);
rpc Status (Null) returns (Status);
rpc Log (LogData) returns (Null);

উত্তর:


163

ক্যান্টনের মন্তব্য নীচের শব্দগুলি:

... আমরা বিকাশকারী হিসাবে ভবিষ্যতে আমরা কী চাই তা অনুমান করার পক্ষে সত্যই খারাপ। তাই আমি সর্বদা প্রতিটি পদ্ধতির জন্য কাস্টম প্যারাম এবং ফলাফলের ধরণ নির্ধারণ করে নিরাপদে থাকার পরামর্শ দিই, যদিও তা খালি রয়েছে।


আমার নিজের প্রশ্নের উত্তর:

ডিফল্ট প্রোটো ফাইলগুলি সন্ধান করে, আমি খালি জুড়ে এসেছি যা হুবহু উপরে উল্লিখিত নাল টাইপের মতো :)

ফাইলটি থেকে উদ্ধৃত অংশ:

// A generic empty message that you can re-use to avoid defining duplicated
// empty messages in your APIs. A typical example is to use it as the request
// or the response type of an API method. For instance:
//
//     service Foo {
//       rpc Bar(google.protobuf.Empty) returns (google.protobuf.Empty);
//     }
//

message Empty {

}

33
হ্যাঁ. খালিটি হ'ল অনুরোধ বা প্রতিক্রিয়াটিকে "আমি যত্ন করি না" ক্যানোনিকাল। আমি নোট করব, আপনি যদি ভাবেন যে আপনি ভবিষ্যতে যুক্তি বা প্রত্যাবর্তনের মানগুলি পেতে চান, তবে একটি নতুন বার্তা করুন যার কেবল ক্ষেত্র নেই। আপনি যখন কোনও অ্যাপ্লিকেশন কোডটি ভাঙ্গেন এবং না ভাঙ্গেন তখন আপনি নতুন ক্ষেত্রগুলি যুক্ত করতে পারেন। আপনি কখনই যুক্তি বা প্রত্যাবর্তনের মান চাইবেন না তার জন্য খালিটি দুর্দান্ত।
এরিক অ্যান্ডারসন

40
@ এরিক অ্যান্ডারসন বেশিরভাগ ক্ষেত্রেই সঠিক, তবে আমি যুক্তি দেব যে আমরা বিকাশকারী হিসাবে ভবিষ্যতে আমরা কী চাই তা অনুমান করার পক্ষে সত্যই খারাপ । তাই আমি সর্বদা প্রতিটি পদ্ধতির জন্য কাস্টম প্যারাম এবং ফলাফলের ধরণ নির্ধারণ করে নিরাপদে থাকার পরামর্শ দিই, যদিও তা খালি রয়েছে।
কেন্টন ভারদা

1
"... আমরা বিকাশকারী হিসাবে ভবিষ্যতে আমাদের কী চাইবে তা অনুমান করার পক্ষে সত্যই খারাপ" ", এর Emptyজন্য প্রতিটি স্বতন্ত্র ফাংশন কলের জন্য একটি পৃথক বার্তা প্রয়োজন হবে ? এটি বেশ ত্যাগ।
রবার্ট ডি ডব্লিউ

29

আপনি পূর্বনির্ধারিত ব্যবহার করতে পারেন:

import "google/protobuf/empty.proto";
package MyPackage;

service MyService {
  rpc Check(google.protobuf.Empty) returns (google.protobuf.Empty) {}
}

0

আপনি জবাব কাঠামোর ভিতরে অন্য একটি বুল সম্পত্তি ব্যবহার করতে পারেন। এটার মত

message Reply {
  string result = 1;
  bool found = 2;
}

সুতরাং আপনি যদি ফলাফলটি খুঁজে না পান বা কোনও ত্রুটি ঘটেছে আপনি পরিষেবা ক্লাস থেকে এটি ফিরে আসতে পারেন

return new Reply()
{
   Found = false
};
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.