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-native 및 axios동안 4XX 응답에 던져 node-fetch하지 않습니다. 또한 fetchJSON 구문 분석에 대한 약속을 사용합니다.


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

3

액시오의 장점 :

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

axios이상 장점fetch

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