Rest 如何使用Swagger 2.0显示图像?
我正在使用mongoengine、flask、connexion和swagger 2.0编写一个照片web应用程序来定义我的API。这个想法是有一个关于发布照片的摄影师的API和一个关于照片的其他API 我正在为PhotoAPI定义yaml文件。我们有两种方法post(上传照片)和get(使用照片的id检索照片)Rest 如何使用Swagger 2.0显示图像?,rest,flask,swagger,mongoengine,flask-restful,Rest,Flask,Swagger,Mongoengine,Flask Restful,我正在使用mongoengine、flask、connexion和swagger 2.0编写一个照片web应用程序来定义我的API。这个想法是有一个关于发布照片的摄影师的API和一个关于照片的其他API 我正在为PhotoAPI定义yaml文件。我们有两种方法post(上传照片)和get(使用照片的id检索照片) swagger: '2.0' info: title: Photo service API version: "0.1" paths: /photo: post:
swagger: '2.0'
info:
title: Photo service API
version: "0.1"
paths:
/photo:
post:
tags:
- "Photo"
operationId: photo_service.post_photo
summary: Add a new photo
consumes:
- multipart/form-data
parameters:
- name: photo_name
in: formData
description: "file to upload"
required: true
type: string
- name: photo_file
in: formData
description: "file to upload"
required: true
type: file
responses:
201:
description: New photo added
schema:
properties:
photo_file:
type: object
description: Information about the photo
409:
description: Photo already exists
/photo/{photo_id}:
get:
tags:
- "Specific photo"
operationId: photo_service.get_photo
summary: Get specific photo.
produces:
- image/png
parameters:
- $ref: '#/parameters/photo_id'
responses:
200:
description: Return the requested photo.
schema:
type: file
404:
description: Photo does not exist.
出于测试目的,Photo类非常简单:
class Photo(Document):
photo_name = StringField(max_length=120, required=True)
photo_file = ImageField()
我编写了以下函数,这些函数与Yaml文件的操作Id字段中调用的函数相对应:
def get_photo(photo_id):
try:
ph = mongo_get_photo(photo_id)
except (Photo.DoesNotExist, InvalidId) as e:
return 'Not Found', 404
except pymongo.errors.ServerSelectionTimeoutError as sste:
return 'Mongo unavailable', 503
return ph
def post_photo(photo_name,photo_file):
try:
ph = mongo_add (photo_name,photo_file)
return 'Created', 201, {'location': '/photo/' + str(ph.id)}
except pymongo.errors.ServerSelectionTimeoutError as sste:
return 'Mongo unavailable', 503
因为我使用mongodb作为数据库。我正在使用包装器向我的数据库发出请求:
@robustify.retry_mongo
def mongo_add(photo_name,photo_file):
ph = Photo(photo_name = photo_name)
ph.photo_file.put(photo_file)
ph.save()
return ph
@robustify.retry_mongo
def mongo_get_photo(photo_id):
ph = Photo.objects(id=ObjectId(photo_id)).first()
photo = ph.photo_file.read()
return photo
我的问题是POST方法似乎起作用了。每当我尝试发布png图片时,我都会创建一个200代码的响应。但是get方法不起作用。mongodb处理文件的方式似乎有问题。我在mongo_get_photo函数中读取图像文件的方式有问题吗?有人有线索吗
在之前将图像转换为base 64以字符串形式存储会更好吗
谢谢