originally posted in:BungieNetPlatform
Quick question for the guys at bungie:
Why is there an EquipItems endpoint but not a TransferItems endpoint? Just curious tbh. Seems like this would be far more useful/used than an EquipItems endpoint, but it is not available.
English
-
That's a good question! The true answer is a mix of situations, and unfortunately a bit complicated! But I believe in full disclosure when at all possible, so here's the scoop. First, the underlying reason behind why EquipItems and TransferItems are both awkward operations: under the surface, we still have to perform the operations in serial, one item at a time. Particularly with TransferItems which goes between characters, this is a technological limitation of the underlying system that would require a wider scope of changes than would be worth it to us to produce. It'd affect and potentially break not just the web services but the game itself if we did it wrong, and thus it's a bit too risky to do just for the purpose of a more elegant web API at this time. There's a lot of people working hard on the game, and sadly not enough spare cycles to make such a large change without harming those developers' ability to work on the main features of the game itself, so it may be a long time (if ever) before we see true "bulk actions". Now, on to the hacks we've done on our side to try and make the experience a bit better, and why EquipItems exists and TransferItems doesn't! The reason why EquipItems exists at all: we were doing some experiments internally (we want bulk equip and transfer as much as you do!) to see how awkward it would be to have an endpoint that is basically just a wrapper around individual actions. It worked well for Equipping items, because they don't have to go through a multi-stage process: if one fails, it's pretty clear from the error code returned what happened, and you know the item will be where you left it. I was the one who neglected to remove the experiment before the branch merged up to production, which is why EquipItems now exists as an unsupported service. (note: all actions that require authentication are technically "unsupported", for now) This was a sloppy mistake on my part, but I didn't want to remove it once it was in the wild because it works as-advertised, is fairly useful, and was already adopted by some before I realized the mistake. So that's my bad, I claim full responsibility for that error. The reason why TransferItems doesn't exist is because the errors that can cause an item to not transfer are significantly more nebulous. Even on the back-end, we have to transfer from character to vault back to a character in order for a transfer to occur, and these operations have to be done in serial. What if it got caught on the character because the vault was full? What if it's caught on the vault because the destination was full? We considered making a convenience endpoint for this, but realized that people were still going to have to deal with the same number of frustrating edge cases. We could make a prettier wrapper around those edge cases, but end users would still have to deal with them: so for now, we haven't bothered to make an endpoint that is merely a wrapper for what has to be done. There may come a time where we do, but we're pressed for time so we end up working on more urgent issues (features that don't exist or are broken in some way) rather than issues that would be nice but are already doable (albeit less conveniently). Anyways, that's the reason why we don't have a TransferItems endpoint. I could see it coming into existence one day, particularly if we ever get around to creating an "officially supported" way of performing authenticated actions. However other issues that take precedent will likely bump those kinds of tasks into the future for some time to come. It is still on our list, we just have a lot of work to do (and continuing amounts of new work, as the game has continuous new content that we must support and changes to the implementation of existing content) before we can get to it. Hopefully this is useful information!