क्या मैं एक शून्य अनुरोध या प्रतिक्रिया के साथ जीपीसी कॉल को परिभाषित कर सकता हूं?


117

क्या प्रोटोक 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);

जवाबों:


164

केंटन की टिप्पणी के नीचे सलाह है:

... हम डेवलपर के रूप में यह अनुमान लगाने में वास्तव में खराब हैं कि हम भविष्य में क्या चाहते हैं। इसलिए मैं हमेशा सलाह देता हूं कि हर पद्धति के लिए कस्टम परम और परिणाम प्रकारों को परिभाषित करके सुरक्षित रहें, भले ही वे खाली हों।


मेरे अपने प्रश्न का उत्तर देना:

डिफ़ॉल्ट प्रोटो फ़ाइलों के माध्यम से देखते हुए, मैं उस रिक्त स्थान पर आया था जो बिल्कुल मेरे द्वारा सुझाए गए अशक्त प्रकार की तरह है :)

उस फ़ाइल का अंश:

// 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
@ EricAnderson ज्यादातर सही है, लेकिन मेरा तर्क है कि हम डेवलपर के रूप में यह अनुमान लगाने में वास्तव में खराब हैं कि हम भविष्य में क्या चाहते हैं। इसलिए मैं हमेशा सलाह देता हूं कि हर पद्धति के लिए कस्टम परम और परिणाम प्रकारों को परिभाषित करके सुरक्षित रहें, भले ही वे खाली हों।
केंटन वर्दा

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
};
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.