Grape는 RESTful API 구축에 널리 사용되는 Ruby 프레임워크입니다. 예외 처리는 Grape로 만든 애플리케이션을 포함한 모든 애플리케이션의 안정성과 신뢰성을 보장하는 데 중요한 역할을 합니다.
이 기사에서는 예외 사용자 정의를 포함하여 Grape 예외 처리의 기본 사항을 살펴봅니다. 또한 몇 가지 모범 사례와 향상된 오류 모니터링 및 관리를 위해 앱을 AppSignal과 통합하는 방법에 대해서도 알아볼 것입니다.
시작해 보세요!
포도 예외 처리의 기본
이 튜토리얼에서는 Rails에 내장된 Grape API에서 예외를 처리하는 방법을 살펴보겠습니다. 이를 위해 데모 구인 게시판 API를 만들었으며 GitHub에서 소스 코드를 확인할 수 있습니다.
예외 발생
error!를 사용하여 Grape에서 예외를 발생시킬 수 있습니다. . 예를 들어 위에서 언급한 작업 API에는 show가 있습니다. ID을 기반으로 작업을 반환하는 경로 . 404를 반환할 수 있습니다. 기록을 사용할 수 없을 때 다음과 같은 오류가 발생합니다:
예외가 발생하면 이를 "고유한" 방식으로 처리하고 싶을 것입니다. 발생된 예외를 사용자에게 보내고 싶지 않을 가능성이 높습니다.
Ruby에는 예외 처리를 위한 기본 메커니즘이 있습니다. begin에서 예외가 발생할 수 있는 코드를 래핑하여 작동합니다. 블록. rescue 블록은 발생한 예외를 처리하는 데 사용됩니다.
일반적인 시나리오에서는 다음과 같습니다.
rescue_from 방법
예외가 발생하거나 직접적인 개입 없이 발생하는 경우 적절하게 처리해야 합니다. 기본적으로 Grape는 rescue_from를 제공합니다. 방법. 이를 통해 정의된 예외가 발생할 때 실행되는 코드 블록을 지정할 수 있습니다.
그래서 404을 "구출"하거나 처리하려면 jobs에서 발생하는 다른 오류보다 먼저 발생한 오류입니다. 리소스에서는 rescue_from을 사용할 수 있습니다. 방법. 메소드가 jobs 위에 추가됩니다. 자원.
사용할 콘텐츠 유형을 지정할 수도 있습니다:
이러한 예외 처리 방법은 너무 일반적입니다. 모든 형태의 예외를 구출하고 404와 함께 오류를 반환합니다. 상태 코드. API 사용자가 400을 기대한다면 이는 오해의 소지가 있습니다. 상태 코드입니다.
대신 처리하려는 예외를 지정할 수 있습니다:
ActiveRecord::RecordNotFound를 만났을 때 오류가 발생하면 404와 함께 오류 메시지가 반환됩니다. 상태 코드. 그렇지 않으면 500와 함께 오류 메시지가 반환됩니다. 상태 코드입니다.
이는 현재 가지고 있는 것을 개선할 수 있다는 것을 보여줍니다. 하지만 모든 오류를 복구하는 오류 핸들러를 원한다면 어떻게 해야 할까요? 오류? 바로 여기에서 예외를 맞춤설정하는 것이 중요합니다.
Grape for Ruby의 예외 사용자 정의
발생한 오류 유형에 따라 이 오류 처리기는 올바른 상태 코드와 함께 오류 메시지를 반환할 수 있어야 합니다.
먼저 Exceptions_handler라는 파일을 만듭니다. . 그런 다음 현재 예외 처리기를 파일로 이동합니다:
우리 ExceptionHandler 모듈은 ActiveSupport::Concern를 사용합니다. , included와 같은 기능에 액세스할 수 있습니다. 및 class_methods . 위 스니펫에서 included에 오류 핸들러가 있습니다. 블록이므로 이 모듈이 포함된 곳마다 정의된 대로 사용할 수 있습니다.
이전에 오류 처리기가 있던 파일에서 오류 처리기를 제거할 수 있습니다. 그런 다음 ExceptionsHandler를 포함할 수 있습니다. API 항목 파일의 모듈 — api.rb :
오류에 대한 기본 오류 클래스를 만들어 보겠습니다. 이 클래스는 오류 응답을 반환하는 역할을 담당합니다.
이 클래스는 두 개의 키워드 매개변수인 message를 허용합니다. 문자열 및 status . 아무것도 전달되지 않으면 기본값을 사용합니다.
body에서 메서드를 사용하면 Rack 응답을 반환합니다. 기본적으로 rescue_from 핸들러는 Rack::Response를 반환해야 합니다. 개체, error!로 전화하세요. , 또는 예외를 발생시킵니다.
계속해서 ExceptionsHandler에서 사용할 수 있습니다. :
/error에 전화하면 엔드포인트에는 oops가 표시됩니다. 응답으로 반환되었습니다. 이제 NotFound에 대한 클래스를 만들 수 있습니다. 오류가 발생했습니다.
NotFound 클래스는 message만 허용합니다. . BaseError에서 상속되므로 , Rack::Response를 반환할 필요가 없습니다. 다시 한번 말씀드리겠습니다. 계속해서 ExceptionsHandler에서 사용할 수 있습니다. 이렇게:
이제 수동으로 다음과 같은 오류를 발생시키려고 하면:
정상적으로 작동하지만 상태 코드는 500입니다. , BaseError에 응답을 반환하기 때문입니다. 클래스(BaseError 클래스가 오류를 처리합니다). 이 문제를 해결하려면 ExceptionHandler을 수정해야 합니다. NotFound을 명시적으로 사용하려면 대신 오류를 처리하는 클래스입니다.
따라서 ActiveRecord::RecordNotFound에 해당하는 오류가 발생할 때마다 및 V1::Exceptions::NotFound 발생하면 Exceptions::NotFound을 사용하세요. . 그렇지 않으면 Exceptions::BaseError을 사용하세요. .
구체적인 내용이 필요하다는 것을 알 수 있습니다.rescue_from 더 많은 오류 클래스를 만들면 차단됩니다. Case 문을 사용하면 이 문제를 개선할 수 있습니다:
짠!
모범 사례 및 팁
예외 처리에 사용할 수 있는 모범 사례는 많지만 다음은 따라야 할 몇 가지 빠른 팁입니다.
- 그룹 관련 예외:위의 코드에서 본 것처럼 관련 예외를 그룹화하면 유지 관리 가능한 코드를 가질 수 있습니다. 처리하려는 예외 수가 증가하면 이를 목록에 추가할 수 있습니다.
error!와 같은 도우미 사용 신속하게 예외를 발생시킵니다. 이렇게 하면 예외 처리가 단순화됩니다.- AppSignal과 같은 예외 모니터링 도구를 활용하세요.
AppSignal 통합:Ruby용 Grape
AppSignal은 애플리케이션의 오류를 모니터링하고 추적하는 데 도움이 됩니다. AppSignal을 Grape API와 통합하면 예외에 대한 귀중한 통찰력을 얻을 수 있습니다. 이 가이드는 AppSignal을 Grape API와 통합하는 방법을 보여줍니다. API에서 오류가 발생할 때마다 AppSignal 대시보드에서 다음과 같이 확인할 수 있습니다.

마무리
예외 처리는 강력한 API 개발의 중요한 측면입니다. 이 튜토리얼에서는 Grape API에서 예외를 적절하게 처리하는 방법을 살펴보았습니다. 또한 몇 가지 모범 사례와 AppSignal의 Grape 통합에 대해서도 간략하게 살펴보았습니다.
예외 처리는 지속적인 프로세스이므로 지속적으로 개선해야 합니다.
즐거운 코딩 되세요!
추신 Ruby Magic 게시물이 보도되는 즉시 읽으려면 Ruby Magic 뉴스레터를 구독하고 단 하나의 게시물도 놓치지 마세요!
추신 AppSignal이 Active Record 통합을 제공한다는 것을 알고 계셨습니까? 자세히 알아보세요.