2017-03-27 3 views
0

API-app를 올바르게 구성하는 것과 관련된 몇 가지 기본적인 질문이 있습니다. 일반적인 질문이지만 Laravel을 사용하는 것이 중요 할 수도 있습니다. 다음과 같이Laravel로 API-app를 올바르게 구성하는 방법

내 구조는 다음과 같습니다 컨트롤러 클래스 내에서 다른 방법을 가리키는 엔드 포인트와

  • 휴지 API를. 전달 된 개체의 형식은 Request입니다.
  • 컨트롤러 클래스는 모든 유효성 검사 (validate-methods를 통해), 권한 부여 (gate를 통해) 및 데이터베이스에서 각 모델 가져 오기 (요청의 id 기반)를 수행합니다. 모델이없는 경우 오류를 반환합니다. 마지막으로 컨트롤러는 모델 객체를 전달하면서 내 서비스 클래스 내의 해당 메소드를 호출합니다.
  • 이제 서비스 클래스는 모델 인스턴스에서 다른 작업 (예 : 사용자 이름 업데이트)을 수행하고 업데이트 (Eloquent 사용)를 유지 한 다음 마지막으로 업데이트 된 모델 인스턴스를 컨트롤러에 반환합니다.
  • 컨트롤러는 반환 된 객체를 json 응답으로 "래핑 (wrap)"하여 클라이언트에 반환합니다 (단지 성공 또는 ID를 반환하는 대신 전체 업데이트 된 객체를 반환하는 것과 같습니다).

내 질문과 문제 :

  1. 내 코드의 조직이 됐나요?
  2. 명시된 바와 같이 유효성 검사 오류 등이 내 컨트롤러에서 발생합니다. 그러나 내 서비스에서 문제가 발생하면 (즉, 아래로) 어떻게됩니까? 컨트롤러에 뭔가 잘못되었다는 사실을 어떻게 알릴 수 있습니까? 예를 들어 JSON 응답을 클라이언트에 403 반환 할 수 있도록하려면 어떻게해야합니까? 예 : 내 UserService가 이메일 주소를 업데이트하려고합니다. 그러나이 이메일에는 이미 항목이 있으므로 서비스에서 오류를 컨트롤러로 반환해야합니다. 그러면 컨트롤러에 403 json 인코딩 오류 메시지가 클라이언트에 반환됩니다.
  3. 앞에서 설명한대로 모든 유효성 검사, 인증 등은 내 컨트롤러에서 수행됩니다. 컨트롤러 메소드는 특히 http 요청에 대해 만들어 지므로 Request 객체를 입력으로 사용하고 json을 반환합니다. 다른 컨트롤러에서와 같이 내 앱에서 직접 이러한 메서드를 호출하려면 어떻게해야합니까? 각각의 Service 클래스를 직접 호출하면 컨트롤러 내에서 수행되는 모든 유효성 검사와 검사를 통해 이익을 얻을 수 없습니다. 그러나 컨트롤러를 호출하면 요청 객체를 입력으로 간주하고 Json http 응답을 반환합니다.이 응답은 분명히 다른 컨트롤러에서 호출 할 때 원하지 않습니다. 어떻게해야합니까?

내 문제가 충분히 명확 해지기를 바랍니다. 어떤 도움을 주셔서 감사합니다.

덕분에, 마이클

답변

1

나는 이러한 몇 가지를 응답 할 수 있습니다.

  1. 나는 API가 괜찮아 보입니다. API 로직을 애플리케이션 로직과 분리하여 보관하십시오. 내가하는 일은 라우팅을 통한 것이다. /api/{version}/...을 예로들 수 있습니다.

  2. 예기치 않은 오류 (예 : SQL 예외 등)를 처리하고 이러한 경우에 response()->json([...], 403);을 반환하려면 try { ... } catch { ... } 블록을 사용하십시오.

  3. 사용 guzzle/http는 (당신의 composer.json에 포함하고 composer install 또는 composer update 실행이 필요합니다) 응용 프로그램 내 루트/컨트롤러의 요청을 보낼 수있는 패키지. GET 또는 POST에서 /api/... 경로까지 응용 프로그램의 경로에 액세스하면됩니다. Request으로 인식하고 응답을 처리 할 함수가 있습니다. JSON 응답. 예제는 http://docs.guzzlephp.org/en/latest/을 참조하십시오.

개방형 질문입니다. API를 구축하고 발생하는 특정 문제를 해결하는 것이 가장 좋습니다.

+0

대단히 감사합니다. 정확하게 답변을 얻으려고했습니다. 질문이 생길 경우를 대비하여 다시 시도해 볼 것입니다! 고마워!!! – michimaxi