문제

우리는 Camera Ready Art(www.camerareadyart.com)와 유사한 그래픽 작업을 위한 B2B 웹 포털을 개발했습니다.비트맵을 벡터 그래픽으로 변환하려는 사람들, 로고 디자인 및 흑백 이미지를 컬러로 채색하는 등의 일반적인 이미지 처리를 원하는 사람들을 대상으로 합니다.

우리는 사람들(우리 고객)이 우리가 제공하는 API 세트를 사용하여 작업을 게시하기 위해 문자 그대로 우리 사이트를 방문할 필요 없이 자신의 사이트에서 직접 작업을 게시할 수 있도록 기능을 추가하고 싶습니다.

나는 지금까지 이런 일을 해본 적이 없어서 어떻게 이런 일을 구현할 수 있는지에 대한 아이디어가 없습니다.또한 승인된 사람만이 자신의 작품을 게시할 수 있도록 보안을 구현하는 방법에 대해서도 알고 싶습니다.

우리가 이런 일을 어떻게 할 수 있는지에 대한 아이디어를 줄 수 있는 사람이 있나요?

도움이 되었습니까?

해결책

이 질문은 매우 넓은 영역을 다루고 있으며 단일 답변으로 문제를 자세히 다룰 수 있을지 의심됩니다.내가 할 수 있는 일은 내가 저지른 실수를 바탕으로 몇 가지 출발점을 제시하는 것이다.

자체 API를 기반으로 구축
기존 시스템에 API 기능을 추가하지 마세요.그렇게 하면:

  • 추가 테스트 부하가 발생합니다(앱과 API를 모두 독립적으로 테스트해야 함).
  • 전체 유지 관리 비용이 증가하게 됩니다.
  • 제공하려는 API보다 품질이 떨어지는 API가 발생합니다.

전반적인 목표는 먼저 API를 구축한 다음 자체 API 위에 앱을 구축하는 것입니다.그렇게 하면 다음과 같은 이점이 있습니다.

  • API 테스트는 본질적으로 앱을 테스트하는 동안 수행됩니다.
  • 필요한 API 메소드를 추가하는 것을 '잊지' 않을 것입니다.

앱과 애플리케이션 로직(API)은 논리적으로 분리됩니다. 즉, 방정식의 각 측면이 수행하는 작업과 담당하는 작업이 명확하게 구분됩니다.이는 개발을 안내하는 데 도움이 될 것입니다.이를 통해 필요할 때 앱과 API를 다른 컴퓨터에 매우 쉽게 배치할 수 있습니다.

자신만의 API를 사용하는 것은 매우 중요한 포인트입니다.API의 디자인은 처음에는 차선책이 될 것이며 API를 직접 사용해야만 사람들에게 실제로 필요한 기능을 효율적인 방식으로 제공할 수 있을 것입니다.

대략 다음과 같은 시스템이 완성됩니다.

-------------                          -------------
|           |                          |           |
| Your APP  | <= HTTP communication => | Your API  |
|           |                          |           |
-------------                          -------------

이는 몇 가지 추가 이점을 강조합니다.'귀하의 앱'을 다른 앱으로 대체하여 귀하의 고객이 가장 잘 작동하는 방식으로 문제를 처리하는 앱을 만들 수 있습니다.기존 API 위에 새 버전의 앱을 만들 수도 있습니다. 공개 웹 사이트의 새 버전으로 이동하는 것이 훨씬 쉬울 수 있습니다.

URL 디자인:클래스 및 메소드에 매핑
적절한 URL을 선택하는 것은 적절한 클래스 및 메소드 이름을 선택하는 것만큼이나 문제입니다.클래스와 해당 메소드에서 URL을 파생시키는 것은 좋은 접근 방식입니다.URL과 클래스/메서드 사이에 합리적인 상관관계가 없다면 장기적으로 유지 관리가 더 어려워질 것입니다.

저는 개인적으로 다음과 같은 방법으로 URL을 클래스 및 메소드에 연결하는 것을 선호합니다.

  • 클래스를 최상위 디렉터리에 매핑
  • 최상위 디렉터리의 하위 디렉터리에 메서드 매핑

예:
API의 URL은 다음과 같습니다. https://api.camerareadyart.com.
당신은 image 반대하다 toColour() 그리고 toBlackAndWhite() 행동 양식.

이는 다음에 매핑될 수 있습니다.

https://api.camerareadyart.com/image/toColour/
https://api.camerareadyart.com/image/toBlackAndWhite/

비트맵을 벡터로 변환하는 경우에도 유사합니다.

https://api.camerareadyart.com/bitmap/toVector/

응답 디자인
누군가 귀하의 URL 중 하나에서 데이터를 가져오거나 데이터를 게시하면 어떻게 되나요?오류는 어떻게 처리되고, 예외는 어떻게 처리되나요?응답은 어떤 형태로 이루어지나요?

여기서 무엇을 해야할지 말할 수 없습니다.개인적으로 나는 가능한 한 HTTP에 가깝게 매핑하고 필요한 경우에만 이 수준을 넘어서는 것을 선호합니다.

예를 들어 들어오는 요청이 수락되어 처리되었지만 내부적으로 오류가 발생하면 500 상태 응답을 발행합니다.마찬가지로 특정 API 메서드에 제공되지 않은 인증이 필요한 경우 403을 발행할 수 있습니다.기존 HTTP 기능을 활용하면 특정 사항을 다시 개발할 필요가 없습니다.

HTTP의 기존 측면 사용
HTTP 상태 코드를 현명하게 사용하는 것 외에도 자신만의 솔루션을 출시하기 전에 작업을 수행하기 위한 HTTP 전용 방법을 찾아보세요.

사용자가 응답 형식을 XML로 할지, JSON으로 할지 지정하길 원하시나요?HTTP Accept 헤더를 사용하세요.

요청 결과를 얻기 위해 클라이언트를 다른 URL로 리디렉션하고 싶으십니까?HTTP 위치 헤더를 사용하십시오.

HTTP에는 이미 수행하고 싶은 많은 작업을 처리하는 많은 기능이 있습니다.그것을 써!

보안
여기서 해결해야 할 두 가지 일반적인 문제가 있습니다.사용자를 인증하고 특정 사용자가 수행할 수 있는 작업을 결정합니다.

보안:입증
사용자는 요청 시 자신이 누구인지 명시해야 합니다.

가장 먼저 떠올려야 할 해결책은 사용자가 사용자 이름과 비밀번호를 지정할 수 있도록 허용하는 것입니다. 이는 앱에 액세스하는 데 사용하는 사용자 이름과 비밀번호와 동일할 수 있습니다.이는 표면적으로는 좋은 생각인 것처럼 보이지만 이상적이지는 않습니다.

사용자는 결국 자신의 사용자 이름과 비밀번호를 자신의 앱에 베이킹하게 됩니다.필연적으로 한 명의 사용자는 자신의 비밀번호를 잊어버리고 앱에 안전하게 액세스할 수 있도록 비밀번호를 변경하게 되며 그 과정에서 자신의 앱이 손상될 것입니다.

더 나은 선택은 사용자가 인증 토큰을 제공하는 것입니다. 이는 기본적으로 사용자 이름과 비밀번호가 하나로 통합된 것처럼 사용자에게 고유한 단일 값입니다.

이를 통해 사용자 이름과 비밀번호를 API에 대한 액세스와 논리적으로 분리할 수 있습니다.사용자는 API에 대한 액세스를 중단하지 않고 원하는 만큼 자주 앱의 사용자 이름 및/또는 비밀번호를 변경할 수 있습니다.

또한 사용자는 각각 서로 다른 액세스 수준을 가진 여러 API 토큰을 보유할 수 있으므로 사용자는 API 토큰을 제3자 서비스에 안전하게 제공할 수 있습니다.

보안:액세스 제어
외부 세계에 관한 한 API는 URL 집합입니다.각 URL은 정의에 따라 고유하며 고유한 작업을 수행합니다.이러한 개념을 기반으로 액세스 제어 메커니즘을 기반으로 하는 것이 좋은 출발점입니다.

나는 토큰이 액세스할 수 있는 URL 목록을 토큰별로 유지하는 것을 선호합니다.특정 토큰을 사용하여 URL에 액세스하는 경우 어떤 URL이 액세스되고 있는지, 해당 URL이 토큰의 허용된 URL 목록에 있는지 여부를 쉽게 알 수 있습니다.

각 URL이 하나의 고유한 작업을 수행하는 URL 집합을 현명하게 선택하면 이 프로세스는 얻을 수 있는 최고 수준의 액세스 제어를 제공합니다.

더 세부적인 수준의 제어를 제공하기 위해 토큰이 액세스할 수 있는 URL별로 사용할 수 있는 쿼리 인수를 지정할 수도 있습니다.

다른 팁

백엔드 웹 서비스를 설계하고 작동해야합니다. 그러나 모든 추가 기능 (보안, 스로틀 링, OAUTH 키 관리, 가입자 포털, API를 시도하는 대화식 콘솔 등)은 스스로 개발해서는 안되는 상당히 표준적인 기능 세트입니다.

시장에는 상업용 API 관리 솔루션이 있습니다. 나는 100% 오픈 소스 (APACHE) WSO2 API 관리자가있는 WSO2에서 일하며 무료로 다운로드 할 수 있습니다. 여기 또는 클라우드 호스팅 버전으로 사용하십시오 WSO2 API 클라우드.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top