请问大家在使用不同数据格式时如何命名REST api端点。
API示例
问题
使用中的应用程序夫妇可能希望以不同的格式传递数据-例如列表,树和可能不同的详细程度/详细程度。 RESTful API中最好的表示方式是什么?
可能的解决方案
不同的端点名称。不喜欢这样做,因为它感觉很脏,混合了端点和数据类型:
子路径。不喜欢这样做,因为它似乎违反了RESTful命名约定。我希望/ topics / {topicId}:
查询字符串。这似乎是最好的解决方案,但我仍然不是100%满意:
很想听听您的一些想法!谢谢!
答案 0 :(得分:2)
如果不同的“格式”具有根本不同的数据,那么我个人将具有不同的端点。
如果“格式”表示相同的数据,但其组织方式不同,则解决此问题的标准方法是通过accept标头。
例如,如果您有一个/topics
端点,它支持csv
格式和两种类型的json格式,我将使用:
Accept: text/csv
Accept: application/vnd.ross.list+json
Accept: application/vnd.ross.hierarchy+json
答案 1 :(得分:1)
很多都是个人喜好,对您有用。您不一定要问这个问题,但就我个人而言,我更喜欢单个端点,因为与列表相比,您更可能拥有一个与单个实体打交道的端点。
就主题而言,我将其移至其自己的端点
这可以使端点变小,并允许您打开以添加其他参数。
我不确定整个细节和格式参数是关于什么的,但是如果格式是指内容类型,则可以将其作为查询参数(如文件扩展名)输入,也可以在请求标头。
//This is the code where the user is writing and it saves to localStorage.
//Html page 1 that saves the variables
var TankaKostnadVar = document.getElementById("tankaKostnad").value;
var TankaLiterVar = document.getElementById("tankaLiter").value;
var TankaDatumVar = document.getElementById("tankaDatum").value;
localStorage.setItem("StorageKostnadVar", JSON.stringify( [TankaKostnadVar] ));
localStorage.setItem("StorageLiterVar", JSON.stringify( [TankaLiterVar] ));
localStorage.setItem("StorageDatumVar", JSON.stringify( [TankaDatumVar] ));
//This is html page 2 (gets the items from localhost)
var TankaKostnadVar = localStorage.getItem("StorageKostnadVar");
var TankaLiterVar = localStorage.getItem("StorageLiterVar");
var TankaDatumVar = localStorage.getItem("StorageDatumVar");
var arrayKostnad = JSON.parse(TankaKostnadVar);
var arrayLiter = JSON.parse(TankaLiterVar);
var arrayDatum = JSON.parse(TankaDatumVar);
// Now you have arrays with data, but I don't know what you want to do with them...
// you could add more values like this (still page 2)...
arrayKostnad.push('new value 1')
arrayLiter.push('new value 2')
arrayDatum.push('new value 3')
localStorage.setItem("StorageKostnadVar", JSON.stringify( arrayKostnad ));
localStorage.setItem("StorageLiterVar", JSON.stringify( arrayLiter ));
localStorage.setItem("StorageDatumVar", JSON.stringify( arrayDatum ));
// now check the values again
var TankaKostnadArr = JSON.parse(localStorage.getItem("StorageKostnadVar"));
var TankaLiterArr = JSON.parse(localStorage.getItem("StorageLiterVar"));
var TankaDatumArr = JSON.parse(localStorage.getItem("StorageDatumVar"));
document.write(TankaKostnadArr, TankaLiterArr, TankaDatumArr)
。