close
دانلود آهنگ جدید
نحوه استفاده توصیه شده RestSharp قسمت 6

یک توسعه دهنده .Net

نحوه استفاده توصیه شده RestSharp قسمت 6

RestSharp به عنوان پایه ای برای یک کلاس پروکسی برای API شما کار می کند. در اینجا چند نمونه از کتابخانه Twilio وجود دارد. ایجاد یک کلاس برای پیاده سازی پروکسی API خود را با یک متد اجرایی برای انتقال تمام درخواست ها به API ایجاد کنید.این به شما اجازه می دهد پارامترهای معمول استفاده شده و سایر تنظیمات (مانند احراز هویت) را در میان درخواست ها به اشتراک بگذارید.از آنجا که یک شناسه حساب (account ID) و کلید مخفی (secret key) برای هر درخواست مورد نیاز است، لازم است که این دو مقدار را هنگام ایجاد یک…

نحوه استفاده توصیه شده RestSharp قسمت 6

نحوه استفاده توصیه شده RestSharp قسمت 6 321

RestSharp به عنوان پایه ای برای یک کلاس پروکسی برای API شما کار می کند. در اینجا چند نمونه از کتابخانه Twilio وجود دارد.

ایجاد یک کلاس برای پیاده سازی پروکسی API خود را با یک متد اجرایی برای انتقال تمام درخواست ها به API ایجاد کنید.این به شما اجازه می دهد پارامترهای معمول استفاده شده و سایر تنظیمات (مانند احراز هویت) را در میان درخواست ها به اشتراک بگذارید.از آنجا که یک شناسه حساب (account ID) و کلید مخفی (secret key) برای هر درخواست مورد نیاز است، لازم است که این دو مقدار را هنگام ایجاد یک نمونه جدید از پروکسی منتقل کنید.

توجه داشته باشید که استثنائات از اجرا کردن نمایان نمی شود بلکه در ویژگی ErrorException در دسترس هستند.



// TwilioApi.cs public class TwilioApi { const string BaseUrl = "https://api.twilio.com/2008-08-01"; readonly string _accountSid; readonly string _secretKey; public TwilioApi(string accountSid, string secretKey) { _accountSid = accountSid; _secretKey = secretKey; } public T Execute<T>(RestRequest request) where T : new() { var client = new RestClient(); client.BaseUrl = new System.Uri(BaseUrl); client.Authenticator = new HttpBasicAuthenticator(_accountSid, _secretKey); request.AddParameter("AccountSid", _accountSid, ParameterType.UrlSegment); // used on every request var response = client.Execute<T>(request); if (response.ErrorException != null) { const string message = "Error retrieving response. Check inner details for more info."; var twilioException = new ApplicationException(message, response.ErrorException); throw twilioException; } return response.Data; } }


بعد، تعریف یک کلاس که به داده های بازگشت شده توسط API و یک روش برای پرس و جو از API برای جزئیات یک منبع خاص با نام "Call" را نشان می دهد.


// Call.cs public class Call { public string Sid { get; set; } public DateTime DateCreated { get; set; } public DateTime DateUpdated { get; set; } public string CallSegmentSid { get; set; } public string AccountSid { get; set; } public string Called { get; set; } public string Caller { get; set; } public string PhoneNumberSid { get; set; } public int Status { get; set; } public DateTime StartTime { get; set; } public DateTime EndTime { get; set; } public int Duration { get; set; } public decimal Price { get; set; } public int Flags { get; set; } } // TwilioApi.cs, method of TwilioApi class public Call GetCall(string callSid) { var request = new RestRequest(); request.Resource = "Accounts/{AccountSid}/Calls/{CallSid}"; request.RootElement = "Call"; request.AddParameter("CallSid", callSid, ParameterType.UrlSegment); return Execute<Call>(request); }


اینجا جایی است که RestSharp مراقبت می کند بنابراین شما مجبوربه مراقبت نیستید.

1- API برمیگرداند XML، که به طور خودکار شناسایی و deserialized شده و به شیء "Call" با استفاده از XmlDeserializer پیش فرض.

2- به طور پیش فرض RestRequest توسط یک درخواست HTTP GET ساخته شده است. شما می توانید این را با تنظیم متد property از RestRequest یا مشخص کردن متد در سازنده هنگام ایجاد یک نمونه تغییر دهید. (در زیر گفته شده)


3- پارامترهای نوع UrlSegment مقادیر خود را به URL تزریق می کنند بر اساس یک نام token موجود در مقدار Property resource.

AccountSid در TwilioApi.Execute تنظیم شده است زیرا برای هر درخواست رایج است.


4- ما نام عنصر ریشه (root) را برای شروع deserialization مشخص می کنیم. در این مورد، XML بازگشتی <Response> <Call> ... </ Call> </ Response> است و از آنجاییکه عنصر Response خودش اطلاعاتی راجع به مدل ما ندارد، ما یک مرحله پایینتر از درخت را شروع میکنیم .




شما همچنین می توانید درخواست های POST (و PUT / DELETE / HEAD / OPTIONS) را انجام دهید:



// TwilioApi.cs, method of TwilioApi class public Call InitiateOutboundCall(CallOptions options) { Require.Argument("Caller", options.Caller); Require.Argument("Called", options.Called); Require.Argument("Url", options.Url); var request = new RestRequest(Method.POST); request.Resource = "Accounts/{AccountSid}/Calls"; request.RootElement = "Calls"; request.AddParameter("Caller", options.Caller); request.AddParameter("Called", options.Called); request.AddParameter("Url", options.Url); if (options.Method.HasValue) request.AddParameter("Method", options.Method); if (options.SendDigits.HasValue()) request.AddParameter("SendDigits", options.SendDigits); if (options.IfMachine.HasValue) request.AddParameter("IfMachine", options.IfMachine.Value); if (options.Timeout.HasValue) request.AddParameter("Timeout", options.Timeout.Value); return Execute<Call>(request); }


این مثال همچنین نشان دهنده helper های اعتبار سنجی سبک RestSharp است. این helper ها به شما اجازه می دهند قبل از ساخت درخواست تأیید کنید که مقادیر ارائه شده معتبر هستند.


تمام مقادیر اضافه شده از طریق AddParameter در این مثال به عنوان یک فرم استاندارد کد گذاری شده، شبیه به ارسال یک فرم از طریق یک صفحه وب است. اگر این درخواست سبک GET بود (GET / DELETE / OPTIONS / HEAD)، مقدار پارامترها از طریق QueryString به جای آن ارسال می شد.شما همچنین می توانید پارامترهای هدر و کوکی را با AddParameter () اضافه کنید. برای اضافه کردن همه خواص برای یک شی به عنوان پارامتر، از AddObject () استفاده کنید. برای اضافه کردن یک فایل برای آپلود، از AddFile () استفاده کنید(درخواست  به عنوان multipart encoded form ارسال می شود). برای اضافه کردن یک بدن درخواست (مانند XML یا JSON)، از AddBody () استفاده کنید.


مثال دیگر استفاده

در اینجا یک مثال برای استفاده از یک Stream (جریان) برای جلوگیری از حافظه بافر از محتوای درخواست است. در هنگام بازیابی مقادیر زیاد اطلاعاتی که بلافاصله به دیسک شما نوشته(ارسال) می شود مفید است.


string tempFile = Path.GetTempFileName(); using (var writer = File.OpenWrite(tempFile)) { var client = new RestClient(baseUrl); var request = new RestRequest("Assets/LargeFile.7z"); request.ResponseWriter = (responseStream) => responseStream.CopyTo(writer); var response = client.DownloadData(request); }