HttpModule এবং HttpClientModule এর মধ্যে পার্থক্য


229

অ্যাঙ্গুলার 4 অ্যাপটি পরীক্ষা করতে কোনটি মক ওয়েব পরিষেবা তৈরি করতে ব্যবহার করবেন?



1
আমি গতকাল আমার ব্লগে এর নতুন বৈশিষ্ট্যগুলির কয়েকটি লিখেছিলাম: blog.jonrshar.pe/2017/Jul/15/angular-http-client.html
জোনারশপে


6
টিউটোরিয়ালটি HTTPModule এবং কৌণিক ব্যবহার করে io
মিকি সেগাল

উত্তর:


338

আপনি কৌণিক 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.jsSystemJS

map: {
     ...
    'tslib': 'npm:tslib/tslib.js',

আপনি যদি সিস্টেমজেএস ব্যবহার করেন তবে আপনাকে অন্য ম্যাপিং যুক্ত করতে হবে:

'@angular/common/http': 'npm:@angular/common/bundles/common-http.umd.js',

1
আমি এইচটিটিপিপ্লায়েন্টমডুল আমদানি করার চেষ্টা করছি। তবে '@ কৌণিক / সাধারণ / HTTP' নোড_মডিউল ডিরেক্টরিতে উপস্থিত নেই যা আমি "এনপিএম স্টার্ট" কমান্ডটি ব্যবহার করে ইনস্টল করেছি। তুমি কি সাহায্য করতে পারো?
ধীররাজ কুমার

1
@ ধীরাজকুমার, আপনি কোন সংস্করণ ব্যবহার করছেন? এটি কেবলমাত্র 4.3.0 এবং
তারপরে

আমি গিট থেকে কৌনিক দ্রুত শুরু ডাউনলোড করেছি। এবং প্যাকেজ.জসনে, "@ কৌনিক / সাধারণ": "^ 4.3.0" উপস্থিত রয়েছে। তবে @ কৌণিক / সাধারণ / http নেই।
ধীররাজ কুমার

node_modulesফোল্ডারটি সরান এবং npm installআবার চালান
ম্যাক্স কোরেটস্কিই

5
আমি এই একই সমস্যাটি চালিয়েছি (আমি System.js ব্যবহার করছি)। এই উত্তরটি থেকে অনুপস্থিত একটি বিষয় হ'ল আপনাকে নীচের মতো নতুন নতুন মডিউলটি সিস্টেম.জেএস এও ম্যাপ করতে হবে: '@angular/common/http': 'npm:@angular/common/bundles/common-http.umd.js',
টাইলার

43

পুনরাবৃত্তি হতে চান না, তবে কেবল অন্য উপায়ে সংক্ষিপ্ত করতে (নতুন এইচটিটিপি ক্লায়েন্টে যুক্ত বৈশিষ্ট্যগুলি):

  • জেএসএন থেকে কোনও বস্তুতে স্বয়ংক্রিয় রূপান্তর
  • প্রতিক্রিয়া টাইপ সংজ্ঞা
  • ইভেন্ট গুলিবর্ষণ
  • শিরোনামের জন্য সরলীকৃত বাক্য গঠন
  • interceptors

আমি একটি নিবন্ধ লিখেছিলাম, যেখানে আমি পুরানো "এইচটিপি" এবং নতুন "এইচটিপিপিলেট" এর মধ্যে পার্থক্যটি কভার করেছি। লক্ষ্যটি ছিল সহজতম পদ্ধতিতে এটি ব্যাখ্যা করা।

কেবল কৌণিক এ নতুন এইচটিপিপিলেট সম্পর্কে


18

এটি একটি ভাল রেফারেন্স, এটি আমার 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';

অনুরোধ এবং পার্সিং প্রতিক্রিয়া:

@ কৌণিক / 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);
      });

@ কৌণিক / সাধারণ / HTTP

 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);
    }
}

এটি একটি সুন্দর সুন্দর আপগ্রেড!


আপনাকে কেবলমাত্র একটি লিঙ্ক হিসাবে নয়, আপনার উত্তরে প্রাসঙ্গিক তথ্য অন্তর্ভুক্ত করতে হবে
মাইকেল

1

এখানে একটি লাইব্রেরি রয়েছে যা আপনাকে দৃ strongly়-টাইপযুক্ত কলব্যাকের সাথে HTTPClient ব্যবহার করতে দেয় ।

এই কলব্যাকগুলির মাধ্যমে ডেটা এবং ত্রুটি সরাসরি উপলব্ধ।

বিদ্যমান একটি কারণ

আপনি যখন পর্যবেক্ষণযোগ্য এইচটিটিপিপ্লিনেন্ট ব্যবহার করেন তখন আপনাকে আপনার বাকী কোডে সাবস্ক্রাইব (x => ...) ব্যবহার করতে হবে ।

এ কারণে যে পর্যবেক্ষণযোগ্য < HttpResponse< T>> আবদ্ধ থাকে HTTPResponse

এটি আপনার বাকী কোডের সাথে এইচটিপি স্তরটিকে শক্তভাবে জুড়ে দেয় ।

এই গ্রন্থাগারটি। সাবস্ক্রাইব (x => ...) অংশটি encapsulates এবং কেবল আপনার মডেলগুলির মাধ্যমে ডেটা এবং ত্রুটি প্রকাশ করে।

দৃ strongly়ভাবে টাইপযুক্ত কলব্যাকগুলি সহ, আপনাকে কেবল আপনার বাকী কোডগুলিতে আপনার মডেলগুলির সাথে ডিল করতে হবে।

গ্রন্থাগারটিকে কৌণিক-বর্ধিত-এইচ-পি-ক্লায়েন্ট বলা হয়

গিটহাবের কৌণিক-প্রসারিত-এইচপি-ক্লায়েন্ট লাইব্রেরি

এনপিএম-এ কৌণিক-বর্ধিত-এইচ-পি-পি-ক্লায়েন্ট লাইব্রেরি

ব্যবহার করা খুব সহজ।

নমুনা ব্যবহার

প্রবলভাবে টাইপযুক্ত কলব্যাকগুলি হ'ল

সাফল্য:

  • IObservable < T>
  • IObservableHttpResponse
  • IObservableHttpCustomResponse < T>

ব্যর্থতা:

  • IObservableError < TError>
  • IObservableHttpError
  • IObservableHttpCustomError < 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<টি >> ফিরে আসতে পারেন ।


0

এইচটিপিপ্লিনেন্ট একটি নতুন এপিআই যা ৪.৩ নিয়ে আসে, এটিতে এপিআই'র আপডেট হয়েছে প্রগতি ইভেন্টগুলির জন্য সমর্থন, ডিফল্টরূপে জসন ডিসেরায়ালাইজেশন , ইন্টারসেপ্টর এবং আরও অনেক দুর্দান্ত বৈশিষ্ট্য। এখানে আরও দেখুন https://angular.io/guide/http

এইচটিটিপি হ'ল পুরানো এপিআই এবং অবশেষে হ্রাস করা হবে।

যেহেতু তাদের ব্যবহারগুলি বুনিয়াদি কাজের জন্য খুব অনুরূপ তবে আমি এইচটিটিপিপ্লিনেন্ট ব্যবহারের পরামর্শ দেব কারণ এটি আরও আধুনিক এবং সহজে ব্যবহারযোগ্য বিকল্প।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.