Evolving thoughts about building APIs

By: Johnathon Wright on: October 18, 2013

Ever since I saw him speak about the subject at RubyConf 2011, I have been fascinated by Steve Klabnik's ideas about Hypermedia APIs. I have been keeping up with his evolving book on the subject, "Designing Hypermedia APIs":http://www.designinghypermediaapis.com/ and have enjoyed it.

A new client is asking me to design an API. I started with just the basic REST stuff. Having finished 12 resources, I went to work on the "welcome" page. Steve said that an API should be "fully discoverable", and I think this concept is great. Basically, a client should be able to go to a site's index page, look for a certain link (just as a human would with a web browser) and then be taken to the relevant resource. If the URLs change around, that shouldn't matter. The API should facilitate that.

So far, my convention has been to include EITHER links to nested resources or to embed nested resources, and include a 'resource' link... so for a building, it might look like this:

{
  building:
  {
    resource: '/buildings/3241.json',
    tenants:
    [
      { 
        resource: '/tenants/32342.json'
        name: 'Praeses LLC',
        floors: [4, 5, 8],
        reception: 410,
        lease-resource: '/tenants/32342/lease.json'
      },
      {
        resource: '/tenants/32341.json',
        name: 'Dewey, Cheatum & Howe, Attorneys at Law',
        floor: [7, 8],
        reception: '710',
        lease-resource: '/tenants/32341/lease.json'
      }
    ],
    custodians-resource: '/buildings/3241/custodians.json',
    administrativa-resource: '/buildings/3241/administrators.json',
  }
}

so my initial page, the one that has the links to all of the available resources, now looks like this:

{
  buildings-resource: '/buildings.json',
  tenant-profile-resource: /tenants/3234.json',
  building-search-resource: '/buildings/search.json',
  user-session-resource: '/user-session.json'
}

this is fine, I guess. having a search as a resource might phase some people but I have always looked at search as a resource, so I'm cool with it.

I'm now re-visiting Klabnik's book and also a video of him presenting at a conference in LA. He recommends the following mime-type: collection+json, Cj for short.

The same initial page would look like this in Cj:

{
    "collection": {
        "href": "/",
        "items": [
            {
                "href": "/users/21001.json",
                "data": {
                    "email": "your-email@some.test"
                }
            },
        ],
        "links": [
            {
                "name": "tenant",
                "href": "/tenants/3234.json",
                "rel": "profile"
            },
            {
                "name": "tenants",
                "href": "/tenants.json",
                "rel": "resource"
            },
            {
                "name": "buildings",
                "href": "/buildings.json",
                "rel": "resource"
            },
            {
                "name": "user-session",
                "href": "/user_session.json",
                "rel": "resource"
            }
        ],
        "queries": [
        {
            "name": "buildings-search",
            "href": "/buildings/search.json",
            "rel": "search",
            "data": [
                {
                    "name": "q",
                    "value": ""
                },
                {
                    "name": "postal_code",
                    "value": ""
                }
            ]
        }
    ]
}

}

The 'items' element should be the result of the current resource... it isn't clear to me whether the current resource is the user, the tenant profile, or the user session... but obviously that would be much more clear for most of the pages.

h3. Some Confusion

The thing that most confuses me here is the use of 'name' and 'rel' for the links. Should I put {name: 'tenant', rel: 'profile', href: '/tenants/3234.json'} and also {name: 'tenant', rel: 'resource', href: '/tenants.json'} ? or is rel additional data where name can be used to find the needed resource? Or should rel be the primary key for finding specific links?

I have heard that the 'rel' tag should describe how the link relates to the current resource. IIRC, I heard someone else suggest that you have a list of rel tags. Something like:

  • tenants: the tenant collection resource. GET => list, POST => create
  • new-tenant: gives you the fields needed to create a tenant GET => read
  • tenant: a specific tenant's resource. GET => read, POST / PATCH => update, DELETE => destroy
  • tenant-profile: if the current user is associated with a specific tenant, this is a link to that tenant's profile
  • user-profile: resource for the current user
  • users: user collection resource
  • user
  • building-search: allows you to create searches and view results. GET/POST => search. Having search be its own resource allows you to do interesting things like caching search results, and having a page that will return the input fields
  • new-building-search: the page that would return the search fields. For instance, q and zipcode.

h3. Decision Time

So this seems like a lot more fun. I'm about to deploy this app and presumably someone will start building the front-end, so this is the decision point-of-no-return... should I stick with what I have, or start using something like collection+json?

My big question at this point is whether it solves a problem I anticipate having with my current process.

|Cj feature|can I do it now?| |list the current resource|yes| |links to related resources|yes| |links to parent or unrelated resources|unknown| |form parameters|yes| |form options a-la a drop down|no|update: now that I think about it, I can sorta do it. Not as neatly, though.| |rel tags|no| |errors|yes|

Although this is a well-thought-out hypermedia mime type, my impression is that it might add some complexity for the client. Complexity is fine, as long as there is a benefit. SOAP, for instance, adds complexity but, in my experience, doesn't provide any benefit over REST in exchange for the complexity.

Looking at this, the only thing that worries me is not having rel tags... though I can't think of an example where that would be a problem. Conclusion: stick with what I have.

References

Designing Hypermedia APIs Collection+JSON Primer (and comments) Collection+JSON support in Roar!





Comments:

Just checking that you are human. What would be the result of this code?

a = 3*(4/2); b = 1; a+b

Elie said: moving during extreme weather conditions can be challenging, but with the right planning and preparation, it can be done successfully. Remember to hire professional movers, protect your belongings, be prepared for power outages, stay hydrated, and dress appropriately. By following these tips, you can ensure that your move goes smoothly and without any major issues. https://www.youtube.com/watch?v=pSxC6qyrisM

WilliamKirty said: Ищете способ путешествовать, не разоряясь? Дешевые авиабилеты – ваш идеальный вариант! Сегодня, благодаря развитию авиаперевозок и конкуренции на рынке, можно найти билеты по удивительно низким ценам. Это открывает перед вами мир возможностей для путешествий без лишних затрат. Независимо от того, хотите ли вы провести выходные в новом городе или отправиться в путешествие мечты на другом континенте, дешевые авиабилеты помогут вам сделать вашу поездку доступной и приятной. Спланируйте свои приключения заранее, используйте специализированные сервисы для поиска лучших предложений и удивляйтесь, как можно сэкономить при этом свой бюджет. Не бойтесь исследовать новые места и знакомиться с разными культурами. Дешевые авиабилеты делают путешествия доступными для всех, открывая двери к новым приключениям и впечатлениям. Устройте себе выходной, приобретите билеты и отправляйтесь на приключение – мир ждет вас! Charter.kz - Советы и лайфхаки для путешественников

WilliamEvoms said: Армия Казахстана – это современная и профессиональная военная сила, играющая ключевую роль в обеспечении национальной безопасности и защите интересов страны. Вооруженные силы Казахстана обладают высоким уровнем подготовки и оснащены передовым военным оборудованием, что позволяет им успешно выполнять свои обязанности как на территории страны, так и за ее пределами. Одним из важных аспектов деятельности армия новости Казахстана является подготовка высококвалифицированных специалистов. Благодаря системе профессионального обучения и строгому отбору кадров, военнослужащие страны обладают необходимыми навыками и знаниями для эффективного выполнения своих обязанностей. Кроме того, армия Казахстана активно участвует в международном сотрудничестве и миротворческих миссиях, способствуя поддержанию стабильности и безопасности в регионе и в мире в целом. Военные силы Казахстана остаются важным столпом национальной обороны и гордостью страны как и беспилотники, обеспечивая ее защиту и способствуя сохранению мира и стабильности.

TimothyHeaft said: FoxWatch.kz – это ваш надежный источник самых актуальных новости Казахстана. Наш сайт предлагает широкий спектр информации, позволяющий вам быть в курсе последних событий в стране и за ее пределами. Мы освещаем разнообразные темы новости сегодня от политики и экономики до культуры и спорта. Наша команда профессиональных журналистов и редакторов тщательно отбирает материалы, чтобы предоставить вам только достоверную и интересную информацию. На FoxWatch.kz вы найдете не только новости, но и аналитические статьи, комментарии экспертов и интервью с ключевыми фигурами. Мы стремимся помочь вам лучше понять события, формировать свое собственное мнение и быть в курсе всех изменений в жизни Казахстана. Будьте в центре событий с FoxWatch.kz – вашим надежным партнером в мире новостей.

Victoracisk said: Промышленное оборудование - это ведущий онлайн-ресурс в Казахстане, специализирующийся на предоставлении широкого ассортимента промышленного оборудования и расходных материалов. Наш сайт предоставляет удобную платформу для тех, кто ищет высококачественное оборудование для различных отраслей промышленности, строительства и производства. Мы предлагаем широкий выбор товаров от ведущих мировых производителей, обеспечивая клиентов надежными и инновационными решениями для их бизнеса. Наша цель - обеспечить клиентов не только качественными продуктами, но и высоким уровнем сервиса, помогая им в выборе оптимальных решений и обеспечивая оперативную доставку по всей территории Казахстана. Благодаря удобной навигации и интуитивно понятному интерфейсу сайта, покупатели могут легко находить необходимые товары и быстро совершать покупки онлайн, экономя время и ресурсы. Промбез.kz - ваш надежный партнер в сфере промышленного оборудования и расходных материалов в Казахстане. Мы стремимся к предоставлению не только качественных товаров, но и высокого уровня сервиса, помогая нашим клиентам оптимизировать связь свои бизнес-процессы и достигать успеха в своих отраслях.

Bobbyfak said: Бизнес услуги - это динамичное виртуальное пространство, где люди со всего Казахстана могут обмениваться мнениями, делиться опытом и находить ответы на свои вопросы. Этот форум стал популярным местом для обсуждения широкого круга тем: от политики и экономики до культуры и технологий. На сайте представлены разделы, посвященные различным областям интересов как кредиты, что делает его привлекательным для разнообразной аудитории. Пользователи могут создавать темы для обсуждения, задавать вопросы, делиться своими знаниями и взглядами на мир. Благодаря активной и дружественной общности участников, Forum.com.kz становится не только площадкой для обмена информацией и страхование, но и местом, где зарождаются новые идеи и проекты. Этот сайт продолжает укреплять свою позицию как один из ведущих онлайн-форумов в Казахстане, объединяя людей с разных уголков страны в общем стремлении к общению и обмену опытом.

Jamesgaima said: Probanki.kz - это ведущий онлайн-ресурс, посвященный финансовым услугам и банковскому сектору Казахстана. Наш сайт создан с целью предоставить полезную и актуальную информацию о банковских услугах, финансовых инструментах и рынке капитала, помогая нашим пользователям принимать взвешенные и информированные решения в сфере финансов. Что вы найдете на нашем сайте: Обзоры банковских продуктов: Мы предоставляем подробные обзоры различных банковских продуктов, включая депозиты, кредиты, банковские карты, ипотека и иные финансовые услуги. Это поможет вам выбрать оптимальное предложение с учетом ваших потребностей и требований. Новости и аналитика: Мы следим за последними новостями в сфере финансов и предоставляем аналитические обзоры текущих событий на рынке. Наши материалы помогут вам быть в курсе последних тенденций и изменений в банковской сфере. Образовательные материалы: Мы стремимся повысить финансовую грамотность наших читателей, предоставляя информацию о базовых финансовых понятиях, инвестиционных стратегиях, а также советы по управлению личными финансами. Форум и общение: На нашем сайте вы сможете обсудить вопросы, связанные с финансами и банковской деятельностью, с другими пользователями. Обмен опытом и мнениями поможет вам получить дополнительные знания и советы от опытных участников сообщества. Мы стремимся быть вашим надежным партнером в мире финансов и банковских услуг. Независимость, объективность и актуальность информации - наши главные принципы. Посетите probanki.kz уже сегодня и откройте для себя вселенную финансовых возможностей!"

Emanuelbiony said: Независимо от того, являетесь ли вы страстным исследователем, ищущим новые приключения, или же настроены провести спокойный отдых на берегу моря, Charter.kz предлагает вам широкий выбор вариантов для вашего следующего путешествия. Идеальные путешествия, подготовленные для вас: Авиабилеты: С нашим интуитивно понятным поисковым механизмом вы сможете быстро найти самые выгодные предложения на авиабилеты в любую точку мира. Независимо от того, куда вы мечтаете отправиться, мы поможем вам добраться туда без лишних затрат. Казахстанцы скоро смогут лететь в США без пересадок Отели: На Charter.kz вы найдете огромный выбор отелей различного уровня комфорта и ценовой категории. Будьте уверены, что ваше проживание будет идеально соответствовать вашим предпочтениям. Туры: Мечтаете о незабываемом отдыхе без хлопот с планированием? Наши туры предлагают разнообразные маршруты по самым интересным уголкам планеты, от классических туристических направлений до экзотических приключений. Круизы: Погрузитесь в мир роскоши и приключений на борту одного из наших роскошных круизных судов. Откройте для себя новые порты, наслаждайтесь неповторимыми видами и услугами высшего класса. Аренда автомобилей: Хотите исследовать новый город или страну на собственном расписанном по вашему желанию маршруте? Мы предоставляем широкий выбор автомобилей для аренды по доступным ценам. Почему выбирают нас? Надежность: Мы сотрудничаем только с проверенными партнерами и предлагаем лучшие условия для вашего отдыха. Удобство: Наш сайт прост в использовании, а наша команда поддержки всегда готова помочь вам с любыми вопросами. Выгодные цены: Мы предлагаем лучшие цены на рынке без скрытых комиссий и наценок. Выберите Charter.kz для вашего следующего путешествия или работа в англии для казахстанцев и откройте для себя мир с новой стороны!

CryptoCurrencyPoupt said: Gold is a great way to preserve wealth, but it is hard to move around. You do need some kind of alternative and Bitcoin fits the bill. I’m not surprised to see that happening. – Jim Rickards https://cutt.ly/pwBLE09s

Peterfum said: Современный ритм жизни требует особого внимания к отдыху и путешествиям. Они позволяют восстановить силы, зарядиться позитивом и открывать для себя новые горизонты. В этом контексте платформа Charter.kz предоставляет уникальные возможности для организации незабываемых путешествий и комфортного отдыха. В данной статье рассмотрим преимущества использования Charter.kz, основные направления и предложения, а также практические советы для путешественников. Преимущества использования Charter.kz Charter.kz — это универсальный сервис купить авиабилеты на самолет, предлагающий широкий спектр услуг в сфере туризма и отдыха. Вот основные преимущества использования этой платформы: 1. Удобство бронирования: Пользователи могут легко и быстро бронировать авиабилеты, отели, трансферы и экскурсии в одном месте. 2. Конкурентные цены: Платформа предоставляет доступ к выгодным предложениям и скидкам, что позволяет существенно сэкономить. 3. Разнообразие направлений: Charter.kz сотрудничает с множеством авиакомпаний и отелей по всему миру, предлагая разнообразные варианты для путешествий. 4. Круглосуточная поддержка: Пользователи могут рассчитывать на помощь службы поддержки в любое время суток. 5. Гибкость планирования: Возможность менять даты и маршруты позволяет подстраиваться под любые изменения в планах. Основные направления и предложения Charter.kz охватывает множество популярных направлений, удовлетворяя потребности самых различных категорий путешественников. Рассмотрим некоторые из них: Пляжный отдых Для любителей пляжного отдыха Charter.kz предлагает туры в такие популярные места как Турция, Египет, Таиланд и Мальдивы. Платформа предоставляет возможность выбора промокод airalo среди множества курортов с различными условиями проживания и уровнями комфорта. Экскурсионные туры Для тех, кто предпочитает активный отдых с обогащением культурного опыта, Charter.kz предлагает экскурсионные туры по Европе, Азии и Америке. В программе — посещение исторических памятников, музеев, природных заповедников и других достопримечательностей. Гастрономические туры Поклонникам кулинарных путешествий Charter.kz предоставляет возможность окунуться в мир гастрономических изысков. Туры включают посещение ресторанов, мастер-классы от шеф-поваров и дегустации местных деликатесов. Экстремальные туры Любителям острых ощущений и активного отдыха Charter.kz предлагает экстремальные туры. Это может быть альпинизм, дайвинг, серфинг, парапланеризм и другие виды экстремального спорта. Практические советы для путешественников Чтобы путешествие прошло гладко и оставило только приятные воспоминания, важно следовать некоторым практическим советам: 1. Планирование бюджета: Определите сумму, которую готовы потратить, и придерживайтесь её. Charter.kz поможет найти выгодные предложения, но важно учитывать дополнительные расходы на экскурсии, питание и сувениры. 2. Выбор направления: Учитывайте сезонность и климатические условия в выбранной стране. Например, для пляжного отдыха лучше выбирать места с тёплым климатом в зимний период. 3. Документы и визы: Убедитесь, что все необходимые документы в порядке. Проверяйте требования к визам и срокам их получения заранее. 4. Медицинская подготовка: Узнайте о необходимых прививках и медицинских рекомендациях для посещаемой страны. Возьмите с собой минимальный набор лекарств. 5. Страхование: Оформите туристическую страховку. Это поможет избежать непредвиденных расходов в случае болезни или несчастного случая. 6. Безопасность: Изучите особенности местной культуры и правила поведения. Соблюдайте меры предосторожности, чтобы избежать неприятных ситуаций. 7. Связь и интернет: Узнайте о возможности подключения к интернету и мобильной связи в выбранной стране. Это поможет оставаться на связи и использовать онлайн-карты и переводчики. 8. Бронирование услуг: Заблаговременно бронируйте отели, билеты и экскурсии через Charter.kz. Это поможет избежать проблем с доступностью и повысит комфорт поездки. Подготовка к путешествию Правильная подготовка к путешествию — залог успешного и приятного отдыха. Вот основные шаги, которые помогут организовать идеальную поездку городской туризм: 1. Исследование маршрута: Составьте план поездки, включающий основные точки интереса, маршруты и время на перемещение между ними. 2. Бронирование жилья: Используйте Charter.kz для выбора и бронирования подходящего жилья. Учтите что найти отель и расположение, удобства и отзывы других путешественников. 3. Транспорт: Забронируйте билеты на авиарейсы, поезда или автобусы. Если планируете арендовать автомобиль, оформите бронирование заранее. 4. Составление списка вещей: Сделайте список необходимых вещей, учитывая климат, длительность поездки и планируемые мероприятия. Не забудьте про зарядные устройства, адаптеры и дорожные аксессуары. 5. Финансы: Подготовьте необходимую сумму наличных денег и банковские карты. Узнайте о возможности обмена валюты и условиях использования карт за границей. Путешествие с детьми Путешествие с детьми требует особого внимания и подготовки. Вот несколько советов, которые помогут сделать поездку комфортной для всей семьи: 1. Выбор направления: Учитывайте интересы и возраст детей. Выбирайте направления с разнообразными развлечениями и безопасными условиями. 2. Комфортное проживание: Забронируйте отели с удобствами для детей, такими как детские кроватки, площадки для игр и бассейны. 3. Питание: Узнайте о возможности получения детского меню в ресторанах. Возьмите с собой перекусы и детское питание на случай длительных переездов. 4. Развлечения в пути: Подготовьте игры, книги и гаджеты с детскими программами для развлечения в дороге. 5. Здоровье и безопасность: Возьмите с собой аптечку с необходимыми лекарствами для детей. Убедитесь, что все прививки сделаны и ребёнок готов к поездке. Заключение Путешествия и отдых — это неотъемлемая часть нашей жизни, способствующая физическому и эмоциональному восстановлению. Платформа Charter.kz предоставляет все необходимые инструменты для организации идеального путешествия. Независимо от того, предпочитаете ли вы пляжный отдых, экскурсионные туры, гастрономические путешествия или экстремальные приключения, Charter.kz поможет сделать ваш отпуск незабываемым. Следуя практическим советам и выбирая устойчивые маршруты, вы можете наслаждаться путешествиями, при этом заботясь о своём комфорте и окружающей среде.

DodikErwansyah said:

Welcome to DodikErwansyah.com, the leading name in premium car dealerships in Indonesia. Established by the visionary Mr. Dodik Erwansyah, our company has its roots in the vibrant city of Surabaya, Jawa Timur. Over the years, we have built a reputation for excellence and reliability in the automotive industry, offering an unmatched selection of luxury and high-performance vehicles.

Our Offerings

At DodikErwansyah.com, we pride ourselves on offering an extensive range of the world's most prestigious car brands. Whether you're in the market for a sleek Ferrari, an elegant Mercedes, a powerful Lamborghini, a reliable Ford, or a sophisticated Porsche, we have the perfect vehicle to meet your needs. Our inventory is meticulously curated to ensure that we provide only the finest automobiles to our discerning clients.

Services We Provide

  • Parts and Maintenance: We understand that maintaining a premium vehicle requires the highest quality parts and service. That's why we offer a comprehensive range of parts for all the brands we sell. Our expert technicians are on hand to provide top-notch maintenance and repair services, ensuring your car remains in peak condition.
  • World-Class Restoration: In addition to selling and servicing luxury vehicles, we also specialize in world-class restoration services. Our skilled team is dedicated to restoring classic and vintage cars to their former glory, using the finest materials and techniques. Whether you have a cherished classic that needs a touch of care or a vintage gem that requires a complete overhaul, we have the expertise to bring your vision to life.
  • Worldwide Shipping: Our commitment to excellence extends beyond Indonesia. We offer worldwide shipping, allowing clients from across the globe to experience the superior quality and service that DodikErwansyah.com is known for. No matter where you are, we can deliver your dream car right to your doorstep.
  • Consignment Program: If you're looking to sell your premium vehicle, our consignment program offers a hassle-free solution. We handle all aspects of the sale, from marketing and negotiations to finalizing the transaction, ensuring you get the best possible value for your car.

Why Choose DodikErwansyah.com?

Choosing DodikErwansyah.com means choosing unparalleled quality, exceptional service, and a team of professionals dedicated to meeting your automotive needs. Our commitment to customer satisfaction is reflected in everything we do, from our meticulously maintained inventory to our world-class services. Experience the difference of working with Indonesia's premier car dealership and let us help you find the perfect vehicle.

For more information, visit DodikErwansyah.com and discover the ultimate in luxury and performance automobiles.

#oldtimer #dodikerwansyah #oldtimerkaufen #classiccars #mercedes280sl #mercedes190sl #porsche #ferrari #lamborghini

Back