You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ruby如何将变量传入API请求体 解决实例变量nil导致API空返回问题

问题原因分析
  • 核心问题1:你完全没必要将ZendeskAPI::Ticket对象转字符串再拆分提取description,该对象本身就自带description属性,可以直接获取对应值,原来的字符串拆分逻辑不仅冗余,还很容易返回空值或错误内容
  • 核心问题2:DeepL接口返回的是标准JSON格式,你用字符串拆分"取结果的逻辑非常脆弱,一旦返回结构变动就会取到错误值
  • 潜在问题:你代码里的auth_key参数为空,需要填入你自己的有效DeepL API密钥才能正常请求
修复后的代码
module Ccenter
  module Utils
    class TranslationApi
      attr_accessor :cc_message_id
      include Service

      InvalidResponseError = Class.new(StandardError)
      # 建议把API密钥放到环境变量里,不要硬编码在代码中
      DEEPL_AUTH_KEY = ENV.fetch('DEEPL_API_KEY', '')

      def initialize(cc_message_id)
        @cc_message_id = cc_message_id
      end

      def call
        grab_de_message_text
        # 加一层校验,避免描述为空时发起无效请求
        raise InvalidResponseError, "工单描述为空" if @ticket_description.blank?
        make_request
      end

      private

      def make_request
        response = Faraday.post(
          'https://api.deepl.com/v2/translate',
          {
            text: @ticket_description,
            target_lang: 'DE',
            source_lang: 'EN'
          },
          { 'Authorization' => "DeepL-Auth-Key #{DEEPL_AUTH_KEY}" }
        )
        if response.success?
          # 直接解析JSON取结果,更稳定
          result = JSON.parse(response.body)
          return result.dig('translations', 0, 'text')
        else
          raise InvalidResponseError, "DeepL请求失败,状态码:#{response.status}"
        end
      end

      def grab_de_message_text
        ticket = Ccenter::Adapters::Zendesk::TicketBase.new(zendesk_id: @cc_message_id).zendesk_ticket
        # 直接调用对象属性取值,不要转字符串拆分
        @ticket_description = ticket&.description
      end
    end
  end
end
额外注意点
  • 把DeepL API密钥放到环境变量里读取,不要硬编码在代码中,避免密钥泄露
  • 增加了空值校验逻辑,在工单描述为空时直接抛出错误,不用发起无效的API请求
  • 如果你用的是DeepL免费版接口,需要把请求地址换成https://api-free.deepl.com/v2/translate

内容的提问来源于stack exchange,提问作者user16741832

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 23:45:07