REST API에서 필터링하는 방법

7699 단어 apirestgraphql
REST API에 대한 기본 지식을 습득했으며 데이터베이스에 있는 레코드를 사용하여 응답하는 라우트를 만들었습니다.이제 API가 정렬, 필터, 페이지 나누기를 지원하는 더 복잡한 요청을 처리할 수 있기를 바랍니다.가장 좋은 방법은 무엇입니까?
REST은 하나의 표준이 아니기 때문에 이런 문제를 해결하려고 시도할 때 참고할 규범이나 단일 문서의 출처가 없다.이것은 너로 하여금 자신이 무엇을 해야 하는지 알기 어렵게 할 것이다.만약 당신에게 영감을 주고 결정을 내릴 수 있도록 도와줄 수 있는 것이 있다면, 당신의 API에서 정렬, 필터, 페이지 나누기 기능을 실현하는 것은 매우 좋지 않습니까?
다행히도 타니아 라시아(Tania Rascia)가 이 주제에 대해 멋진 글을 썼기 때문에 우리 수중에 도움이 되었다.
REST API: Sorting, Filtering, and Pagination
이 문장이 너에게 무슨 도움이 되느냐

Recently, I made a backend API for some list endpoints, and implemented filtering, sorting, and pagination. There’s not really a set standard for creating these types of endpoints, and almost every one I’ve come across is different in some way. I made a few notes on what made sense to me, so this resource could be helpful for someone who is working on designing an API.


Tania의 종합적인 기사는 필터를 REST API에 구축하는 방법을 이해하는 데 도움이 되는 좋은 출발점입니다.이것은 정렬과 페이지 나누기에 대한 기초 지식과 문자열, 숫자, 날짜에 대한 다양한 종류의 필터를 포함할 수 있습니다.
본고는 모든 용례에 예시 URL을 제공할 뿐만 아니라, 모든 URL이 응용 프로그램의 SQL 데이터베이스 조회에 어떻게 비치는지 예시를 제공한다.나는 이것이 필터 기능을 고려하는 매우 실용적인 방법이라고 생각한다.

내가 잘했어?!
정렬, 필터, 페이지를 REST API에 올바르게 구성할 수 있는 방법은 없지만, 문제가 발생하기 전에 발생할 수 있는 문제와 이를 어떻게 해결하는지 이해하는 것이 좋은 출발점이 될 것입니다.
내 경험에 의하면, 나는 쉽게 이런 상황이 나타날 수 있다고 말할 수 있다. 너는 아직 너의 API를 위해 이러한 특성을 설계하지 않았고, 너는 단지 새로운 수요가 나타날 때 문제를 해결하기 시작했을 뿐이다.앞으로 모든 것을 당신의 모든 수요를 충족시키는 해결 방안에 결합시키려는 것은 재난의 비결이다. 미리 계획을 세울 때가 되었다.

키보드에서 벗어나 수첩을 들다
편집기에서 코드를 작성하는 것을 고려하기 전에, 수첩을 잡고 API의 정렬, 필터, 페이지 나누기 요구를 적어 주십시오.다음은 자신에게 물어볼 질문들입니다.
  • 어떤 필드를 기준으로 필터링하고 싶으십니까? 예를 들어 정확한 일치, 부분적인 일치, 크거나 작거나 (숫자에 대한) 필터링을 어떻게 하시겠습니까?
  • 필드가 있는 경우 어떤 필드를 기준으로 정렬하시겠습니까?
  • 에 페이지가 필요합니까?만약 항상 소량의 기록을 보낸다면, 처음에는 페이지 지원을 구축할 필요가 없을 수도 있습니다.
  • 나는 이것이 나의 머리를 코드에서 멀어지게 하고 내가 해결하고자 하는 문제를 상상할 수 있는 아주 좋은 방법이라는 것을 발견했다.

    주의 사항

    검색 문자열의 필터 검증 및 분석
    API에서 필터 기능을 구축할 때 중요한 것은 응용 프로그램 서버측의 요청 조회 문자열에서 받은 데이터를 어떻게 처리하는지 고려하는 것이다.

    Often, searches are expected to be partial, so that when I look for "Tan" it will show me "Tania" and "Tanner". The solution I liked was using like:Tan as value as opposed to modifying the parameter (such as first_name[like]=Tan).


    (출처: )
    필터 연산자 (like) 와 필터 값 (Tan) 을 혼합해서 사용하면 필터를 프로그램에서 검증하고 해석하기 어려울 것입니다. 코드를 작성해서 분리해야 하기 때문입니다.만약 작업자의 필터가 한두 개밖에 없다면, 이것은 문제가 되지 않을 수도 있지만, 많은 필터를 만들고 싶다면, 이것은 고려할 만하다.first_name[like]=Tan 방법은 보기에는 그리 좋지 않을 것 같지만, 더욱 쉽게 검증하고 해석할 수 있다.
    https://www.taniarascia.com/rest-api-sorting-filtering-pagination/#string-partial
    복잡한 필터 요구 사항
    두 수치 사이의 범위를 내장 필터링하는 방법을 연구할 때 본고는 다음과 같은 질의 문자열의 예를 보여 줍니다.
    GET /users?age=gt:12[and]lt:20
    
    

    If you need a range between two number values, using [and] in between them could be one option. This one could get complicated, depending on if you want to allow both greater than and greater than or equal, or other options.


    (출처: )
    타니아의 말대로 복잡해질 수도 있으니 전적으로 동의합니다.URL 쿼리 문자열에서 사용자 정의 쿼리 언어를 실제로 작성하기 시작했습니다. 이 유형의 필터를 검증하고 해석하기 위해 프로그램에 코드를 작성해야 합니다. 이것은 매우 복잡해지고 테스트하는 데 많은 시간이 걸릴 수 있습니다.
    REST API는 모든 일에 적합한 방법이 아닙니다. 만약 API에 복잡한 필터를 구축해야 한다면 https://www.taniarascia.com/rest-api-sorting-filtering-pagination/#number-range을 사용하는 것을 강력히 권장합니다.GraphQL은 API의 쿼리 언어로 복잡한 필터 기능을 구축하기에 매우 적합하다.GraphQL 사이트를 보시면 GraphQL의 기초 지식을 소개해 드리겠습니다. 그러면 프로젝트에 적합한지 여부를 결정할 수 있습니다.
    How to GraphQL
    다음 단계

    응용 프로그램의 검색 문자열 매개 변수에 액세스하기
    Express에서 요청 조회 문자열은 자동으로 하나의 대상으로 해석된다. 이 대상은 query 대상의 request 속성, 즉 request.query(또는 Express 문서의 약정에 따라 req.query)에 저장된다.이것은 request 대상이 첫 번째 인자로 전달되기 때문에 모든 중간부품이나 프로세서 함수에서 해석된 검색 문자열의 대상에 접근할 수 있음을 의미합니다.
    다음은 Quick Routing Processor 함수에서 query 객체에 액세스하는 예입니다.
    /**
     * Example request URL: /users?first_name=Bobinsky&last_name=King
     */
    app.get("/users", (request, response) => {
        const filters = request.query;
    
        /**
         * filters = {
         * first_name: "Bobinsky",
         * last_name: "King"
         * }
         *
         * Sweet, now we can use these filters in a database query!
         */
    });
    
    Fastify
    API 설계를 지원하는 도구를 고려하십시오.
    종이와 펜을 사용하는 것은 API 설계를 기획하기 시작하는 좋은 방법이지만, 만약 그것이 대형이고 복잡한 API이거나 다른 개발자와 합작하고 있다면, 또는 Insomnia Designer과 같은 도구를 시도해 볼 만하다.
    이러한 도구는 JSON 또는 YAML 형식의 OpenAPI 설명을 생성하는 데 도움을 줍니다.Swagger Editor은 API를 기록하는 방식으로 점점 유행하고 있으며 이미 많은 회사에서 채택되고 있다. 예를 들어 OpenAPI Specification이다.OpenAPI 설명 파일을 읽을 수 있는 도구가 늘어나고 있습니다.이러한 도구는 API 테스트를 자동화하거나 HTML 형식으로 개발자 문서를 생성하는 데 도움을 줄 수 있습니다.

    좋은 웹페이지 즐겨찾기