質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

Q&A

解決済

1回答

1277閲覧

(Ruby)クライアントからwebapiにリクエストを送るプログラムを作りたい。

退会済みユーザー

退会済みユーザー

総合スコア0

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

0グッド

0クリップ

投稿2018/01/26 08:21

編集2018/01/26 08:32

下記の課題に取り組むために事前学習

QiitaでWebAPI調査し、非公開記事にまとめています。
web apiの学習まとめ
その上で、下記課題に取り組んでいます。

解決したい課題

以下WebAPI3つ使って、ある「利用者ID」を与えて「利用者名」・「登録クラブ一覧」・「登録クラブポイント(point)」の出力プログラムをオブジェクト指向プログラミングで設計/実装しなさい。(URLは無効なURLです)

https://riko-19950120.herokuapp.com/users/1

json

1/*レスポンス(例)*/ 2 { 3 attributes: { 4 id: 1, 5 name: "Rico", 6 club_ids: [ 7 1, 8 3, 9 5 10 ] 11 } 12 }

https://riko-19950120.herokuapp.com/users/1/clubs

json

1 2/*レスポンス(例)*/ 3[ 4 { 5 attributes: { 6 id: 1, 7 user_id: 1, 8 name: "ライザップクラブ", 9 point: 15000 10 } 11 }, 12 { 13 attributes: { 14 id: 3, 15 user_id: 1, 16 name: "シックスパッドクラブ", 17 point: 13000 18 } 19 }, 20 { 21 attributes: { 22 id: 5, 23 user_id: 1, 24 name: "ゴールドジムクラブ", 25 point: 52000 26 } 27 } 28]

https://riko-19950120.herokuapp.com/clubs/2

json

1/*レスポンス(例)*/ 2{ 3 attributes: { 4 id: 2, 5 user_id: 2, 6 name: "ビリーズブートキャンプクラブ", 7 point: 2300 8 } 9}

自分なりの回答

require 'net/http' require 'openssl' require 'uri' require 'json' require 'logger' TIMEOUT_SECOND = 10 # HTTPSに使う時に必要??(今は横に置いておきました...。) # url = '' # https = Net::HTTP.new(url,443) # https.use_ssl = true # https.open_timeout = TIMEOUT_SECOND # https.read_timeout = TIMEOUT_SECOND # https.verify_mode = OpenSSL::SSL::VERIFY_PEER # https.verify_depth = 5 # Qiitaで見たメソッドをアレンジ) def get_json(location,limit=10) raise ArgumentError, 'too many HTTP redirects' if limit == 0 uri = URI.parse(location) begin response = Net::HTTP.start(uri.host,uri.port,use_ssl:uri.scheme == 'https') do |http| http.open_timeout = TIMEOUT_SECOND http.read_timeout = TIMEOUT_SECOND http.get(uri.request_uri) end case response when Net::HTTPSuccess json = response.body JSON.parse(json) ######## ここで「利用者名」・「登録クラブ一覧」・「登録クラブポイント(point)」を? #### when Net::HTTPRedirection location = response['location'] warn "redirected to #{location}" get_json(location, limit - 1) else puts [uri.to_s, response.value].join(" : ") # handle error end rescue => e puts [uri.to_s,e.class,e].join(":") end end puts get_json('****URL??****')

んー...色々まだ考えることがありそうです。。。

困っていること...。

わからないこと
オブジェクト指向での実装オブジェクト志向の内容は理解をしていますが、プログラムに落とし込むことができていません。
設問の「ある『利用者ID』を与えて」...の文言引数idをどのように与えるように実装すればよいのか。クラスのイニシャライズに与えるべきか、メソッドに与えるべきなのかわかりません。

ご助言頂ける方、よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

考えることが多すぎると、なかなか手が動かなかったりしますよね

「目的が何か」に依るところがありますが、簡素なものでもいいので1つ1つ動くものを作っていき、それらが協調して動くように、全体的に作っていってしまうのもよいかもしれません

たとえば今だとクライアント側のコードはあっても、サーバ側のコードがない(?)ので、それを先に作ってしまうのも手だと思います

ruby

1# sinatra.rb 2require 'sinatra' 3require 'json' 4 5# 指定URL の get 通信に応答する 6# get ブロック内では params['id'] で実際の値が採れる 7get '/users/:id' do 8 # Note: 初期段階なので値は固定、他のことは考えない 9 # TODO: クライアント側の実装が終わったら変動id 値で応答できるよう、メソッドに切り出し、ないしデータベースとの連携を検討する 10 { 11 attributes: { 12 id: 1, 13 name: 'Rico', 14 club_ids: [ 15 1, 16 2, 17 5 18 ] 19 } 20 }.to_json 21end 22 23# get '/users/:id/clubs' do 24# ...

sh

1ruby sinatra.rb # => localhost:4567 で待ち受け開始

そして次はクライアント側の設計をし、実装をし、そしてまた サーバ側はどんなURL 形式、リソースの区切り方にするかの設計をし、サーバ側のコードを簡単に実装し、その次は... と、設計と実装の二人三脚をしていく...

最初から完璧を目指すのではなく、「作っては壊す」を素早く繰り返すことで、常に動く状態のものを1歩ずつ考えながら進めていくことができると思います

そうすれば自ずと、「ここの処理はメソッドに切り出して まとめたほうが良いかな」「このメソッド群はぜんぶユーザ関連だからクラスにまとめよう」という具合に、外の振る舞い(≒設計)に合わせて、内部のコードも整っていくように思います

何か参考になれば幸いです

Links

投稿2018/01/26 09:46

gouf

総合スコア2321

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2018/01/27 03:37

goufさんありがとうございます!1つ1つ砕いて少しずつ進めてみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問