2016-07-05 2 views
1

팀과 함께 API를 디자인하는 동안 우리가 보내준 복잡한 쿼리 매개 변수 중 개체, 개체 배열 등으로 인코딩해야하는 몇 가지 제안 된 쿼리 매개 변수에 대한 제안이 전달되었습니다. 경로 GET /resource/ 및 쿼리 매개 변수에 필터 집합을 직접 적용하고 싶습니다. 이 필터의 목적 리터럴 구조는 백엔드에 싼 것, 뭔가GET 요청에 대해 인코딩 된 개체 쿼리 매개 변수 사용

filter: { 
    field1: { 
    contains: 'value', 
    notin: ['value2', 'value3'] 
    }, 
    field2: { 
    greaterThan: 10 
    } 
} 

처럼 같은 내부적으로 사용 express.js qs 노드 모듈로 쿼리 문자열 파서를 통해 URL에이 인코딩 될 것이다. 그러나 1) 클라이언트가 API와 연결하려고한다면 생성 된 URL을 읽기가 매우 어렵습니다. 인코딩 라이브러리를 사용해야하고 2) 필자가 이런 쿼리 매개 변수를 사용하는 것을 본 적이 없다고 생각합니다. 약간의 과장된 것이었고, 나는 그것이 어떻게 사용되고 있는지 그리고 그것이 정말로 안전한지에 대해 확신하지 못했습니다.

등의 검색어 매개 변수를 얻을 것이다 위의 예 :

GET /resource/?field1%5Bcontains%5D=value&field1%5Bnotin%5D%5B0%5D=value2&field1%5Bnotin%5D%5B1%5D=value3&field2%5BgreaterThan%5D=10 

합니까 어떤 표준이나 모범 사례가 복잡한 객체 될 일이 URL 쿼리 매개 변수를 보내는이 연습?

답변

1

가능한 매개 변수 목록이 매우 길었을 때 필터링을위한 다른 솔루션을 구현했습니다. 우리는 필터를 게시하고 필터 ID를 반환하는 두 단계로 끝내게되었습니다. 그런 다음 필터 ID를 GET 쿼리에 사용할 수 있습니다.

Google은 모범 사례를 찾는 데 어려움을 겪었습니다.

관련 문제