রেল এবং এইচটিটিপার্টি ব্যবহার করে জেএসনকে এপিআইতে পোস্ট করুন


106

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

# get the token

https://api.squishlist.com/auth/?cfg=testcorp&user_key=privatekey&api_key=TEST-KEY-12345
  => {"token": "authtoken",
      "expires": "2010-06-16 13:31:56"}

# and then the ticket with the token

https://api.squishlist.com/rest/?cfg=testcorp&token=authtoken&method=squish.issue.submit&prj=demo
  POST data: {'issue_type': 1, 'subject': 'Hello, world.', 4: 'Open', 5: 10}

পরীক্ষার উদ্দেশ্যে, আমি পরীক্ষার জন্য একটি নিয়ামক, রুট এবং দেখুন (পৃষ্ঠা) তৈরি করেছি। আমার নিয়ামকটিতে আমার নিম্নলিখিত রয়েছে

require 'httparty'
require 'json'

class SubmitticketController < ApplicationController

    def submit_a_ticket

        @cfg = 'xxxsupport'
        @user_key = '4787fsdbbfbfsdbhbfad5aba91129a3f1ed1b743321f7b'
        @api_key = 'MrUser411'
        @project = 'excelm-manoke'
        @url_new_string = 'https://api.squishlist.com/auth/?cfg='+@cfg+'&user_key='+@user_key+'&api_key='+@api_key
        # https://api.squishlist.com/auth/?cfg=xxxsupport&user_key=4787fsdbbfbfsdbhbfad5aba91129a3f1ed1b743321f7b&api_key=MrUser411  - this is what is created by @url_new_string
        response =  HTTParty.get(@url_new_string.to_str)  #submit the string to get the token
        @parsed_and_a_hash = JSON.parse(response)
        @token = @parsed_and_a_hash["token"]


        #make a new string with the token

        @urlstring_to_post = 'https://api.squishlist.com/rest/?cfg='+@cfg+'&token='+@token+'&method=squish.issue.submit&prj='+@project

        #submit and get a result

        @result = HTTParty.post(@urlstring_to_post.to_str, :body => {:subject => 'This is the screen name', :issue_type => 'Application Problem', :status => 'Open', :priority => 'Normal', :description => 'This is the description for the problem'})

    end

end

এবং তারপরে আমার কাছে একটি পৃষ্ঠা রয়েছে যা আমি নিয়ামকদের ক্রিয়াগুলির ফলাফল দেখতে যেতে যাচ্ছি এবং এটিতে নিম্নলিখিত কোড রয়েছে।

<p><%= @result %></p>

আমি জানি যে এটি সাধারণভাবে কাজ করছে কারণ পথে যে প্রতিক্রিয়া আমি পেয়েছি তার কারণে। স্কোয়াশলিস্টে আমি যে ক্ষেত্রগুলি সংজ্ঞায়িত করেছি তার কারণে আমার জসন উদাহরণের থেকে পৃথক। কেউ কি এই বিষয়ে আমাকে সাহায্য করতে পারেন?

আমি অনুমান করি যে আসল সমস্যাটি হ'ল আমি সত্যিই দেখতে পাচ্ছি না যে জাসন কেমন দেখাচ্ছে এবং যদি এটি ম্যাচের কাছাকাছি হয়। আমি সত্যিই জসন সম্পর্কে তেমন কিছু জানি না। আমার কি এমন কিছু ব্যবহার করা উচিত যা সহজ হতে পারে। আমি এটি জমা দেওয়ার জন্য এজাক্স ব্যবহার করা উচিত। কোন সাহায্য ব্যাপকভাবে প্রশংসা করা হয়। আমি এখানে সম্প্রদায় ভালবাসি।

উত্তর:


257

আমি সমাধান .to_jsonএবং কিছু শিরোনামের তথ্য দিয়ে সমাধান করেছি

@result = HTTParty.post(@urlstring_to_post.to_str, 
    :body => { :subject => 'This is the screen name', 
               :issue_type => 'Application Problem', 
               :status => 'Open', 
               :priority => 'Normal', 
               :description => 'This is the description for the problem'
             }.to_json,
    :headers => { 'Content-Type' => 'application/json' } )

9
এছাড়াও, "গিটল্যাব এপিআই" এর মতো কয়েকটি এপিআই "গ্রহণ" শিরোনামের প্রতি সংবেদনশীল। সুতরাং শিরোনাম হওয়া উচিত :headers => { 'Content-Type' => 'application/json', 'Accept' => 'application/json'}। দ্রষ্টব্য:
শিরোনামটি

আমি একটি রেল ইঞ্জিন (রত্ন হিসাবে প্যাকড) স্থাপন করেছি যা রেলপথে API গুলি ডিবাগ করার জন্য সত্যই কার্যকর। আপনাকে কেবল ইঞ্জিনটি মাউন্ট করতে হবে এবং ইউআরএলটি নির্দিষ্ট করতে হবে যা আপনি নির্দিষ্ট করেছেন, অর্থাৎ এটি দেখতে "লোকালহোস্ট: 3000 / এপিআই এক্সপ্লোরার"। এটি একটি এপিআইও নথিভুক্ত করার একটি উপায়, কোনও ফাইল থেকে ওয়েবসার্ভিসেস স্পেসিফিকেশন পড়া। রত্নটির নামকরণ করা হয়েছে 'এপিআই এক্সপ্লোরার' এবং রেপোটি গিথুব / টোপিয়েরল্যাবস / এপিআই এক্সপ্লোরার এপিআই উন্নত করার জন্য কোনও মন্তব্য বা সহায়তা স্বাগত। :)
টনি

6
এটি কেবল নির্বোধ যে ডকুমেন্টেশনে নেই।
টাইলার কলিয়ার

ধন্যবাদ! এটি দুর্দান্ত কাজ করেছে! প্রশ্ন, যদিও: আপনি কীভাবে জেএসএন অ্যারে অন্তর্ভুক্ত করবেন?
রুবেন মার্টিনেজ জুনিয়র

1
উপরের ফর্ম্যাটের মতো 90k রেকর্ডের মতো সংগ্রহের ডেটা পুশ করতে চান। আমি কি একক এপিআই কলগুলিতে পুরো ডেটা ঠেলাতে পারি? দয়া করে আমাকে আপনার মন্তব্যগুলি জানান
রাজু আকুল

13

:query_string_normalizerবিকল্প, পাওয়া যায় যা ডিফল্টভাবে normalizer ওভাররাইড করবেHashConversions.to_params(query)

query_string_normalizer: ->(query){query.to_json}

অসাধারণ! এটি হ্যাশটি সঞ্চয় করতে দেয় request.options[:body]তবে সঠিক স্ট্রিংটি প্রেরণ করে। এটি প্রশ্নের আসল উত্তর হওয়া উচিত।
ফ্রিম্যানয়েড

বিকল্পটি ডিফল্ট হিসাবে ক্লাসে সেট করা যেতে পারে এইচটিটিপি পার্টির সাথে ক্যোরি_স্ট্রিং_নর্মালাইজার শ্রেণীর পদ্ধতি, দেখুন: রুবি
ডোক.আর.অর্গ

: এটা এছাড়াও সামগ্রী-প্রকার হেডার সেট করার প্রয়োজন হতে পারে ruby-doc.org/gems/docs/h/httparty2-0.7.10/HTTParty/...
Fryie

1
query_string_normalizerপোস্টের ডেটা নয়, ক্যোয়ারী স্ট্রিংয়ের জন্য ব্যবহার করা উচিত।
জোসফ্রাইডার

লিঙ্কগুলি ruby-doc.orgমারা গেছে, ডকুমেন্টেশনটি পোস্ট পার্টির ডক
ইয়্যাক
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.