Giter VIP home page Giter VIP logo

Comments (7)

NuckChorris avatar NuckChorris commented on May 8, 2024

I remember reading somewhere about how they were trying to switch from using incremental integers as primary keys to using the slugs themselves (though that might have just been for users? Still seems like a bad idea)

I think exposing the numeric anime ID to the outside world via the API is the best and easiest solution — it should be just a single line in the API code to expose the Model's ID field. No harm, as long as we (API clients) don't expose the Anime ID to the end-user: that's what the slug is for.

from kitsu-tools.

vikhyat avatar vikhyat commented on May 8, 2024

I will definitely be giving this one some thought to decide what to do, probably next week since I have finals going on right now.

from kitsu-tools.

erengy avatar erengy commented on May 8, 2024

Good luck with your finals! I'll write down some more thoughts on this in the meantime.

The first and the obvious step to resolve this issue is to expose the IDs in the following fashion:

def present_anime(anime)
  {
    id: anime.id,
    slug: anime.slug,
    (...)
  }
end

This is compatible with APIv1. But it'll break applications that use APIv2, as they will be expecting id: anime.slug. The change should be announced beforehand so that developers can modify their applications, even though APIv2 is not officially released.

The second step is to decide on whether to use /anime/{id} or /anime/{slug}. Continuing to use slugs as the only parameter makes it obligatory for API users to store both IDs and slugs for most purposes. For instance, if I wanted to keep a list of all anime in Spring 2014 season, I'd have to do this:

[
  {
    "id": 7864,
    "slug": "date-a-live-ii"
  },
  {
    "id": 7880,
    "slug": "no-game-no-life"
  },
  {
    "id": 8052,
    "slug": "black-bullet"
  },
  (...)
]

...where I should be able to do this:

[7864, 7880, 8052, (...)]

And then there's this thing that I learned about yesterday. Apparently the API allows both {id} and {slug} at the moment. This has the overlap issue with 100% and Fullmetal Alchemist, which can be resolved by eliminating numeric slugs. Looking through this page, I think the only offenders are 100% and 663114, and our chances of getting new anime with numeric titles are rather slim. But still, we better make sure no numeric slugs will be generated in the future.

from kitsu-tools.

erengy avatar erengy commented on May 8, 2024

Hey @vikhyat, were you able to give this some thought? Should I give it a shot and send you a pull request?

from kitsu-tools.

vikhyat avatar vikhyat commented on May 8, 2024

Hey, sorry for not replying earlier.

I think the changes you propose ({id: anime.id, slug: anime.slug} in both APIv1 and APIv2) are the best way to proceed. If you can send a PR for this change that would be greatly appreciated. 😄

Though it is compatible with APIv1 I would still prefer to announce the change and give people some time to update applications in the off-chance the change breaks anything just to be on the safe side. Since this is highly unlikely to break anything about a weeks notice maybe.

It also makes sense to stop generating purely numeric slugs since that would allow fully supporting both lookup by ID and slug. However that is a more substantial change and I've created #67 to track it.

from kitsu-tools.

NuckChorris avatar NuckChorris commented on May 8, 2024

This issue was solved by #71, right? Should it be closed?

from kitsu-tools.

erengy avatar erengy commented on May 8, 2024

All right, I'm closing this one. The only remaining issue is described at #67, which is still open.

from kitsu-tools.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.