অ্যাঙ্গুলার 4 অ্যাপটি পরীক্ষা করতে কোনটি মক ওয়েব পরিষেবা তৈরি করতে ব্যবহার করবেন?
অ্যাঙ্গুলার 4 অ্যাপটি পরীক্ষা করতে কোনটি মক ওয়েব পরিষেবা তৈরি করতে ব্যবহার করবেন?
উত্তর:
আপনি কৌণিক 4.3.x এবং উপরের ব্যবহার করে থাকলে HttpClient
ক্লাসটি ব্যবহার করুন HttpClientModule
:
import { HttpClientModule } from '@angular/common/http';
@NgModule({
imports: [
BrowserModule,
HttpClientModule
],
...
class MyService() {
constructor(http: HttpClient) {...}
এটি নিম্নলিখিত উন্নতিগুলির সাথে মডিউল http
থেকে আপগ্রেড সংস্করণ @angular/http
:
- ইন্টারসেপ্টররা পাইপলাইনে মিডলওয়্যার যুক্তিকে সন্নিবেশ করার অনুমতি দেয়
- অনিবার্য অনুরোধ / প্রতিক্রিয়া অবজেক্টস
- উভয় অনুরোধ আপলোড এবং প্রতিক্রিয়া ডাউনলোডের জন্য অগ্রগতি ইভেন্ট
এটি কৌনিকটিতে ইন্টারসেপ্টর এবং এইচটিপিপিপ্লায়েন্ট মেকানিক্সের জন্য অন্তর্নিহিতদের গাইডে কীভাবে কাজ করে সে সম্পর্কে আপনি পড়তে পারেন ।
- টাইপড, সিঙ্ক্রোনাস প্রতিক্রিয়া দেহের অ্যাক্সেস, জেএসওএন শরীরের ধরণের সমর্থন সহ
- জেএসএন হ'ল একটি অনুমিত ডিফল্ট এবং আর স্পষ্টভাবে পার্স করার দরকার নেই
- অনুরোধের পরে যাচাইকরণ এবং ফ্লাশ ভিত্তিক পরীক্ষার কাঠামো
পুরানো HTTP ক্লায়েন্টকে অগ্রাহ্য করা হবে। প্রতিশ্রুতি বার্তা এবং অফিসিয়াল ডক্সের লিঙ্কগুলি এখানে ।
এছাড়াও মনোযোগ দিন যে পুরানো HTTP Http
নতুনটির পরিবর্তে ক্লাস টোকেন ব্যবহার করে ইঞ্জেকশন করা হয়েছিল HttpClient
:
import { HttpModule } from '@angular/http';
@NgModule({
imports: [
BrowserModule,
HttpModule
],
...
class MyService() {
constructor(http: Http) {...}
এছাড়াও, রানটাইমের HttpClient
ক্ষেত্রে নতুনের প্রয়োজন tslib
রয়েছে বলে মনে হয় , তাই আপনি এটি ব্যবহার করে ইনস্টল করে npm i tslib
আপডেট করতে হবে :system.config.js
SystemJS
map: {
...
'tslib': 'npm:tslib/tslib.js',
আপনি যদি সিস্টেমজেএস ব্যবহার করেন তবে আপনাকে অন্য ম্যাপিং যুক্ত করতে হবে:
'@angular/common/http': 'npm:@angular/common/bundles/common-http.umd.js',
node_modules
ফোল্ডারটি সরান এবং npm install
আবার চালান
'@angular/common/http': 'npm:@angular/common/bundles/common-http.umd.js',
পুনরাবৃত্তি হতে চান না, তবে কেবল অন্য উপায়ে সংক্ষিপ্ত করতে (নতুন এইচটিটিপি ক্লায়েন্টে যুক্ত বৈশিষ্ট্যগুলি):
আমি একটি নিবন্ধ লিখেছিলাম, যেখানে আমি পুরানো "এইচটিপি" এবং নতুন "এইচটিপিপিলেট" এর মধ্যে পার্থক্যটি কভার করেছি। লক্ষ্যটি ছিল সহজতম পদ্ধতিতে এটি ব্যাখ্যা করা।
এটি একটি ভাল রেফারেন্স, এটি আমার HTTP অনুরোধগুলিকে httpClient এ পরিবর্তন করতে সহায়তা করেছে helped
https://blog.hackages.io/angular-http-httpclient-same-but-different-86a50bbcc450
এটি উভয়কে পার্থক্যের দিক দিয়ে তুলনা করে কোড উদাহরণ দেয়।
আমার প্রকল্পের httpclient- এ পরিষেবাদি পরিবর্তন করার সময় আমি এটির কয়েকটি পার্থক্য (আমার উল্লেখ করা নিবন্ধটি থেকে ধার):
import {HttpModule} from '@angular/http';
import {HttpClientModule} from '@angular/common/http';
this.http.get(url)
// Extract the data in HTTP Response (parsing)
.map((response: Response) => response.json() as GithubUser)
.subscribe((data: GithubUser) => {
// Display the result
console.log('TJ user data', data);
});
this.http.get(url)
.subscribe((data: GithubUser) => {
// Data extraction from the HTTP response is already done
// Display the result
console.log('TJ user data', data);
});
দ্রষ্টব্য: আপনাকে আর ফেরত ডেটা স্পষ্টভাবে বের করতে হবে না; ডিফল্টরূপে, যদি আপনি ফিরে ফিরে আসা ডেটা জেএসএনের ধরণের হন তবে আপনাকে অতিরিক্ত কিছু করতে হবে না।
তবে, যদি আপনাকে অন্য কোনও ধরণের প্রতিক্রিয়া যেমন পাঠ্য বা ব্লবকে বিশ্লেষণের প্রয়োজন হয় তবে নিশ্চিত হয়ে নিন যে আপনি responseType
অনুরোধটি যুক্ত করেছেন। তাই ভালো:
responseType
বিকল্প সহ জিইটি এইচটিটিপি অনুরোধ করা : this.http.get(url, {responseType: 'blob'})
.subscribe((data) => {
// Data extraction from the HTTP response is already done
// Display the result
console.log('TJ user data', data);
});
আমি প্রতিটি অনুরোধে আমার অনুমোদনের জন্য টোকেন যুক্ত করার জন্য ইন্টারসেপ্টরগুলিও ব্যবহার করেছি:
এটি একটি ভাল রেফারেন্স: https://offering.solutions/blog/articles/2017/07/19/angular-2-new-http-interface-with-interceptors/
তাই ভালো:
@Injectable()
export class MyFirstInterceptor implements HttpInterceptor {
constructor(private currentUserService: CurrentUserService) { }
intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
// get the token from a service
const token: string = this.currentUserService.token;
// add it if we have one
if (token) {
req = req.clone({ headers: req.headers.set('Authorization', 'Bearer ' + token) });
}
// if this is a login-request the header is
// already set to x/www/formurl/encoded.
// so if we already have a content-type, do not
// set it, but if we don't have one, set it to
// default --> json
if (!req.headers.has('Content-Type')) {
req = req.clone({ headers: req.headers.set('Content-Type', 'application/json') });
}
// setting the accept header
req = req.clone({ headers: req.headers.set('Accept', 'application/json') });
return next.handle(req);
}
}
এটি একটি সুন্দর সুন্দর আপগ্রেড!
এখানে একটি লাইব্রেরি রয়েছে যা আপনাকে দৃ strongly়-টাইপযুক্ত কলব্যাকের সাথে HTTPClient ব্যবহার করতে দেয় ।
এই কলব্যাকগুলির মাধ্যমে ডেটা এবং ত্রুটি সরাসরি উপলব্ধ।
আপনি যখন পর্যবেক্ষণযোগ্য এইচটিটিপিপ্লিনেন্ট ব্যবহার করেন তখন আপনাকে আপনার বাকী কোডে সাবস্ক্রাইব (x => ...) ব্যবহার করতে হবে ।
এ কারণে যে পর্যবেক্ষণযোগ্য < HttpResponse
< T
>> আবদ্ধ থাকে HTTPResponse ।
এটি আপনার বাকী কোডের সাথে এইচটিপি স্তরটিকে শক্তভাবে জুড়ে দেয় ।
এই গ্রন্থাগারটি। সাবস্ক্রাইব (x => ...) অংশটি encapsulates এবং কেবল আপনার মডেলগুলির মাধ্যমে ডেটা এবং ত্রুটি প্রকাশ করে।
দৃ strongly়ভাবে টাইপযুক্ত কলব্যাকগুলি সহ, আপনাকে কেবল আপনার বাকী কোডগুলিতে আপনার মডেলগুলির সাথে ডিল করতে হবে।
গ্রন্থাগারটিকে কৌণিক-বর্ধিত-এইচ-পি-ক্লায়েন্ট বলা হয় ।
গিটহাবের কৌণিক-প্রসারিত-এইচপি-ক্লায়েন্ট লাইব্রেরি
এনপিএম-এ কৌণিক-বর্ধিত-এইচ-পি-পি-ক্লায়েন্ট লাইব্রেরি
ব্যবহার করা খুব সহজ।
প্রবলভাবে টাইপযুক্ত কলব্যাকগুলি হ'ল
সাফল্য:
T
>T
>ব্যর্থতা:
TError
>TError
>import { HttpClientExtModule } from 'angular-extended-http-client';
এবং @ এনজিএমডিউল আমদানিতে
imports: [
.
.
.
HttpClientExtModule
],
//Normal response returned by the API.
export class RacingResponse {
result: RacingItem[];
}
//Custom exception thrown by the API.
export class APIException {
className: string;
}
আপনার পরিষেবাতে, আপনি কেবল এই কলব্যাক প্রকারগুলি দিয়ে প্যারাম তৈরি করেন।
তারপরে, তাদের HTTPClientExt এর পান পদ্ধতিতে পাস করুন ।
import { Injectable, Inject } from '@angular/core'
import { RacingResponse, APIException } from '../models/models'
import { HttpClientExt, IObservable, IObservableError, ResponseType, ErrorType } from 'angular-extended-http-client';
.
.
@Injectable()
export class RacingService {
//Inject HttpClientExt component.
constructor(private client: HttpClientExt, @Inject(APP_CONFIG) private config: AppConfig) {
}
//Declare params of type IObservable<T> and IObservableError<TError>.
//These are the success and failure callbacks.
//The success callback will return the response objects returned by the underlying HttpClient call.
//The failure callback will return the error objects returned by the underlying HttpClient call.
getRaceInfo(success: IObservable<RacingResponse>, failure?: IObservableError<APIException>) {
let url = this.config.apiEndpoint;
this.client.get(url, ResponseType.IObservable, success, ErrorType.IObservableError, failure);
}
}
আপনার উপাদানগুলিতে, আপনার পরিষেবা ইনজেকশন করা হয়েছে এবং getRaceInfo এপিআই নীচে প্রদর্শিত হিসাবে ডাকা হয়েছে।
ngOnInit() {
this.service.getRaceInfo(response => this.result = response.result,
error => this.errorMsg = error.className);
}
উভয়ই, প্রতিক্রিয়া এবং কলব্যাকগুলিতে ফিরে আসা ত্রুটি দৃ strongly়ভাবে টাইপ করা হয়। যেমন। প্রতিক্রিয়া হ'ল রেসিংস্পোনস টাইপ এবং ত্রুটি হ'ল APIException ।
আপনি কেবলমাত্র এই মডেলগুলির সাথে দৃ strongly়ভাবে টাইপযুক্ত কলব্যাকগুলিতে ডিল করেন।
সুতরাং, আপনার কোডের বাকী অংশগুলি কেবল আপনার মডেলগুলি সম্পর্কে জানে।
এছাড়াও, আপনি এখনও traditionalতিহ্যবাহী রুটটি ব্যবহার করতে পারেন এবং পরিষেবা API থেকে পর্যবেক্ষণযোগ্য < HttpResponse<
টি >
> ফিরে আসতে পারেন ।
এইচটিপিপ্লিনেন্ট একটি নতুন এপিআই যা ৪.৩ নিয়ে আসে, এটিতে এপিআই'র আপডেট হয়েছে প্রগতি ইভেন্টগুলির জন্য সমর্থন, ডিফল্টরূপে জসন ডিসেরায়ালাইজেশন , ইন্টারসেপ্টর এবং আরও অনেক দুর্দান্ত বৈশিষ্ট্য। এখানে আরও দেখুন https://angular.io/guide/http
এইচটিটিপি হ'ল পুরানো এপিআই এবং অবশেষে হ্রাস করা হবে।
যেহেতু তাদের ব্যবহারগুলি বুনিয়াদি কাজের জন্য খুব অনুরূপ তবে আমি এইচটিটিপিপ্লিনেন্ট ব্যবহারের পরামর্শ দেব কারণ এটি আরও আধুনিক এবং সহজে ব্যবহারযোগ্য বিকল্প।