Axios와 Fetch의 차이점은 무엇입니까?


답변:


164

가져 오기 및 Axios의이 기능면에서 매우 유사하지만, 더 이전 버전과의 호환성을 위해 Axios의 잘 작동하는 것 같다 (가져 오기 예를 들어 IE 11에서 작업을하지 않는, 확인 이 게시물을 )

또한 JSON 요청으로 작업하는 경우 다음과 같은 차이점이 있습니다.

JSON 게시 요청 가져 오기

let url = 'https://someurl.com';
let options = {
            method: 'POST',
            mode: 'cors',
            headers: {
                'Accept': 'application/json',
                'Content-Type': 'application/json;charset=UTF-8'
            },
            body: JSON.stringify({
                property_one: value_one,
                property_two: value_two
            })
        };
let response = await fetch(url, options);
let responseOK = response && response.ok;
if (responseOK) {
    let data = await response.json();
    // do something with data
}

Axios JSON 게시 요청

let url = 'https://someurl.com';
let options = {
            method: 'POST',
            url: url,
            headers: {
                'Accept': 'application/json',
                'Content-Type': 'application/json;charset=UTF-8'
            },
            data: {
                property_one: value_one,
                property_two: value_two
            }
        };
let response = await axios(options);
let responseOK = response && response.status === 200 && response.statusText === 'OK';
if (responseOK) {
    let data = await response.data;
    // do something with data
}

그래서:

  • 페치 바디 = Axios 데이터
  • 페치의 몸체는 스트링 화 되어야하며 , Axios의 데이터는 객체를 포함 합니다
  • 가져 오기 에 요청 오브젝트에 URL이없고 Axios 에 요청 오브젝트에 URL 이 있습니다
  • 페치 요청 기능은 URL을 매개 변수로 포함하고 , Axios 요청 기능 은 URL을 매개 변수로 포함하지 않습니다 .
  • 요청이 가져 오기 확인 응답 객체가 포함 된 경우 확인 속성을 , Axios의 요청은 확인 될 때 상태가 200하는 statusText이 'OK'입니다
  • json 객체 응답을 얻으려면 : 가져 오기 에서 응답 객체 의 json () 함수 를 호출하십시오 . Axios 에서는 응답 객체의 data 속성 을 가져옵니다 .

도움이 되었기를 바랍니다.


더 많은 질문이 있습니다. responseOk가 true이면, 상태가 제공된 경우 response.data에서 상태를 확인해야합니까? 고마워
양 왕

1
Axios request is ok when status is 200 and statusText is 'OK' 201 또는 204와 같은 2xx 범위의 다른 httpStatus는 어떻습니까?
leonbloy

46

그들은 HTTP 요청 라이브러리입니다 ...

나는 같은 의심으로 끝나지만이 게시물 의 표 는 나를 따라갑니다 isomorphic-fetch. 어느 fetch것이지만 NodeJS와 함께 작동합니다.

http://andrewhfarmer.com/ajax-libraries/


위의 링크가 죽었습니다 같은 테이블이 있습니다 : https://www.javascriptstuff.com/ajax-libraries/

또는 여기 : 여기에 이미지 설명을 입력하십시오


6
여전히 축보다 페치의 이점을 찾을 수 없습니다. 내가 왜 축과 함께 가야하는지 알 수 있습니까?
Gorakh Nath

4
나는 fetch가 표준이라고 생각합니다. fetch.spec.whatwg.org ... axios 는 그것을 따르지 않기 때문에 더 많은 기능을 가질 수 있습니다 .... 결국 그들은 기본 (ajax http 요청)을 수행한다고 생각하지만 그것은 의존합니다 당신이 필요로하는 것에 ... 나는 변압기가 필요하지 않았다 ... 그래서 표준 라이브러리를 얻는 것은 프로입니다 ...
Lucas Katayama

4
해당 테이블 이 잘못된 것임을 명심하십시오 . 그것은 정의 fetch기본 ( - 필요를 라이브러리를 포함 당신은 그냥 사용할 수 없습니다 의미 실제로 반면, 그에 따라 테이블 소스) fetch되는 일부 플랫폼에서 구현되지 (특히 IE의 모든 버전)에 대해 사용자가 제공해야, 어쨌든 외부 폴리 필.
Luca Fagioli

3
@ jack123 fetch가 언급 한 차이점에 덧붙여 timeout도이 기본 기능을 구현하기 위해 별도의 모듈을 사용해야하는 것과 같은 기본 아약스 기능을 제공하지 않습니다 (매우 이상합니다).
Apurva jain

2
@LucasKatayama 링크가 끊어진 것 같습니다
vancy-pants

30

mzabriskie 에 따르면 GitHub의에 :

전반적으로 그들은 매우 유사합니다. 액시 오스의 장점 :

  • 트랜스포머 : 요청하기 전 또는 응답을받은 후 데이터에 대한 변환을 수행 할 수 있습니다.

  • 인터셉터 : 요청 또는 응답을 완전히 변경할 수 있습니다 (헤더도). 또한 요청하기 전 또는 약속이 확정되기 전에 비동기 작업을 수행하십시오.

  • 내장 XSRF 보호

브라우저 지원 Axios를 확인하십시오

여기에 이미지 설명을 입력하십시오

나는 당신이 axios를 사용해야한다고 생각합니다.


4
동의했다. Axios는 또한 작은 enuff 수입품이므로 부풀림은 그다지 신경 쓰지 않습니다. 익스프레스 또는 몽구스와는 달리 패키지 크기에 대해 약간 미친 경우 걱정할 수 있습니다. :)
CodeFinity

1
합법적 인 수정 사항을 되돌 리거나 저작자 표시없이 콘텐츠를 복사하지 마십시오.
jonrsharpe

9

또 하나 개의 큰 차이 API 및 Axios의 API를 가져 사이

  • 서비스 워커를 사용하는 동안 페치 API 만 사용해야합니다. HTTP 요청을 인터셉트하려는 경우 합니다.
  • 전의. Axios API를 사용하는 경우 서비스 워커를 사용하여 PWA에서 캐싱을 수행하는 동안 캐시 할 수 없습니다 (가져 오기 API에서만 작동 함)

6
누구나 이것이 사실인지 확인할 수 있습니까? 그것은 1 명의 사람이지만 9 개의 공감대는 아직 동의하는 것 같습니다. 이것에 대한 의견을 보는 것이 좋을 것입니다. (서비스 직원 pwa와 함께
axios를 사용하고

확실히, 우리는 이것에 대해 더 많은 의견을 가질 수 있지만 axios를 사용하는 동안 캐싱에 문제가 있고 axios를 fetch () API로 대체했을 때 해결되었습니다.
Vaibhav Bacchav

1
이것은 올바른 것 같지만 가까운 장래에 수정 될 수 있습니다. github.com/axios/axios/pull/2891
arkhz

7

Axios는 NPM을 사용하여 React 프로젝트에 쉽게 설치할 수있는 독립형 타사 패키지입니다.

언급 한 다른 옵션은 페치 기능입니다. Axios와 달리 fetch()대부분의 최신 브라우저에 내장되어 있습니다. 가져 오기를 사용하면 타사 패키지를 설치할 필요가 없습니다.

따라서 fetch()당신이하는 일을 모르거나 내 의견에 더 직접적인 Axios를 사용하면 당신에게 다가 갈 수 있습니다 .


1
Fetch는 괜찮지 만 Axios는 당신이 말한 것처럼 더 간단합니다. 최신 브라우저 (페치)에 내장 된 기능은 기능 릴리스에 적합하지 않습니다. - 나는 Axios의 선호 때문에
톰 Stickel

5

또한 ... 내 테스트에서 다양한 라이브러리를 가지고 놀고 있었고 4xx 요청의 다른 처리를 발견했습니다. 이 경우 내 테스트는 400 응답으로 json 객체를 반환합니다. 다음은 인기있는 3 개의 lib가 응답을 처리하는 방법입니다.

// request-promise-native
const body = request({ url: url, json: true })
const res = await t.throws(body);
console.log(res.error)


// node-fetch
const body = await fetch(url)
console.log(await body.json())


// Axios
const body = axios.get(url)
const res = await t.throws(body);
console.log(res.response.data)

관심의 대상은 request-promise-nativeaxios동안 4XX 응답에 던져 node-fetch하지 않습니다. 또한 fetchJSON 구문 분석에 대한 약속을 사용합니다.


1
@baitun 이들은 단위 테스트를 실행 중이며 (모카를 사용하고 있다고 생각합니다) 종종 .throws오류를 테스트 하는 방법이 있습니다. 이 경우 나는 3 라이브러리에서 거부를 테스트하고 반환 된 데이터의 차이를 발견했습니다.
cyberwombat

3

액시오의 장점 :

  • 트랜스포머 : 요청하기 전 또는 응답을받은 후 데이터를 변환 할 수 있습니다.
  • 인터셉터 : 요청 또는 응답을 완전히 변경할 수 있습니다 (헤더도). 또한 요청이 이루어지기 전 또는 약속이 확정되기 전에 비동기 작업을 수행합니다.
  • 내장 XSRF 보호

axios이상 장점fetch

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.