我正在开发Laravel 4中的REST API,API客户端将在请求正文中使用JSON向端点发送参数,示例请求看起来像这样:
POST http://api.site.dev/v1/users HTTP/1.1
Accept:*/*
Content-Length:49
Content-Type:application/json
{"email":"bob@gmail.com","password":"testpass"}
这对于将字符串-y参数发送到端点非常有效 - 但是我如何上传文件?
我看过的其他设计良好的API在请求体中将文件作为二进制文件发送,这似乎是一个好主意。但是如果我需要发送其他参数而不仅仅是文件呢?据我所知,我有两个选择:
所以我的端点会变成POST /v1/jobs?document_id=1&priority=high
。这将允许我在请求体中将文件作为二进制文件发送,这很酷,但会导致丑陋的URL与我的其他API不一致,可能使其他开发人员更难以使用我的API。
我可以像以前一样使用相同的方法发送参数,只需对要上传的文件进行base64编码,然后将其发送到JSON对象中。这会导致33%的网络开销,以及首先转换文件的一些处理开销。但是,上传的文件将是<10mb,所以可能这可以忽略不计?
你们怎么解决这个问题?