On Fri, Aug 26, 2016 at 10:47 AM, Dominic Cleal <domi...@cleal.org> wrote:
> On 26/08/16 06:58, Joseph Magen wrote: > > I created a RFC for a plugin called foreman_api_v3 > > <https://github.com/isratrade/rfcs/blob/master/0000-foreman-api-v3.md> > and > > the initial repo at github.com/isratrade/foreman_api_v3 > > <https://github.com/isratrade/foreman_api_v3>. If the community accepts, > > I am happy to move this repo to theforeman/foreman_api_v3 > > > > I choose to make this a plugin rather than a PR so it is optional for > > users and doesn't affect the core code. > > Please consider calling it something else that won't cause confusion for > users with Foreman's own API versioning. > I can rename the plugin to *foreman_jsonapi* and change to version to v21 (meaning v2.1 since it inherits from v2), so it would look like this GET api/api/v21/hosts What do you think? > -- > Dominic Cleal > domi...@cleal.org > On Fri, Aug 26, 2016 at 11:36 PM, Tomas Strachota <tstrach...@redhat.com> wrote: > On 08/26/2016 07:58 AM, Joseph Magen wrote: > >> Hi all, >> >> I created a RFC for a plugin called foreman_api_v3 >> <https://github.com/isratrade/rfcs/blob/master/0000-foreman-api-v3.md> >> and >> the initial repo at github.com/isratrade/foreman_api_v3 >> <https://github.com/isratrade/foreman_api_v3>. If the community accepts, >> I am happy to move this repo to theforeman/foreman_api_v3 >> >> I choose to make this a plugin rather than a PR so it is optional for >> users and doesn't affect the core code. The initial repo only includes >> the GET `index` and `show` actions. The PUT/PATCH/POST/DELETE actions >> need to be added. Also, there are currently no functional tests in the >> repo, so a lot more work needs to be done. >> >> Note that I inherited V2 so that V3 controllers look like this >> >> module Api >> module V3 >> class DomainsController < V2::DomainsController >> >> but the response is changed. >> >> def index >> super >> render json: @domains, >> fields: @fields_hash, >> include: @include_array, >> each_serializer: DomainSerializer >> end >> >> For some background, the Foreman API v2 is more than 3 years old. When I >> implemented v2, I used conventions that I thought were good at the time. >> The katello had some slightly different conventions, and we weren't >> always in sync. This created some challenges for Satellite6 as a single >> RH product. >> >> The goal of JSON API is to create a standardization that is *Flexible, >> Consistent, and Fast *-- we can all agree with these goals. >> >> > Thanks for sending that, Joseph. Jsonapi.org is nice specification and I > like how it structures the data. The ability to include additional > resources into the response is very handy and making the katello and > foreman api consistent would be good too. But that alone wouldn't be enough > to make switch to jsonapi. In my opinion main painpoints of the current api > v2 are elsewhere. Firstly I miss adding associated resources without having > to send all what's currently included. Second main issue is inconsistent > error responses (we've improved with that but it's still not ideal). > Jsonapi.org has cures for both [1] [2], so I'm not against at all that but > we mustn't stop just at changing the output format. > Please explain the other pain points in v2 besides [1] [2] Speaking about the format change, since getting consistent with katello is > one of motivations for the change, I'd like to hear from somebody with > expertise in that field how difficult would be to bend the UI code to use > the new format. Just to make sure we actually won't unintentionally put more obstacles in > katello's way. > I assume you mean using RABL to generate the new output format when keeping the same v2 controllers. IMHO, this would be a bigger headache for both Koreman and Katello. This would still lead to v3 since there are breaking changes. Maybe I don't understand your question fully. > If we decide that jsonapi is the way to go for v3 I think it would be > better to implement it as part of the foreman core. We can clearly mark it > as devel preview with no guarantees, let it evolve alongside with v2 and > freeze when we're happy with it. > I don't see the advantage of implementing a new api as part of core until if/when it is stable and has community adoption. > > [1] http://jsonapi.org/format/#crud-updating-relationships > [2] http://jsonapi.org/format/#errors > > Here's some more links that could be helpful in addition >> to http://jsonapi.org/ >> >> http://blog.arkency.com/2016/02/how-and-why-should-you-use-j >> son-api-in-your-rails-api/ >> >> *JSON API <http://jsonapi.org/> is a great solution to not waste hours >> on reinventing the wheel in terms of your API responses design.* It is a >> great, extensible response standard which can save your time - both on >> the backend side and the client side. Your clients can leverage you’re >> using an established standard to implement an integration with your API >> in a cleaner and faster way. >> >> *Building a Rails API with the JSON API Spec >> *http://www.slideshare.net/SonjaPeterson2/building-a-rails- >> api-with-the-json-api-spec >> >> I look forward to hearing you feedback and receiving contributions to >> the repo. >> >> Joseph Magen (@isratrade) >> Red Hat >> >> > -- You received this message because you are subscribed to the Google Groups "foreman-dev" group. To unsubscribe from this group and stop receiving emails from it, send an email to foreman-dev+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.