في عالم تطوير الويب السريع، أصبحت Angular تشغل مكانة مهمة لنفسها. إذا كنت تعمل مع Angular و APIs، فمن المحتمل أنك واجهت الحاجة إلى تحديث الموارد على الخادم. هنا تأتي طلبات PUT في Angular في اللعب. سواء كنت مطورًا مخضرمًا أو كنت فقط تبدأ، فإن فهم كيفية إجراء طلبات PUT في Angular أمر حاسم لضمان أن تطبيقاتك يمكن أن تتواصل بفعالية مع APIs.
فهم طلبات PUT في Angular
في جوهرها، يُستخدم طلب PUT لتحديث مورد موجود على الخادم. على عكس طلب POST، الذي يُستخدم عادةً لإنشاء موارد جديدة، فإن طلب PUT يستبدل المورد بالكامل بالبيانات التي ترسلها. هذا يعني أنه إذا كنت تريد فقط تحديث بعض الحقول في المورد، تحتاج إلى إرسال المورد بالكامل مع الحقول المحدثة.
لماذا تستخدم طلبات PUT؟
استخدام طلبات PUT في Angular له مزايا عدة:
- الاتساق: طلبات PUT خالية من التأثير الجانبي. هذا يعني أنه بغض النظر عن عدد المرات التي ترسل فيها الطلب، تبقى حالة المورد كما هي.
- الوضوح: يُشير PUT بوضوح إلى أنك تقوم بتحديث مورد موجود، مما يجعل الشيفرة الخاصة بك أكثر قابلية للقراءة والصيانة.

إعداد مشروع Angular الخاص بك
قبل أن تتمكن من إجراء طلب PUT، تحتاج إلى مشروع Angular. إذا لم يكن لديك واحد بعد، إليك ملخص سريع حول كيفية البدء:
ng new angular-put-request-demo
cd angular-put-request-demo
ng serve
الآن، لديك تطبيق Angular أساسي يعمل.
إجراء أول طلب PUT لك في Angular
دعنا نفصل الخطوات اللازمة لإجراء طلب PUT في Angular.
الخطوة 1: استيراد HttpClientModule
أولاً، تحتاج إلى استيراد HttpClientModule في تطبيق Angular الخاص بك. يوفر هذا الوحدة واجهة برمجة التطبيقات مبسطة لوظائف HTTP.
افتح app.module.ts وأضف الاستيراد التالي:
import { HttpClientModule } from '@angular/common/http';
@NgModule({
declarations: [
// مكوناتك هنا
],
imports: [
// وحدات أخرى هنا
HttpClientModule
],
providers: [],
bootstrap: [AppComponent]
})
export class AppModule { }
الخطوة 2: إنشاء خدمة لطلبات API
إنشاء خدمة لطلبات API الخاصة بك يساعد في الحفاظ على شيفرتك معيارية وقابلة لإعادة الاستخدام. دعنا نُنشئ خدمة تُسمى ApiService.
ng generate service api
في الملف الذي تم إنشاؤه حديثًا api.service.ts، قم بحقن HttpClient وأنشئ طريقة لطلب PUT.
import { Injectable } from '@angular/core';
import { HttpClient } from '@angular/common/http';
import { Observable } from 'rxjs';
@Injectable({
providedIn: 'root'
})
export class ApiService {
private apiUrl = 'https://your-api-url.com/resources';
constructor(private http: HttpClient) { }
updateResource(id: number, resourceData: any): Observable<any> {
const url = `${this.apiUrl}/${id}`;
return this.http.put(url, resourceData);
}
}
في هذه الخدمة، قمنا بتعريف طريقة updateResource التي تأخذ id و resourceData، وتبني URL المناسب، ثم تقوم بعمل طلب PUT لتحديث المورد.
دمج طلبات PUT في المكون الخاص بك
الآن بعد إعداد الخدمة الخاصة بك، حان الوقت لاستخدامها في مكون. في هذا المثال، سنستخدم AppComponent.
الخطوة 3: حقن ApiService
في app.component.ts، أضف حقنًا لـ ApiService وأنشئ طريقة لاستدعاء وظيفة updateResource.
import { Component } from '@angular/core';
import { ApiService } from './api.service';
@Component({
selector: 'app-root',
templateUrl: './app.component.html',
styleUrls: ['./app.component.css']
})
export class AppComponent {
title = 'angular-put-request-demo';
constructor(private apiService: ApiService) {}
updateResource() {
const id = 1; // مثال على معرف المورد
const updatedData = {
name: 'اسم المورد المحدث',
description: 'وصف المورد المحدث'
};
this.apiService.updateResource(id, updatedData).subscribe(
response => {
console.log('تم تحديث المورد بنجاح', response);
},
error => {
console.error('خطأ في تحديث المورد', error);
}
);
}
}
في هذا المكون، قمنا بإنشاء طريقة updateResource التي تستدعي طريقة updateResource من ApiService.
الخطوة 4: إضافة مُطلق في القالب
لتشغيل التحديث، أضف زرًا في app.component.html.
<div style="text-align:center">
<h1>
مرحبًا بكم في {{ title }}!
</h1>
<button (click)="updateResource()">تحديث المورد</button>
</div>
التعامل مع الاستجابات والأخطاء
التعامل مع الاستجابات والأخطاء هو جزء مهم من العمل مع APIs. في المثال السابق، استخدمنا subscribe للتعامل مع الاستجابة والأخطاء.
ومع ذلك، بالنسبة للتطبيقات الأكثر تعقيدًا، قد ترغب في استخدام catchError من rxjs/operators للتعامل مع الأخطاء بطريقة أكثر تناسقًا.
استخدام catchError في معالجة الأخطاء
أولاً، استورد المشغلين الضروريين:
import { catchError } from 'rxjs/operators';
import { throwError } from 'rxjs';
ثم، قم بتحديث updateResource في api.service.ts:
updateResource(id: number, resourceData: any): Observable<any> {
const url = `${this.apiUrl}/${id}`;
return this.http.put(url, resourceData).pipe(
catchError(this.handleError)
);
}
private handleError(error: any) {
console.error('حدث خطأ:', error);
return throwError(error);
}
مع هذا الإعداد، ستتم معالجة أي أخطاء أثناء طلب PUT بواسطة handleError، التي يمكنك تخصيصها بشكل أكبر لتناسب احتياجاتك.
استخدام Apidog لإدارة API
عند العمل مع APIs، فإن وجود أداة موثوقة لإدارة واختبار طلباتك يمكن أن يوفر لك الكثير من الوقت والجهد. Apidog هو خيار ممتاز لهذا الغرض. يوفر واجهة سهلة الاستخدام لإنشاء واختبار وتوثيق APIs الخاصة بك. بالإضافة إلى ذلك، إنه مجاني للاستخدام!
فوائد استخدام Apidog
- اختبار سهل: اختبر APIs الخاصة بك بسرعة باستخدام واجهة بديهية.
- توثيق شامل: توليد توثيق تلقائي لـ APIs الخاصة بك.
- التعاون: مشاركة مواصفات API الخاصة بك مع فريقك بكل سهولة.
لتبدأ في استخدام Apidog، ما عليك سوى تنزيله مجانًا ودمجه في سير العمل الخاص بك.
كيفية إرسال طلب PUT في Angular باستخدام Apidog
لإنشاء واختبار طلب PUT في Apidog، يمكنك اتباع هذه الخطوات:
- فتح Apidog: افتح Apidog وأنشئ طلبًا جديدًا.

2. تحديد طريقة HTTP: اختر PUT كطريقة HTTP.

3. تحديد URL الطلب: أدخل عنوان URL للمورد الذي تريد تحديثه، وأضف رؤوس الطلب، و/أو جسم الطلب. ثم انقر على زر "إرسال" لإرسال طلب PUT

4. تحقق من الاستجابة: تحقق من الاستجابة من الخادم لضمان نجاح طلب PUT.

معالجة طلبات PUT المتقدمة
حتى الآن، قمنا بتغطية أساسيات إجراء طلب PUT في Angular. دعنا نستكشف بعض المواضيع المتقدمة التي يمكن أن تساعدك في أن تصبح أكثر كفاءة.
تحسين التعامل مع البيانات باستخدام النماذج
يمكن أن تساعدك استخدام نماذج TypeScript في ضمان أن معالجة بياناتك آمنة من حيث الأنواع وأكثر قابلية للصيانة. قم بإنشاء نموذج لموردك:
export interface Resource {
id: number;
name: string;
description: string;
}
ثم، قم بتحديث الخدمة الخاصة بك لاستخدام هذا النموذج:
import { Resource } from './resource.model';
updateResource(id: number, resourceData: Resource): Observable<Resource> {
const url = `${this.apiUrl}/${id}`;
return this.http.put<Resource>(url, resourceData).pipe(
catchError(this.handleError)
);
}
تحديثات جزئية باستخدام طلبات PATCH
إذا كنت بحاجة إلى تحديث بعض الحقول في مورد دون إرسال المورد بالكامل، ففكر في استخدام طلب PATCH بدلاً من PUT. إليك كيفية تعديل الخدمة:
updateResourcePartially(id: number, partialData: Partial<Resource>): Observable<Resource> {
const url = `${this.apiUrl}/${id}`;
return this.http.patch<Resource>(url, partialData).pipe(
catchError(this.handleError)
);
}
المعترضات لتخصيص الطلبات
تقدم Angular معترضات HTTP لتعديل الطلبات على مستوى عالمي. يمكنك استخدام المعترضات لإضافة رموز المصادقة، والتعامل مع الأخطاء، أو تسجيل الطلبات.
أولاً، قم بإنشاء معترض:
ng generate interceptor http
في الملف الذي تم إنشاؤه http.interceptor.ts، قم بتنفيذ منطق المعترض:
import { Injectable } from '@angular/core';
import { HttpInterceptor, HttpRequest, HttpHandler, HttpEvent } from '@angular/common/http';
import { Observable } from 'rxjs';
@Injectable()
export class HttpInterceptorService implements HttpInterceptor {
intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
const clonedRequest = req.clone({
headers: req.headers.set('Authorization', 'Bearer your-token-here')
});
return next.handle(clonedRequest);
}
}
ثم، قم بتسجيل المعترض في app.module.ts:
import { HTTP_INTERCEPTORS } from '@angular/common/http';
import { HttpInterceptorService } from './http.interceptor';
@NgModule({
// تكوينات أخرى
providers: [
{ provide: HTTP_INTERCEPTORS, useClass: HttpInterceptorService, multi: true }
],
})
export class AppModule { }
الخاتمة
إتقان طلبات PUT في Angular أمر ضروري لأي مطور يعمل مع APIs. من خلال فهم الأساسيات واستكشاف تقنيات متقدمة، يمكنك ضمان أن تطبيقاتك قوية وفعالة وقابلة للصيانة. تذكر الاستفادة من أدوات مثل Apidog لتبسيط عملية تطوير واختبار API الخاصة بك.
إذا لم تقم بذلك بالفعل، قم بتنزيل Apidog مجانًا وابدأ في تحسين سير العمل الخاص بك مع API اليوم. برمجة سعيدة!
