node.js पुनर्स्थापना: URL में एपीआई संस्करण




routes restify (2)

वर्तमान में ऐटिबिलिटी के साथ एपीआई के विकास के अंतर्गत और फिर भी हेडर में एपीआई संस्करण निर्दिष्ट करने के लिए उपयोग नहीं किया जा सकता है। यह बहुत उपयोगकर्ता के अनुकूल नहीं लगता

क्या यूआरएल का हिस्सा होने के लिए संस्करण है?

उदाहरण होगा:

http://domain.com/api/v1/action

या मेरे मामले में इससे भी बेहतर:

http://api.domain.com/v1/action

धन्यवाद


लोग सही हैं कि इसे पुन: ताज़ा करके समर्थित नहीं है, लेकिन मैंने सोचा कि मैं इस समस्या का समाधान मेरे मिश्रण में डाल दूंगा। मैं ऐसा कुछ कर रहा हूं (चेतावनी, अनुप्रयुक्त कोड अनुपालन करने के लिए):

सर्वर बनाने के बाद, लेकिन इससे पहले कि मैं मार्गों की घोषणा करता हूं, मैं एक कस्टम पार्सर को यूआरएल-शैली के संस्करण विनिर्देशक को एक HTTP-style specifier में अनुवाद करने के लिए पंजीकृत करता हूं:

server.use(versionParser);

और संस्करण Parser.js ऐसा कुछ दिखता है:

var semver = require('semver');
var restify = require('restify');

module.exports = function (req, res, next) {

    // we expect every request to have the form "/api/[api-version]/..."
    // verify that the api-version is a valid semver value
    var urlPieces = req.url.replace(/^\/+/, '').split('/');
    var api = urlPieces[0];
    var apiVersion = urlPieces[1];

    if (api !== 'api' || !semver.valid(apiVersion)) {
        return next(new restify.InvalidContentError({message: "Invalid Version Specifier"}));
    }

    req.header('Accept-Version', apiVersion);
    return next();
}

इस तरह, आराम से मार्गों को स्वीकार्य-वर्जन हेडर का निरीक्षण कर सकता है क्योंकि वे स्वाभाविक रूप से करते हैं

सिडेनोट : इस उत्तर के लिए शायद सेवोर भाग प्रासंगिक नहीं है, लेकिन मैं यह सत्यापित करना चाहता था कि यूपीएल में एपीआई वर्जन एक वैध सेवर मान था, क्योंकि यह यूआरएल मूल्यों में लचीलेपन की अनुमति देता है जैसे उपयोगकर्ता उपयोगकर्ता को ताज़ा करने का लाभ ले सकता है संस्करण विनिर्देशक


इसके अलावा आप अपने संस्करणों को परिभाषित करने के लिए Restify का उपयोग कर सकते हैं:

var server = restify.createServer({
    name: 'myAPI',
    versions: ['1.0.0', '2.0.0']
});

और फिर इस मिडलवेयर का उपयोग server.pre से करें। server.pre :

server.pre(function (req, res, next) {
    var pieces = req.url.replace(/^\/+/, '').split('/');
    var version = pieces[0];

    // only if you want to use this routes:
    // /api/v1/resource
    // /api/v1.0/resource
    // /api/v1.0.0/resource
    if (!semver.valid(version)) {
        version = version.replace(/v(\d{1})\.(\d{1})\.(\d{1})/, '$1.$2.$3');
        version = version.replace(/v(\d{1})\.(\d{1})/, '$1.$2.0');
        version = version.replace(/v(\d{1})/, '$1.0.0');
    }

    if (semver.valid(version) && server.versions.indexOf(version) > -1) {
        req.url = req.url.replace(version + '/', '');
        req.headers['accept-version'] = version;
    }

    return next();
});

अंत में, अपने मार्गों में आप ऐसा कुछ कर सकते हैं:

server.get({ path: '/resource/:id', version: '1.0.0' }, function () {
  // send object in version 1.0.0
});

server.get({ path: '/resource/:id', version: '2.0.0' }, function () {
  // send object in version 2.0.0
});

उदाहरण:

उपर्युक्त उदाहरण मानकों का पालन करते हैं, क्योंकि यदि संस्करण हेडर या यूआरएल के जरिए निर्दिष्ट नहीं है, तो पिछले संस्करण को दिखाया गया है।

अद्यतन :

मैंने यूआरएल में एपीआई संस्करण बनाने के लिए एक प्लगइन बनाया है: https://www.npmjs.com/package/restify-url-semver





restify