ইউআরএল ম্যাট্রিক্স পরামিতি বনাম কোয়েরি পরামিতি


176

আমি ভাবছি যে আমার ইউআরএলগুলিতে ম্যাট্রিক্স বা ক্যোয়ারী প্যারামিটারগুলি ব্যবহার করব কিনা। আমি এই বিষয়ে একটি পুরানো আলোচনা সন্তোষজনক নয়।

উদাহরণ

প্রথম দর্শনে ম্যাট্রিক্স প্যারামগুলির কেবলমাত্র সুবিধা রয়েছে বলে মনে হচ্ছে:

  • আরও পাঠযোগ্য
  • এক্সএমএল নথিগুলিতে কোনও "" "এনকোডিং এবং ডিকোডিং প্রয়োজন নেই
  • "ইউআরএল?" অনেক ক্ষেত্রে ক্যাশে হয় না; ম্যাট্রিক্স প্যারাম সহ ইউআরএলগুলি ক্যাশে করা হয়েছে
  • ম্যাট্রিক্স প্যারামিটারগুলি পথের সর্বত্র প্রদর্শিত হতে পারে এবং এর শেষের মধ্যে সীমাবদ্ধ নয়
  • ম্যাট্রিক্স পরামিতিগুলির একাধিক মান থাকতে পারে: paramA=val1,val2

তবে এর অসুবিধাগুলিও রয়েছে:

  • জ্যাকস-আরএসের মত কয়েকটি ফ্রেমওয়ার্কগুলি ম্যাট্রিক্স পরামিতিগুলিকে সমর্থন করে
  • যখন ব্রাউজারটি জিইটির মাধ্যমে কোনও ফর্ম জমা দেয়, তখন প্যারামগুলি কোয়েরি প্যারামে পরিণত হয়। সুতরাং এটি একই কাজের জন্য দুটি ধরণের পরামিতিগুলিতে শেষ হয়। আরআরএসটি পরিষেবাগুলির ব্যবহারকারীদের বিভ্রান্ত না করার এবং পরিষেবাগুলির বিকাশকারীদের জন্য প্রচেষ্টা সীমাবদ্ধ না করার জন্য, এই ক্ষেত্রে সর্বদা ক্যোয়ারী প্যারামগুলি ব্যবহার করা সহজ হবে be

যেহেতু পরিষেবাটির বিকাশকারী ম্যাট্রিক্স প্যারাম সমর্থন সহ একটি কাঠামো চয়ন করতে পারে, কেবলমাত্র ব্রাউজারগুলি ডিফল্ট ক্যোয়ারী প্যারামিটারগুলি তৈরি করে।

অন্য কোন অসুবিধা আছে কি? আপনি কি করতে চান?


10
আমি নিশ্চিত নই যে ম্যাট্রিক্স ইউআরএলগুলির সাথে বড় চুক্তি কী। টিবিএল যে ডাব্লু 3 সি নকশা নিবন্ধটি লিখেছিল সে অনুসারে এটি কেবল একটি নকশা ধারণা ছিল এবং স্পষ্টতই বলেছিল যে এটি ওয়েবের কোনও বৈশিষ্ট্য নয় । সম্পর্কিত ইউআরএলগুলির মতো জিনিসগুলি ব্যবহার করার সময় প্রয়োগ করা হয় না। আপনি যদি এটি ব্যবহার করতে চান তবে তা ঠিক আছে; এটি ব্যবহারের ঠিক কোনও স্ট্যান্ডার্ড উপায় নেই কারণ এটি কোনও মানক নয়।
স্টিভ পোমেরোয়

2
@ স্টিভ পোমেরোয়: আপনি কি নিবন্ধটি উল্লেখ করেছেন: w3.org/DesignIssues/MatrixURIs.html
মার্সেল

3
@ মার্সেল: হ্যাঁ ম্যাট্রিক্স ইউআরএল সম্পর্কে চিন্তাভাবীদের জন্য, নথির শীর্ষে "স্থিতি: ব্যক্তিগত দর্শন" নোট করুন।
স্টিভ পোমেরোয়

ম্যাট্রিক্স প্যারামের একাধিক মান থাকতে পারে? সত্যি?
আয়শা

উত্তর:


212

গুরুত্বপূর্ণ পার্থক্য হ'ল ম্যাট্রিক্স প্যারামিটারগুলি কোনও নির্দিষ্ট পাথ উপাদানকে প্রয়োগ করে যখন ক্যোয়ারি প্যারামিটারগুলি সামগ্রিকভাবে অনুরোধে প্রযোজ্য। একাধিক স্তরের সংস্থান এবং উপ-সংস্থানগুলিতে একটি জটিল আরএসটি-স্টাইলের ক্যোয়ারী তৈরি করার সময় এটি কার্যকর হয়:

http://example.com/res/categories;name=foo/objects;name=green/?page=1

এটি সত্যিই নেমস্পেসিংয়ে নেমে আসে।

নোট: এখানে সম্পদের 'মাত্রা' হয় categoriesএবং objects

যদি একাধিক-স্তরের URL- এর জন্য কেবল ক্যোয়ারী প্যারামিটারগুলি ব্যবহার করা হয় তবে আপনি শেষ করবেন

http://example.com/res?categories_name=foo&objects_name=green&page=1

এইভাবে আপনি অনুরোধের মধ্যে প্যারামিটারগুলির স্থানীয়তার সাথে যুক্ত স্পষ্টতাও হারাবেন। এছাড়াও, জ্যাক্স-আরএসের মতো কাঠামো ব্যবহার করার সময়, সমস্ত কোয়েরি প্যারামিটার প্রতিটি সংস্থান হ্যান্ডলারের মধ্যে প্রদর্শিত হবে, যার ফলে সম্ভাব্য দ্বন্দ্ব এবং বিভ্রান্তি ঘটবে।

যদি আপনার ক্যোয়ারিতে কেবল একটি "স্তর" থাকে তবে তফাতটি সত্যই গুরুত্বপূর্ণ নয় এবং দুটি ধরণের পরামিতিগুলি কার্যকরভাবে বিনিময়যোগ্য, তবে, ক্যোয়ারী প্যারামিটারগুলি সাধারণত আরও ভাল সমর্থিত হয় এবং আরও ব্যাপকভাবে স্বীকৃত হয়। সাধারণভাবে, আমি আপনাকে সুপারিশ করব যে আপনি এইচটিএমএল ফর্ম এবং সাধারণ, একক-স্তরের এইচটিটিপি এপিআইয়ের মতো জিনিসের জন্য ক্যোয়ারী প্যারামিটারগুলি রেখেছেন।


2
অপ্রাসঙ্গিক: /?অংশ একটি উত্স প্রতিনিধিত্ব করে?
জিন কোওন

7
?অনুরোধের ক্যোয়ারী মাপদন্ড অংশ শুরু হয়। ম্যাট্রিক্স পরামিতিগুলির বিপরীতে ক্যোয়ারী প্যারামিটারগুলি ইউআরএল প্যারামিটারগুলির মধ্যে সবচেয়ে সাধারণ ধরণের। প্রশ্ন চিহ্নের আগে স্ল্যাশ নিশ্চিত করে যে স্ল্যাশের আগে pageম্যাট্রিক্স প্যারামিটারে ক্যোয়ারী প্যারামিটার চলবে না। আমি মনে করি যদি কোনও ম্যাট্রিক্স প্যারামিটার সংযুক্ত না থাকে categoriesতবে কোয়েরি প্যারামিটারগুলি স্ল্যাশ ছাড়া http://example.com/res/categories?page=1
এগুলি

8
যদিও এটি সত্য যে ম্যাট্রিক্স প্যারামিটারগুলি যে কোনও পাথ সেগমেন্টে নির্দিষ্ট করা যেতে পারে, উদাহরণস্বরূপ জ্যাকস-আরএস তাদের সাথে যোগ করেনি যে পথটি সেগমেন্টে যুক্ত করেছেন @ ম্যাট্রিক্সপরামের সাথে ইনজেকশন দেওয়ার সময়। "জ্যাক্স-আরএস ২.০ সহ বিশ্রামযোগ্য জাভা" অনুসারে, "জিইটি / মার্সেডিজ / ই 55; রঙ = কালো / 2006 / অভ্যন্তর; রঙ = ট্যান" এর মতো একটি অনুরোধের বর্ণ ম্যাট্রিক্স পরমের একটি অস্পষ্ট সংজ্ঞা থাকবে। যদিও দেখে মনে হচ্ছে আপনি পৃথকভাবে প্রতিটি প্যাথসিসমেন্টটি প্রক্রিয়া করেন তবে আপনি এটি নির্ধারণ করতে পারেন ... যদি আপনি বিভাগের নাম = foo; অবজেক্টনাম = সবুজ উল্লেখ করেছেন তার চেয়ে এটির পক্ষে আরও কাজ করা তবে আরও কাজ।
ইউএফএল 1138

15

টিম সিলভেস্টারের উত্তর ছাড়াও জ্যাক্স-আরএস দিয়ে কীভাবে ম্যাট্রিক্স পরামিতিগুলি পরিচালনা করা যায় তার একটি উদাহরণ দিতে চাই ।

  1. শেষ সংস্থান উপাদানটিতে ম্যাট্রিক্স পরামিতি

    http://localhost:8080/res/categories/objects;name=green

    আপনি @MatrixParamটীকাটি ব্যবহার করে এগুলি অ্যাক্সেস করতে পারেন

    @GET
    @Path("categories/objects")
    public String objects(@MatrixParam("name") String objectName) {
      return objectName;
    }

    প্রতিক্রিয়া

    green

    তবে জাভাদোক রাজ্যগুলির মতো

    নোট করুন যে @MatrixParamটীকাটি মানটি একটি ম্যাট্রিক্স প্যারামিটারের নামকে বোঝায় যা পাথ-এনোটেটেড জাভা কাঠামোর শেষ ম্যাচিং পাথ সেগমেন্টে থাকে যা ম্যাট্রিক্স প্যারামিটারের মানকে ইনজেক্ট করে।

    ... কী আমাদের 2 পয়েন্ট এনেছে

  2. কোনও URL এর মাঝখানে ম্যাট্রিক্স পরামিতি

    http://localhost:8080/res/categories;name=foo/objects;name=green

    আপনি পাথ ভেরিয়েবল এবং ব্যবহার করে যে কোনও জায়গায় ম্যাট্রিক্স পরামিতি অ্যাক্সেস করতে পারেন @PathParam PathSegment

    @GET
    @Path("{categoryVar:categories}/objects")
    public String objectsByCategory(@PathParam("categoryVar") PathSegment categorySegment, 
                                    @MatrixParam("name") String objectName) {
      MultivaluedMap<String, String> matrixParameters = categorySegment.getMatrixParameters();
      String categorySegmentPath = categorySegment.getPath();
      String string = String.format("object %s, path:%s, matrixParams:%s%n", objectName,
              categorySegmentPath, matrixParameters);
      return string;
    }

    প্রতিক্রিয়া

    object green, path:categories, matrixParams:[name=foo]

    যেহেতু ম্যাট্রিক্স প্যারামিটারগুলি একটি হিসাবে সরবরাহ করা হয় MultivaluedMapআপনি প্রতিটি দ্বারা অ্যাক্সেস করতে পারেন

    List<String> names = matrixParameters.get("name");

    বা যদি আপনার কেবল প্রথমটির প্রয়োজন হয়

    String name = matrixParameters.getFirst("name");
  3. একটি পদ্ধতি প্যারামিটার হিসাবে সমস্ত ম্যাট্রিক্স পরামিতি পান

    http://localhost:8080/res/categories;name=foo/objects;name=green//attributes;name=size

    List<PathSegment>এগুলি সব পেতে একটি ব্যবহার করুন

    @GET
    @Path("all/{var:.+}")
    public String allSegments(@PathParam("var") List<PathSegment> pathSegments) {
      StringBuilder sb =  new StringBuilder();
    
      for (PathSegment pathSegment : pathSegments) {
        sb.append("path: ");
        sb.append(pathSegment.getPath());
        sb.append(", matrix parameters ");
        sb.append(pathSegment.getMatrixParameters());
        sb.append("<br/>");
      }
    
      return sb.toString();
    }

    প্রতিক্রিয়া

    path: categories, matrix parameters [name=foo]
    path: objects, matrix parameters [name=green]
    path: attributes, matrix parameters [name=size]

10

- মন্তব্য বিভাগে relegated করা খুব গুরুত্বপূর্ণ .--

আমি নিশ্চিত নই যে ম্যাট্রিক্স ইউআরএলগুলির সাথে বড় চুক্তি কী। টিবিএল যে ডাব্লু 3 সি নকশা নিবন্ধটি লিখেছিল সে অনুসারে এটি কেবল একটি নকশা ধারণা ছিল এবং স্পষ্টতই বলেছিল যে এটি ওয়েবের কোনও বৈশিষ্ট্য নয়। সম্পর্কিত ইউআরএলগুলির মতো জিনিসগুলি ব্যবহার করার সময় প্রয়োগ করা হয় না। আপনি যদি এটি ব্যবহার করতে চান তবে তা ঠিক আছে; এটি ব্যবহারের ঠিক কোনও স্ট্যান্ডার্ড উপায় নেই কারণ এটি কোনও মানক নয়। - স্টিভ পোমেরোয়

সুতরাং সংক্ষিপ্ত উত্তরটি হ'ল, যদি ব্যবসায়ের উদ্দেশ্যে আপনার আরএস দরকার হয় তবে আপনি অনুরোধ পরামিতিটি ব্যবহার করা থেকে ভাল।


5
কেউ বলছেন যে কৌণিক 2 বিকাশকারীদের যারা সিদ্ধান্ত নিয়েছেন যে তারা এতটা অনন্য ছিলেন তাদের পরিবর্তে এটি বাস্তবায়ন করার প্রয়োজন ছিল!
ম্যাট পাইলেগি

2
@ ম্যাটপিলিগগি আমি এঙ্গুলার ২ এর কারণেও এটি পড়ছি Ang কৌণিক 2 এর প্রায় প্রতিটি দিকই অত্যন্ত বিশেষজ্ঞ, অপ্রচলিত এবং বিদ্যমান ব্যবহারের ধরণগুলির সাথে মতবিরোধে। এটি এখনও অপ্রমাণিত হিসাবে এটি প্রশমিতকরণের মান যুক্ত করে।
আলুয়ান হাদাদাদ

1
তাই বলছি, আমিও একই কারণে এখানে এসেছি তবে ইউআরএল ম্যাট্রিক্স এবং কৌণিক 2 টি দলের গিথুব পৃষ্ঠায় গুগল বিশ্লেষক সম্পর্কে এই ইস্যুটির সাথে এই বিবাদের কিছু পয়েন্ট যুক্ত করতে পারি: github.com/angular/angular/issues/11740 তবে এটি সম্পর্কে কিছু গবেষণা করার পরে, ইউআরএল ম্যাট্রিক্স স্বরলিপিটি ইউআরএল কোয়েরি পরামিতিগুলির চেয়ে বেশি মানব-পঠনযোগ্য বলে মনে হয় , মূলত যখন আমাদের মাঝারি বা ইউআরএলের কিছু পরামিতি প্রয়োজন (কেবল এটির শেষে নয়)।
রিচার্ড লি

8
আমি অনুমান করি যে যারা এই মান-মানহীন বলে মনে করেন তারা কি ইউরি টেম্পলেট বৈশিষ্ট্যের সাথে পরিচিত নয়? পাথের প্যারামগুলিতে জটিল বস্তুগুলির এনকোডিং ইউরি টেম্পলেটগুলির একটি খুব দরকারী বৈশিষ্ট্য; কেবলমাত্র বেশিরভাগ লোকেরা এটি সম্পর্কে জানেন না বা ব্যবহার করেন না তার অর্থ এটি আপনার জীবনে অকেজো জটিলতা ইনজেকশনের জন্য কৌণিক ডেভস দ্বারা কিছু কুফল ষড়যন্ত্র নয়।
আজাক্স

2
পিএফফ্ট - "<জিনিস আমি এখনও অবধি জানতাম না> এটি আমার অজ্ঞতার গ্রহণযোগ্যতা সংরক্ষণ করে অ-স্ট্যান্ডার্ড । টিবিএল যা করেছে বা কোনও ধারণার সাথে সিদ্ধান্ত নেওয়ার সিদ্ধান্ত নিয়েছে তা মূলত অবিরাম। এটি 2001 সালে তার ওয়েবের কোনও বৈশিষ্ট্য ছিল না the ক্লায়েন্ট এবং সার্ভার প্রয়োগকারীরা তাদের চয়ন করতে ওয়েবে বৈশিষ্ট্যগুলি the যদি কৌণিক ম্যাট্রিক্স প্যারামগুলিকে সমর্থন করে এবং জ্যাক্স-আরএস তাদের সমর্থন করে এবং এগুলি আপনি বাস্তবায়ন সরঞ্জাম চয়ন করেছেন তবে এগিয়ে যান এবং কী কাজ করে তা ব্যবহার করুন।
ডেভ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.