मुझे REJECT क्रिया के साथ किसी तृतीय-पक्ष REST API पर कॉल करना होगा।

केवल REST :: क्लाइंट :: अनुरोध का उपयोग करने का प्रयास करना, यह शिकायत करना कि शिकायत कुछ मानक तरीकों में से एक नहीं है:

REST :: ग्राहक अपवाद: अनुरोध करने के लिए पहला तर्क GET, PATCH, PUT, POST, DELETE, OPTIONS, HEAD में से एक होना चाहिए

क्या मैं अपना कॉल करने के लिए अभी भी REST :: क्लाइंट का उपयोग कर सकता हूं? क्या मुझे पूरी तरह से एक अलग पुस्तकालय का उपयोग करना होगा? मुझे पता है कि, अंतिम उपाय के रूप में curl भस्म काम कर सकता है, लेकिन ...

1
badp 1 पद 2015, 15:10

2 जवाब

सबसे बढ़िया उत्तर

मैं ईमानदारी से REST के बारे में जानने के लिए पर्याप्त नहीं हूं कि क्या यह समस्या का एक पर्याप्त सार्वभौमिक समाधान है, लेकिन थोड़ा सा googling इस बात से सहमत है कि मुझे सबसे अच्छी तरह से व्यवहार किए गए REST एपीआई के लिए काम करना चाहिए, जिसमें मैंने एक का उपयोग किया है:

$client->addHeader('X-HTTP-Method-Override', 'REJECT');
$client->POST(...);
1
badp 1 पद 2015, 13:58

नहीं, आप नहीं कर सकते।

em> एरर चेक जो request विधि का हिस्सा है और इंजेक्टेबल नहीं है, इसलिए आप इसे ओवरराइटिंग के बिना बस ओवरराइट नहीं कर सकते और पूरे request का पुनर्निर्माण नहीं कर सकते।

#error check
croak "REST::Client exception: First argument to request must be one of GET, PATCH, PUT, POST, DELETE, OPTIONS, HEAD" unless $method =~ /^(get|patch|put|post|delete|options|head)$/i;

हालांकि , अगर यह कोई समस्या नहीं है, तो आप इसे उप-वर्ग कर सकते हैं, request को एक सटीक प्रति के साथ, लेकिन एक अलग regex के साथ लिखें और REJECT के लिए अपनी स्वयं की सुविधा विधि जोड़ें। । यह कुछ इस तरह दिखेगा।

package REST::Client::WithReject;
use parent 'REST::Client';

sub request {
    my $self = shift;

   # original code ...

    #error check
    croak "REST::Client exception: First argument to request must be one of GET, PATCH, PUT, POST, DELETE, OPTIONS, HEAD, REJECT" unless $method =~ /^(get|patch|put|post|delete|options|head|reject)$/i;

    # original code ...
}

sub REJECT {
    my $self = shift;
    return $self->request('REJECT', @_);
}

फिर आप मूल पैकेज के बजाय अपने पैकेज का उपयोग कर सकते हैं। बेशक, यह REST :: क्लाइंट के अपडेट से लाभान्वित नहीं होगा, इसलिए यदि आपको request भविष्य के रिलीज़ में परिवर्तन होता है, तो आपको स्वयं को अपडेट करना होगा।

यह काम करता है क्योंकि अंतर्निहित HTTP :: अनुरोध पद्धति के बारे में बिल्कुल परवाह नहीं करता है। यह इसे शब्दशः उपयोग करता है। आप जो चाहें वहां डाल सकते हैं, यह Get, GET, get या GETTHEFSCKOUT हो सकते हैं। सबसे अधिक संभावना है कि दूसरे छोर पर सर्वर पिछले एक से सहमत नहीं होगा, हालांकि ...

1
simbabque 1 पद 2015, 13:28