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

FastAPI如何返回Content-Type为application/liquid的响应适配Shopify集成

FastAPI返回application/liquid格式响应配置方法

核心实现逻辑

FastAPI默认使用JSONResponse作为响应类,默认返回application/json类型内容,你只需要自定义响应的媒体类型为application/liquid,直接返回渲染好的Liquid模板字符串即可,不需要额外安装第三方依赖。


方案1:单接口快速配置

适合仅单个接口需要返回Liquid内容的场景,无需额外封装,直接在接口逻辑中指定响应类型即可:

from fastapi import FastAPI
from fastapi.responses import Response

app = FastAPI()

# 你的自定义搜索接口,路径替换成你实际的接口路由
@app.get("/api/custom-search")
async def shopify_custom_search():
    # 保留你原有的搜索请求接收、结果处理逻辑
    # 最终生成符合Shopify Liquid语法的模板字符串
    liquid_rendered_content = """
    <div class="custom-search-results">
      {% for item in search_results %}
        <div class="search-item">
          <a href="{{ item.url }}">
            <img src="{{ item.featured_image }}" alt="{{ item.title }}">
            <p class="item-title">{{ item.title }}</p>
            <p class="item-price">{{ item.price | money }}</p>
          </a>
        </div>
      {% endfor %}
    </div>
    """

    # 直接返回指定媒体类型的响应
    return Response(
        content=liquid_rendered_content,
        media_type="application/liquid"
    )

方案2:封装可复用的Liquid响应类

如果项目中有多个接口需要返回Liquid格式内容,可以预先定义专用响应类,减少重复代码:

from fastapi import FastAPI
from fastapi.responses import Response

# 定义全局可复用的Liquid响应类
class LiquidResponse(Response):
    media_type = "application/liquid"

app = FastAPI()

# 接口装饰器直接指定响应类即可
@app.get("/api/custom-search", response_class=LiquidResponse)
async def shopify_custom_search():
    # 原有搜索处理逻辑
    liquid_rendered_content = "你的Liquid模板字符串"
    # 直接返回字符串内容,FastAPI会自动装配正确的响应头
    return liquid_rendered_content

校验&避坑要点

  • 禁止使用默认JSON响应返回:不要将Liquid内容放到JSON结构中返回,否则会出现Content-Type不符合要求、Liquid语法被转义的问题,Shopify无法正常解析
  • 响应内容校验:返回的内容必须是纯Liquid语法字符串,不要额外包裹JSON外层字段、不要做JSON序列化操作
  • 响应头验证:接口部署后可以先本地调用,检查返回头中Content-Type字段值是否为application/liquid,如果Shopify对响应头校验严格不允许携带charset=utf-8后缀,可以在返回时手动指定响应头覆盖默认值:
    return Response(
        content=liquid_rendered_content,
        headers={"Content-Type": "application/liquid"}
    )
    
  • 跨域配置:如果接口是给Shopify前端主题调用,记得配置FastAPI的CORS中间件,允许对应店铺的域名访问,避免浏览器拦截请求。

内容的提问来源于stack exchange,提问作者Can Jozef Saul

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 12:33:29