ما هي أفضل الممارسات لتصميم واجهة برمجة تطبيقات RESTful العامة على Rails؟

StackOverflow https://stackoverflow.com/questions/144359

  •  02-07-2019
  •  | 
  •  

سؤال

يأتي Rails مزودًا بموارد RESTful جاهزة للاستخدام، ولكن هل تستخدمها لواجهة برمجة التطبيقات العامة الفعلية الخاصة بك؟إذا كان الأمر كذلك، كيف يمكنك إنجاز إصدار API الخاص بك، على سبيل المثال؟ example.com/api/v2/foo/bar?

هل كانت مفيدة؟

المحلول

عادةً ما يتم إنشاء واجهات برمجة التطبيقات لتطبيقاتي على نفس الموارد التي تشكل واجهة HTML.بالنسبة للبعض (وليس أنا)، قد يكون ذلك مجرد استخدام التعليمات البرمجية التي تخرج من منشئ السقالة - ولكن بغض النظر عما إذا كنت أكتبها بشكل مخصص أو أسمح للمولد بالتعامل معها، هناك حالات قليلة جدًا حيث أعرض الموارد فقط للبرمجة API وليس لعرض المستخدم النهائي.

لم يمثل تعيين الإصدار مشكلة بالنسبة للتطبيقات التي قمت بإنشائها حتى الآن، ولكن يمكنني التفكير في طريقتين لتنفيذها.

1) يمكنك إضافة مسارات بالبادئة "v1" و"v2" وما إلى ذلك، والتي تقوم بتعيين معلمة يمكنك بعد ذلك الوصول إليها في وحدة التحكم لتحديد حدوث المعالجة:

في الطرق.rb:

map.resources :posts, :path_prefix => '/:version'

في post_controller.rb

class PostsController < ApplicationController
  def index
    respond_to do |format|
      format.xml do
        if params[:version] == 'v1'
          # ...
        else
          # ...
        end
      end
    end
  end
end

2) قد تفكر أيضًا في إضافة تنسيق استجابة مخصص لكل إصدار

في مُهيئات/mime_types.rb

Mime::Type.register_alias "application/xml", :v1
Mime::Type.register_alias "application/xml", :v2

في post_controller.rb

class PostsController < ApplicationController
  def index
    respond_to do |format|
      format.v1 do
        # ...
      end
      format.v2 do
        # ...
      end
    end
  end
end

سيعطيك الأول عناوين URL مثل example.com/v1/posts.xml وexample.com/v2/posts.xml؛سيعطيك الأخير عناوين URL مثل example.com/posts.v1 وexample.com/posts.v2

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top