Originally, our upload story was as follows:
The user will upload a new file to Pulp via POST to /artifacts/ (provided by core)
The user will create a new plugin specific Content via POST to /path/to/plugin/content/, referencing whatever artifacts that are contained, and whatever fields are expected for the new content.
The user will add the new content to a repository via POST to /repositories/1/versions/
However, this is somewhat cumbersome to the user with 3 API calls to accomplish something that only took one call in Pulp 2.
There are a couple of different paths plugins have taken to improve the user experience:
The Python plugin follows the above workflow, but reads the Artifact file to determine the values for the fields. The RPM plugin has gone even farther and created a new endpoint for "one shot" upload that perform all of this in a single call. I think it is likely that the Python plugin will move more in the "one shot" direction, and other plugins will probably follow.
That said, I think we should discuss this as a community to encourage plugins to behave similarly, and because there may also be a possibility for sharing some of code. It is my hope that a "one shot upload" could do 2 things: 1) Upload and create Content. 2) Optionally add that content to repositories.